⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 infrared-rx.asm

📁 用单片机接收红外线IC发出的信号
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;===============================================================
;                      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 + -