文章搜索

红外遥控键值解码

发表时间:2015-4-30  作者:admin  浏览次数:3583  
字体大小: 【小】 【中】 【大】
;******************************************************************************
;*  描述:      
;*         红外遥控键值解码                                                                                                                                                          
;******************************************************************************
;* 【版权】 Copyright(C)东哥单片机学习网 www.picavr.com  All Rights Reserved       
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                                  
;******************************************************************************
          DATA1   EQU    30H    ;
   DATA2   EQU    31H    ;
          DATA3   EQU    32H    ;
   DATA4   EQU    33H    ;
          RMT     EQU    P3.2   ;
;-------------------------------------------
          ORG     0000H         ;程序执行开始地址
          LJMP    START         ;跳至START
          ORG     0003H         ;外中断0中断程序入口
          RETI          ;中断返回
          ORG     000BH         ;定时器T0中断程序入口
          RETI          ;中断返回
          ORG     0013H         ;外中断1中断入口
          RETI          ;跳至INTEX1中断服务程序
          ORG     001BH         ;定时器T1中断程序入口
          RETI          ;跳至INTT1中断服务程序
          ORG     0023H         ;串口中断入口地址
          RETI          ;中断返回
          ORG     002BH         ;定时器T2中断入口地址
          RETI          ;中断返回
;-------------------------------------------
          ORG    0030H          ;
START:
          MOV    SP,#60H        ;初始化堆栈指针 
   MOV    P0,#0FFH       ;初始化I/O口
   MOV    P1,#0FFH       ;
          MOV    P2,#0FFH       ;
          MOV    P3,#0FFH       ;
;*******************************************
MAIN:
          JNB  RMT,IR_1838    ;
   AJMP   MAIN           ;
;*******************************************
IR_1838: 
     MOV   R5,#10         ;
A1:
   ACALL  DELAY882 ;调用882微秒延时子程序
   JB   RMT,MAIN ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
    DJNZ   R5, A1  ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
                         ;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
   JNB  RMT,$          ;等待高电平避开9毫秒低电平引导脉冲
   ACALL  DELAY2         ;
   JNB  RMT,MAIN  ;
   ACALL  DELAY2         ;延时4.74毫秒避开4.5毫秒的结果码
;*******************************************        
   MOV  R1,#1AH  ;设定1AH为起始RAM区
   MOV  R2,#4          ;
A2:  
   MOV  R3,#8          ;
A3: 
   JNB  RMT,$         ;等待地址码第一位的高电平信号
   LCALL  DELAY882 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
   MOV  C,RMT         ;将P3.2引脚此时的电平状态0或1存入C中
   JNC  A4  ;如果为0就跳转到A4
   LCALL  DELAY1          ;
A4: 
   MOV  A,@R1  ;将R1中地址的给A
   RRC  A  ;将C中的值0或1移入A中的最低位
   MOV  @R1,A         ;将A中的数暂时存放在R1中
   DJNZ  R3,A3         ;接收地址码的高8位
   INC  R1  ;对R1中的值加1,换下一个RAM
   DJNZ  R2,A2          ;接收完16位地址码和8位数据码和8位数据,存放在1AH/1BH/1CH/1DH的RAM中
;*************** *****************************************
   MOV  P2,1DH     ;将按键的键值通过P2口的8个LED显示出来!
   CLR   P3.7         ;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
   LCALL  DELAY2         ;
   LCALL  DELAY2         ;
   LCALL  DELAY2         ;
          SETB   P3.7           ;蜂鸣器停止
   LJMP  MAIN           ;
;*******************************************
;882US
DELAY882:                       ;
   MOV  R6,#200        ;
DEL1:
       NOP                   ;
   NOP                   ;
   DJNZ  R6,DEL1         ;
          RET                   ;
;*******************************************
;1000US
DELAY1: 
   MOV  R6,#230
DEL2:
       NOP
   NOP
   DJNZ  R7,DEL2
          RET
;*******************************************
;2300US
DELAY2:             
   MOV  R6,#248
DEL3:
       NOP
   NOP
       NOP
   NOP
   NOP
      NOP
   NOP
   DJNZ  R6,DEL3    
          RET
          END
 ;*******************************************

本站已经获得中华人民共和国工信部、通信管理局审批通过 国家ICP备案序号: 赣ICP备13006653号-2

电工电子技术QQ群(1):66585281电工电子技术QQ群(2):197874883电工电子技术QQ群(3):29019650 

版权归刘昆山所有©2013-2020转载须经本人同意,否则后果自负!  《我的电子制作经验》www.dgdz.net All Rights Reserved.

管 理