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

📄 jiema.a51

📁 次程序为在89S52中对红外遥控的解码程序
💻 A51
字号:
//下面是一个对51实验板配套的红外线遥控器的解码程序,它可以把红外遥控器每一个按键的键值读出来,并且通过实验板上P1口的8个LED显示出来,在解码成功的同时并且能发出“嘀嘀嘀”的提示音。
       ;=================================================
//; 红外遥控接收     
;=================================================
//;中山单片机学习网    智佳科技   逸风
;=================================================
 
?PR?jiema SEGMENT CODE      //在程序存储区中定义段
PUBLIC jiema                //声明函数
RSEG ?PR?jiema              //函数可被连接器放置在任何地方
 
jiema:
    JNB    P2.3,IR        //;遥控扫描
    LJMP   jiema          //;在正常无遥控信号时,一体化红外接收头输出是高电平,程序一直在循环。
 
;=================================================
//;   解码程序
IR: 
    //;以下对遥控信号的9000微秒的初始低电平信号的识别,波形见图5。
    MOV    R6,#10
IR_SB:
    ACALL DELAY882        //;调用882微秒延时子程序
    JB     P2.3,IR_ERROR  //;延时882微秒后判断P2.2脚是否出现高电平如果有就退出解码程序
    DJNZ   R6,IR_SB      // ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
  //
  //  ;识别连发码,和跳过4.5ma的高电平。
    JNB     P2.3, $      // ;等待高电平避开9毫秒低电平引导脉冲
    ACALL  DELAY2400
    JNB     P2.3,IR_Rp   // ;这里为低电平,认为是连发码信号,见图6。
    ACALL  DELAY2400     // ;延时4.74毫秒避开4.5毫秒的结果码
 
   // ;以下32数据码的读取 ,0和1的识别 请看图2
    MOV     R1,#1AH      //  ;设定1AH为起始RAM区
    MOV     R2,#4 
IR_4BYTE: 
    MOV     R3,#8
IR_8BIT:   
    JNB     P2.3,$       //  ;等待地址码第一位的高电平信号
    LCALL  DELAY882      //  ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
    MOV    C,P2.3         // ;将P2.2引脚此时的电平状态0或1存入C中
    JNC     IR_8BIT_0     // ;如果为0就跳转到IR_8BIT_0
    LCALL  DELAY1000
IR_8BIT_0: 
    MOV    A,@R1          // ;将R1中地址的给A
    RRC    A              // ;将C中的值0或1移入A中的最低位
    MOV    @R1,A          // ;将A中的数暂时存放在R1中
    DJNZ   R3,IR_8BIT   //   ;接收地址码的高8位
    INC    R1             // ;对R1中的值加1,换下一个RAM
    DJNZ   R2,IR_4BYTE    // ;接收完16位地址码和8位数据码和8位数据,
                          // ;存放在1AH/1BH/1CH/1DH的RAM中
   // ;解码成功
    JMP    IR_GOTO
 
IR_Rp:
  //  ;这里为重复码执行处
   // ;按住遥控按键时,每过108ms就到这里来
    JMP    IR_GOTO
 
IR_ERROR:
   // ;错语退出
    LJMP   jiema //;退出解码子程序
 
;=================================================
//;遥控执行部份
IR_GOTO:
    // ;判断两个数据码是否相反
    MOV    A,1CH
    CPL    A
    CJNE   A,1DH,IR_ERROR   // ;两个数据码不相反则退出
   // ;遥控执行部份
    ;MOV   A,1DH            // ;判断对应按键
    ;CJNE  A,#xxH,$+6
    ;LJMP // -à跳到对应按键执行处
    ;CJNE  A,#xxH,$+6
    ;LJMP // -à跳到对应按键执行处
    ;.
 
    //MOV     P1,1DH        // ;将按键的键值通过P1口的8个LED显示出来!
	MOV     A,1DH
   // CLR     P3.5          //;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
    LCALL  DELAY2400
    LCALL  DELAY2400
    LCALL  DELAY2400

	  LCALL  DELAY2400
    LCALL  DELAY2400
    LCALL  DELAY2400
	  LCALL  DELAY2400
    LCALL  DELAY2400
    LCALL  DELAY2400
	  LCALL  DELAY2400
    LCALL  DELAY2400
    LCALL  DELAY2400
	  LCALL  DELAY2400
    LCALL  DELAY2400
    LCALL  DELAY2400
	  LCALL  DELAY2400
    LCALL  DELAY2400
    LCALL  DELAY2400
    //SETB   P3.5         // ;蜂鸣器停止
 
    //;清除遥控值使连按失效
    MOV    1AH,#00H
    MOV    1BH,#00H
    MOV    1CH,#00H
   // MOV    1DH,#00H 
   // LJMP   jiema
;=================================================
//; 延时子程序
;=============================882
DELAY882: ;1.085x ((202x4)+5)=882
    MOV R7,#202
DELAY882_A:
    NOP
    NOP
    DJNZ   R7,DELAY882_A
RET
 
;=============================1000
DELAY1000: ;1.085x ((229x4)+5)=999.285
    MOV R7,#229
DELAY1000_A:
    NOP
    NOP
    DJNZ   R7,DELAY1000_A
RET
;=============================2400
DELAY2400: ;1.085x ((245x9)+5)=2397.85
    MOV R7,#245
DELAY2400_A:
    NOP
    NOP
    NOP
    NOP
    NOP
   NOP
    NOP
    DJNZ   R7,DELAY2400_A
RET
END

⌨️ 快捷键说明

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