繁体中文
设为首页
加入收藏

推荐文章

更多

07-14·[可控硅] 可控硅及其整流
07-14·[可控硅] 集成化六脉冲触发组件KCZ6电原理图
07-27·[单片机技术] PIC单片机16F84的内部硬件资源

 

最新文章

更多

· 基于CP2200的嵌入式以太...
· 基于PC104的机载数据加卸...
· 基于PM3388和FPGA的网络...
· RTL8019型控制器与DSP的...
· 基于ADS7870型数据采集器...
· 基于ATmegal28控制器和C...
· AD7890型串行数/模转换器...
· 汽车电子OSEK配置器的设...
· 为RS-232C接口通信设计可...
· RS-232、RS-422与RS-485...
当前位置:技术文章首页 >> 接口与通讯 >> 红外遥控实验程序

红外遥控实验程序

1970-01-01 08:00:00  作者:本站  来源:本站整理  浏览次数:341  文字大小:【】【】【

红外遥控实验程序

 

 

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    名称: 红外遥控实验    (www.51dzk.com)                      
    遥控器型号:7461                                           
    跳线设置: 晶振调到12M                                      
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         ORG 0000H
         AJMP START;转入主程序
         ORG 0003H 外部中断P3.2脚INT0入口地址
         AJMP INT 转入外部中断服务子程序(解码程序)
;以下为主程序进行CPU中断方式设置
START:   SETB EA 打开CPU总中断请求
         SETB IT0 设定INT0的触发方式为脉冲负边沿触发
         SETB EX0 打开INT0中断请求
;以下对单片机的所有引脚进行初始化,全部设置成高电平
         MOV P2,#11100111B
         AJMP $
;以下为进入P3.2脚外部中断子程序,也就是解码程序
INT:     CLR EA 暂时关闭CPU的所有中断请求
         MOV R6,#10
 SB:     ACALL DL882;调用882微秒延时子程序
         JB P3.2,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
         DJNZ R6, SB;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
         JNB P3.2, $ 等待高电平避开9毫秒低电平引导脉冲
         ACALL DL4740 延时4.74毫秒避开4.5毫秒的结果码
         MOV R7,#26;忽略前26位系统识别码
JJJJA:   JNB P3.2,$;等待地址码第一位的高电平信号
         LCALL DL882;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
         MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中
         JNC UUUA;如果为0就跳转到UUUA
         LCALL DL1000;检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUUA:    DJNZ R7,JJJJA
         MOV R1,#1AH 设定1AH为起始RAM区
         MOV R2,#2;接收从1AH到1BH的2个内存,用于存放操作码和操作反码
PP:      MOV R3,#8;每组数据为8位
JJJJ:    JNB P3.2,$;等待地址码第一位的高电平信号
         LCALL DL882;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
         MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中
         JNC UUU;如果为0就跳转到UUU
         LCALL DL1000;检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUU:     MOV A,@R1;将R1中地址的给A
         RRC A;将C中的值0或1移入A中的最低位
         MOV @R1,A;将A中的数暂时存放在R1数值的内存中
         DJNZ R3,JJJJ;接收满8位换一个内存
         INC R1;对R1中的值加1,换下一个RAM
         DJNZ R2,PP 接收完8位数据码和8位数据反码,存放在1AH/1BH中
         MOV A,1AH
         CPL A;对1AH取反后和1BH比较
         CJNE A,1BH,EXIT;如果不等表示接收数据发生错误,放弃
         MOV P1,1AH;将按键的键值通过P1口的8个LED显示出来!
         CLR P2.2;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
         LCALL DL4740
         LCALL DL4740
         LCALL DL4740
         SETB P2.2;蜂鸣器停止
EXIT:    SETB EA 允许中断
         RETI 退出解码子程序
DL882:     MOV R4,#20 延时子程序1,精确延时882微秒
D1:      MOV R5,#20
         DJNZ R5,$
         DJNZ R4,D1
         RET
DL4740:  MOV R4,#10 延时子程序2,精确延时4740微秒
D2:      MOV R5,#235
         DJNZ R5,$
         DJNZ R4,D2
         RET
DL1000:  MOV R4,#2;延时程序3,精确延时1000微秒
D3:      MOV R5,#248
         DJNZ R5,$
         DJNZ R4,D3
         RET
         END

责任编辑:

启蒙电子http://www.51c51.net 启蒙电子网http://www.atc51.com 启蒙电子论坛
相关文章