this should get close to it
Code:
define OSC 48
some vars
bits var byte[13] ' an array to hold the 100 bits
I_data var PORTB.2 'lets call this the input
bit_count var byte
'a subroutine
bit_read:
t4con=0 ' timer off
tmr4=0 ' clear timer
bit_count = 0
while ( i_data) : wend ' wait here till input goes idle
while ( ! i_data) : wend 'wait here till input goes high to sync up
t4con=$7e '256:1// count of 45 or so = 1mS
while ( i_data) : wend ' wait here till input goes low
t4con=0 ' timer off
if (tmr4 >43 ) and (tmr4 < 47) then goto start_ok ' bit of latitude might need more
goto bit_read
start_ok:
while bit_count < 100
tmr4=0 ' clear timer
pir3.3=0 'clear timer overflow flag
while ( ! i_data) : wend 'wait here till input goes high
t4con=6 ; prescale 16 timer on
while ( i_data) : wend ' wait here till input goes low
t4con=0 ' timer off
if pir3.3 then bits.0[bit_count]=1 ; ontime > 340 uS
else
bits.0[bit_count]=0 ' the ontime < 340 uS
endif
bit_count=bit_count+1
wend
return
Bookmarks