📄 infrared-rx.asm
字号:
setb infrared_rx_err_flag
jmp infrared_rx_one_byte_end
infrared_rx_one_byte3:
mov r2,#3 ;1
infrared_rx_one_byte4: ;1
mov a,r1 ;2
cjne a,#22,infrared_rx_one_byte5 ;1
clr cy
infrared_rx_one_byte5: ;2
jc infrared_rx_one_byte1
setb infrared_rx_err_flag
jmp infrared_rx_one_byte_end
;------------------------------
infrared_rx_one_byte6:
mov r1,#00h ;test value r1=20~~27, so 16<r1<31
mov r2,#03h ;if delay 30us,r1=10~~14,so 7<r1<17
infrared_rx_one_byte7:
call delay30uS ;100
inc r1 ;1
jb infrared_in_pin,infrared_rx_one_byte9 ;2
djnz r2,infrared_rx_one_byte10
mov a,r1
cjne a,#7,infrared_rx_one_byte8
setb cy
infrared_rx_one_byte8:
jnc infrared_rx_one_byte8a
setb infrared_rx_err_flag
jmp infrared_rx_one_byte_end
infrared_rx_one_byte8a:
cjne a,#17,infrared_rx_one_byte8b
clr cy
infrared_rx_one_byte8b:
jnc infrared_rx_one_byte8c
mov a,infrared_rx_data1
clr cy
rlc a
mov infrared_rx_data1,a
djnz r3,infrared_rx_one_byte
jmp infrared_rx_one_byte_end
infrared_rx_one_byte8c:
cjne a,#36,infrared_rx_one_byte8d
clr cy
infrared_rx_one_byte8d:
jc infrared_rx_one_byte8e
mov a,infrared_rx_data1
setb cy
rlc a
mov infrared_rx_data1,a
djnz r3,infrared_rx_one_byte
jmp infrared_rx_one_byte_end
infrared_rx_one_byte8e:
setb infrared_rx_err_flag
jmp infrared_rx_one_byte_end
infrared_rx_one_byte9:
mov r2,#3 ;1
infrared_rx_one_byte10: ;1
mov a,r1 ;2
cjne a,#46,infrared_rx_one_byte11 ;1
clr cy
infrared_rx_one_byte11: ;2
jc infrared_rx_one_byte7
setb infrared_rx_err_flag
jmp infrared_rx_one_byte_end
;------------------------------
infrared_rx_one_byte_end:
ret
;--------------------------------------------------------------------
delay100mS: mov r7,#200
delay100mS1: mov r6,#250
djnz r6,$ ;2x250x200=100000uS=100mS
djnz r7,delay100mS1
ret
;--------------------------------------------------------------------
delay100uS: nop ;1
mov r7,#47 ;1
djnz r7,$ ;47x2=97
ret ;2 --total time is 97+1+1+2+2=100uS
;--------------------------------------------------------------------
delay30uS: nop ;1
mov r7,#12 ;1
djnz r7,$ ;12x2=24
ret ;2 --total time is 24+1+1+2+2=30uS
;--------------------------------------------------------------------
delay10uS: nop ;1
nop
nop
nop
nop
nop
ret ;2 --total time is 24+1+1+2+2=30uS
;--------------------------------------------------------------------
end
-----------------------------------------------------------------------
infrared_rx_one_byte:
mov r1,#00h ;test value r1=29~~34, so 25<r1<38
mov r2,#03h ;if delay30us,r1=15~~19,so 12<r1<22
infrared_rx_one_byte1:
call delay30uS ;100
inc r1 ;1
jnb infrared_in_pin,infrared_rx_one_byte3 ;2
djnz r2,infrared_rx_one_byte4
mov a,r1
cjne a,#12,infrared_rx_one_byte2
setb cy
infrared_rx_one_byte2:
jnc infrared_rx_one_byte6
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_one_byte3:
mov r2,#3 ;1
infrared_rx_one_byte4: ;1
mov a,r1 ;2
cjne a,#22,infrared_rx_one_byte5 ;1
clr cy
infrared_rx_one_byte5: ;2
jc infrared_rx_one_byte1
setb infrared_rx_err_flag
jmp infrared_rx_end
;------------------------------
infrared_rx_one_byte6:
infrared_rx_2bit:
mov r1,#00h ;test value r1=20~~27, so 16<r1<31
mov r2,#03h ;if delay 30us,r1=10~~14,so 7<r1<17
infrared_rx_2bit1:
call delay30uS ;100
inc r1 ;1
jb infrared_in_pin,infrared_rx_2bit3 ;2
djnz r2,infrared_rx_2bit4
mov a,r1
cjne a,#7,infrared_rx_2bit2
setb cy
infrared_rx_2bit2:
jnc infrared_rx_check
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_2bit3:
mov r2,#3 ;1
infrared_rx_2bit4: ;1
mov a,r1 ;2
cjne a,#17,infrared_rx_2bit5 ;1
clr cy
infrared_rx_2bit5: ;2
jc infrared_rx_2bit1
setb infrared_rx_err_flag
jmp infrared_rx_end
;------------------------------
infrared_rx_check:
infrared_rx_3bit:
mov r1,#00h ;delay30us test value r1=15~~18, so 12<r1<22
mov r2,#03h
infrared_rx_3bit1:
call delay30uS ;100
inc r1 ;1
jnb infrared_in_pin,infrared_rx_3bit3 ;2
djnz r2,infrared_rx_3bit4
mov a,r1
cjne a,#12,infrared_rx_3bit2
setb cy
infrared_rx_3bit2:
jnc infrared_rx_4bit
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_3bit3:
mov r2,#3 ;1
infrared_rx_3bit4: ;1
mov a,r1 ;2
cjne a,#22,infrared_rx_3bit5 ;1
clr cy
infrared_rx_3bit5: ;2
jc infrared_rx_3bit1
setb infrared_rx_err_flag
jmp infrared_rx_end
;------------------------------
infrared_rx_4bit:
mov r1,#00h ;test value r1=20~~27, so 16<r1<31
mov r2,#03h
infrared_rx_4bit1:
call delay30uS ;100
inc r1 ;1
jb infrared_in_pin,infrared_rx_4bit3 ;2
djnz r2,infrared_rx_4bit4
mov a,r1
cjne a,#36,infrared_rx_4bit2
setb cy
infrared_rx_4bit2:
jnc infrared_rx_check1
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_4bit3:
mov r2,#3 ;1
infrared_rx_4bit4: ;1
mov a,r1 ;2
cjne a,#46,infrared_rx_4bit5 ;1
clr cy
infrared_rx_4bit5: ;2
jc infrared_rx_4bit1
setb infrared_rx_err_flag
jmp infrared_rx_end
;------------------------------
infrared_rx_check1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -