.include "tn13def.inc"
.def MyIr = R14
.def Temp = R15
.def devTmp = R16
.def cmdTmp = R17
.def loopTmp = R18
.def thms = R19
.def d1 = R20
.def d2 = R21
.def d3 = R22
.def sPulse = R23
.org 0x0000
rjmp RESET
RESET:
ldi thms, 0xC8 ;200 (200ms @ 4mhz)
ldi sPulse, 0x0C ;12 (200ms) = 2.4mS
ldi loopTmp, 0x07
ldi d1, 0x00
ldi d2, 0x00
ldi d3, 0x00
ldi cmdTmp,0x00
ldi devTmp,0x00
rcall GetSirc
Loop4Eva:
rjmp Loop4Eva
GetSirc:
rcall WaitLow
GetStart:
inc d1
rcall Delay200mS
in MyIR,PORTB
sbrs MyIR,4 ;Check if pin hi/lo
rjmp GetStart ;Pin still low add more
cpi d1,0x0B ;The pin is now high
brlo GetSirc ;if the count is less than 11 bad start
cpi d1,0x0E ;if the count is equal to or geater than 14 bad start
brsh GetSirc
ldi d1, 0x00 ;If it made it here the start pulse was ok
ldi d2, 0x07
GetSeven:
dec d2
lsr cmdTmp
repeatS:
rcall WaitLow
inc d1
rcall Delay200mS
in MyIR,PORTB
sbrs MyIR,4 ;Check if pin hi/lo
rjmp repeatS ;If pin still low repeat
cpi d1,0x05
brlo DoneOring
ori cmdTmp,$40
DoneOring:
cpi d2, 0x00 ;Check if collected 7 bits
brne GetSeven
ldi d1, 0x00
ldi d2, 0x05
GetFive:
dec d2
lsr devTmp
repeatF:
rcall WaitLow
inc d1
rcall Delay200mS
in MyIR,PORTB
sbrs MyIR,4 ;Check if pin hi/lo
rjmp repeatF ;If pin still low repeat
cpi d1,0x05
brlo DoneOring2
ori devTmp,$10
DoneOring2:
cpi d2, 0x00 ;Check if collected 7 bits
brne GetFive
ldi d1, 0x00
ldi d2, 0x00
ret
Delay200mS: ;delay 200mS at 4mhz
ldi d1, 0xC8
delay200ms_1:
dec d1
cpi d1,0x00
brne delay200ms_1
ret
WaitLow:
in MyIR,PORTB
sbrc MyIR,4
rjmp WaitLow
ret