📄 infrared-rx.asm
字号:
;===============================================================
; Infrared reseiver Date: 2004-04-20
;===============================================================
;Infrared transmit model: PT2461(LC7461M)
;AT89C2051 MCU
;Crystal frequency is 12MHz
;Designer: Arwing_xue@hotmail.com
;***********************************************************************************
;reseive signal wave:
; -a- -c- -e- -g- -j- -l-
;------ ----- --- ------- ------ ------
; | | | | | | | ...... | | |
; ------------ --- --- --- ---
; -b- -d- -f- -h- -i- -k-
;
; | -start- | -0- | -1- | ...... | -1- | -End- |
;
; a: no signal
; b: 9mS
; c: 4.5mS
; d,f,i,k: 620uS
; e: 480uS
; g,j: 1.632mS
; h: total 13+13+8+8=42bit
;***********************************************************************************
;reseive signal format:
; |-----------|----data1----|-------data2------|--data3---|----data4------|-----|
; | -start- |-custom code-|-nor(custom code)-|-key data-|-nor(key data)-|-end-|
; |-(9+4.5)mS-|----13bit----|------13bit-------|---8bit---|-----8bit------|-----|
;data format:
; data1: custom code=>|d0-d1-d2-d3-d4-d5-d6-d7-d8-d9-d10-d11-d12|
; data2: nor custom code=>|/d0-/d1-/d2-/d3-/d4-/d5-/d6-/d7-/d8-/d9-/d10-/d11-/d12|
; data3: key data=>|d0-d1-d2-d3-d4-d5-d6-d7|
; data4: nor key data=>|/d0-/d1-/d2-/d3-/d4-/d5-/d6-/d7|
;***********************************************************************************
;===================================================================================
infrared_in_pin bit p3.3
led bit p1.7
infrared_rx_err_flag bit 20h.0
infrared_rx_data1 equ 7fh
infrared_rx_data2 equ 7eh
infrared_rx_keep_press_time equ 7dh
;forllow is the pt2461 address code
coustom_code1 equ 00110101b ;x,x,c0,c1,c2,c3,c4,c5
coustom_code2 equ 00010000b ;x,c6,c7,c8,c9,c10,c11,c12
nor_coustom_code1 equ 00001010b ;x,x,/c0,/c1,/c2,/c3,/c4,/c5
nor_coustom_code2 equ 01101111b ;x,/c6,/c7,/c8,/c9,/c10,/c11,/c12
;----------------------------------------------------------
org 00h
jmp main
org 100h
main:
mov sp,#50h
call delay100mS
mov sp,#50h
main1:
clr infrared_rx_keep_press_time
infrared_rx:
jnb infrared_in_pin,$
clr infrared_rx_err_flag
jb infrared_in_pin,$ ;wait low
;------------------------------
infrared_rx_9ms:
mov r1,#00h ;test value r1=85/86,so 81<r1<90
mov r2,#03h
infrared_rx_9ms1:
call delay100uS ;100
inc r1 ;1
jnb infrared_in_pin,infrared_rx_9ms3 ;2
djnz r2,infrared_rx_9ms4
mov a,r1
cjne a,#81,infrared_rx_9ms2
setb cy
infrared_rx_9ms2:
jnc infrared_rx_4m5s
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_9ms3:
mov r2,#3 ;1
infrared_rx_9ms4: ;1
mov a,r1 ;2
cjne a,#90,infrared_rx_9ms5 ;1
clr cy
infrared_rx_9ms5: ;2
jc infrared_rx_9ms1
setb infrared_rx_err_flag
jmp infrared_rx_end
;------------------------------
infrared_rx_4m5s:
mov r1,#00h ;test value r1=108~~112,so 100<r1<120
mov r2,#03h
infrared_rx_4m5s1:
call delay30uS ;100
inc r1 ;1
jb infrared_in_pin,infrared_rx_4m5s3 ;2
djnz r2,infrared_rx_4m5s4
mov a,r1
cjne a,#100,infrared_rx_4m5s2
setb cy
infrared_rx_4m5s2:
jnc infrared_rx_custom_code_1part
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_4m5s3:
mov r2,#3 ;1
infrared_rx_4m5s4: ;1
mov a,r1 ;2
cjne a,#120,infrared_rx_4m5s5 ;1
clr cy
infrared_rx_4m5s5: ;2
jc infrared_rx_4m5s1
setb infrared_rx_err_flag
jmp infrared_rx_end
;------------------------------
infrared_rx_custom_code_1part:
inc infrared_rx_keep_press_time
mov r3,#6
call infrared_rx_one_byte
jb infrared_rx_err_flag,infrared_rx_end
mov a,infrared_rx_data1
anl a,#00111111b
cjne a,#coustom_code1,infrared_rx_custom_code_1part1
jmp infrared_rx_custom_code_2part
infrared_rx_custom_code_1part1:
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_custom_code_2part:
mov r3,#7
call infrared_rx_one_byte
jb infrared_rx_err_flag,infrared_rx_end
mov a,infrared_rx_data1
anl a,#01111111b
cjne a,#coustom_code2,infrared_rx_custom_code_2part1
jmp infrared_rx_custom_code_3part
infrared_rx_custom_code_2part1:
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_custom_code_3part:
mov r3,#6
call infrared_rx_one_byte
jb infrared_rx_err_flag,infrared_rx_end
mov a,infrared_rx_data1
anl a,#00111111b
cjne a,#nor_coustom_code1,infrared_rx_custom_code_3part1
jmp infrared_rx_custom_code_4part
infrared_rx_custom_code_3part1:
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_custom_code_4part:
mov r3,#7
call infrared_rx_one_byte
jb infrared_rx_err_flag,infrared_rx_end
mov a,infrared_rx_data1
anl a,#01111111b
cjne a,#nor_coustom_code2,infrared_rx_custom_code_4part1
jmp infrared_rx_key_value
infrared_rx_custom_code_4part1:
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_key_value:
mov r3,#8
call infrared_rx_one_byte
jb infrared_rx_err_flag,infrared_rx_end
mov infrared_rx_data2,infrared_rx_data1
mov r3,#8
call infrared_rx_one_byte
jb infrared_rx_err_flag,infrared_rx_end
mov a,infrared_rx_data2
cpl a
cjne a,infrared_rx_data1,infrared_rx_key_value1
jmp infrared_rx_end
infrared_rx_key_value1:
setb infrared_rx_err_flag
jmp infrared_rx_end
infrared_rx_end:
jb infrared_rx_err_flag,infrared_rx_end1
cpl led
mov infrared_rx_keep_press_time,#00h
jmp infrared_rx
infrared_rx_end1:
mov a,infrared_rx_keep_press_time
cjne a,#5,infrared_rx_end1a
;cpl led
mov infrared_rx_keep_press_time,#00h
infrared_rx_end1a:
jmp infrared_rx
jmp $
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -