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

📄 infrared-rx.asm

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