pragma target chip 16f84 pragma target clock 10_000_000 pragma target osc hs pragma target watchdog off pragma target powerup on pragma target protection off include jlib var volatile bit serial_pin is pin_a1 var volatile bit serial_dir is pin_a1_direction var volatile bit card_clock_pin is pin_b0 var volatile bit card_clock_dir is pin_b0_direction var volatile bit card_missing_pin is pin_b4 var volatile bit card_missing_dir is pin_b4_direction var volatile bit card_not_data_pin is pin_b3 var volatile bit card_not_data_dir is pin_b3_direction include queue include serial include card var byte _save_w var byte _save_status procedure isr is pragma interrupt if intcon_t0if then -- bug me again in 130 tmr0 increments -- (256+2+2-130=130) asm movlw 130 asm movwf tmr0 do_serial intcon_t0if = false end if if intcon_rbif then do_card intcon_rbif = false end if if intcon_intf then do_card intcon_intf = false end if end procedure -- initialization assembler clrwdt bsf status, 5 movlw 0b_1000_0000 -- prescaler = 2 movwf 1 bcf status, 5 end assembler serial_dir = output card_clock_dir = input card_missing_dir = input card_not_data_dir = input intcon_t0ie = true intcon_inte = true intcon_rbie = true intcon_eeie = false intcon_gie = true serial_pin = low queue_init q_param = 10 queue_put q_param = "o" queue_put q_param = "k" queue_put q_param = 10 queue_put serial_send forever loop -- la la la end loop