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

📄 ir decode(at89c2051).txt

📁 采用2051单片机控制的红外解码程序
💻 TXT
字号:
;*************************************************************************
;
;  文 件 名 : REMOTE.A51                                                  *
;  芯片型号 : AT89C2051 MCU @6Mhz                                         *
;  发射芯片 : PT2222 OR PT2213                                            *
;  功    能 : 遥控器键码接收解码程式                                      *
;  版 本 号 : VER. 2.00                                                   *
; 
;**************************************************************************

  ir_rec_ok     bit     00h
  ir_first      bit     01h

  stack         equ     50h
  custom_code   equ     21h
  key_code      equ     23h

  custom_id     data    0eh

  leader_code   data    11h        ; 引导码
  end_code      data    5ch        ; 尾码
  code_0        data    02h        ; "0" 码
  code_1        data    04h        ; "1" 码

;*************************************************************************

                org     0000h
                jmp     initial
                org     0003h
                jmp     ir_recever

;*************************************************************************

                org     0030h
      initial:  mov     r0,#02h
                mov     r1,#7fh      ;#7fh=127
      clr_reg:  mov     @r0,#00h
                inc     r0
                djnz    r1,clr_reg   ;条件转移指令 寄存器减1--为0顺序执行

                mov     sp,#stack       
                mov     tmod,#00000001b ;模式1:16 位计数器,无预分频器,GATE=0,TR0=1 即可启动
                mov     ip,#00000001b   ;外部中断0(EX0)为高优先级
                mov     tcon,#00000001b ;外部中断0(EX0),IT0=1 下降沿触发
                clr     et0             ;不允许T0中断
                mov     ie,#10000001b   ;允许所有中断,外部中断0(EX0)允许

     main_pro:  nop
                jb      ir_rec_ok,key_pro
                nop
                jmp     main_pro

;*************************************************************************

      key_pro:  nop                        ;1 个机器周期--24us
                nop
                nop
                nop
                clr     ir_rec_ok
                jmp     main_pro

;************** 红外接收解码程式入口 *************************************

   ir_recever:  push   acc
                push   psw
                setb   rs0   ;PSW.3
                clr    rs1   ;PSW.4,R1 区1--08H-0FH
                mov    a,th0
                mov    r2,a
                mov    tl0,#00h
                mov    th0,#00h
                setb   tr0
                cjne   a,#leader_code,chk_end1  ;引导码
                mov    r0,#20h
                setb   ir_first

   int_return:  clr     ie0
                pop     psw
                pop     acc
                reti

     chk_end1:  jnb     ir_first,int_return    ;位条件转移指令,ir_first=1 则顺序执行
                cjne    a,#end_code,read_code  ;cjne a,#data,标号--相等则顺序执行
                jmp     int_return             

    read_code:  mov     a,r2
                cjne    a,#code_0,receive_1
                jmp     receive_0

    receive_1:  cjne    a,#code_1,int_return   ;#data--立即数,相等则顺序执行
                setb    c
                jmp     encode

    receive_0:  clr     c

       encode:  mov     a,key_code+1   ;key_code=23H
                rrc     a              ;带进位的循环右移指令
                mov     key_code+1,a
                mov     a,key_code
                rrc     a
                mov     key_code,a
                mov     a,custom_code+1
                rrc     a
                mov     custom_code+1,a
                mov     a,custom_code
                rrc     a
                mov     custom_code,a
                djnz    r0,int_return   ;寄存器减1条件转移指令--寄存器内容为0则顺序执行

                mov     a,custom_code
                cjne    a,#custom_id,ir_exit_int

                mov     a,key_code
                cpl     a              ;累加器取反指令
                xrl     a,key_code+1   ;逻辑异或操作指令
                jnz     ir_exit_int    ;判0转移指令,A=0 则转移执行
                setb    ir_rec_ok
                jmp     ir_ok_exit

  ir_exit_int:  clr     ir_rec_ok
   ir_ok_exit:  clr     tr0
                mov     tl0,#00h
                mov     th0,#00h
                clr     ir_first
                pop     psw
                pop     acc
                reti

;**************************************************************************

                db      " ver. 2.00  zhou  00-10-17 16:57 "
  end


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -