51单片机红外线遥控试验.docx
《51单片机红外线遥控试验.docx》由会员分享,可在线阅读,更多相关《51单片机红外线遥控试验.docx(9页珍藏版)》请在冰豆网上搜索。
![51单片机红外线遥控试验.docx](https://file1.bdocx.com/fileroot1/2023-5/16/cef74f1b-66dd-4eaa-bb28-635ace9d6a6f/cef74f1b-66dd-4eaa-bb28-635ace9d6a6f1.gif)
51单片机红外线遥控试验
红外线遥控试验
XL2000试验仪配有一个标准的32位HT6121编码红外遥控器。
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示
相关原理:
解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。
如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。
程序运行的照片:
接线方法:
1、接8位数码管的数据线。
将数码管部份的数据口JP5接到CPU部份的P0口JP51.
2、接8位数码管的显示位线。
将数码管部份的显示位口JP8接到CPU部份的P2口JP52.
3、用一根1PIN数据线一端插入CPU部分JP53(P3口)的P3.7另外一端插入红外遥控部分的输出端JP45。
程序流程图:
汇编语言参考程序:
org00h
ORG80H
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
START:
JBP3.7,$;等待遥控信号出现
SB:
MOVR4,#8;8毫秒为高电平错误
SBA:
MOVR5,#250
SBB:
JBP3.7,SXB1
DJNZR5,SBB
DJNZR4,SBA
MOVR4,#2
JMPSBC
SXB1:
MOVR5,#5
SXB2:
;去掉20US的尖峰干扰信号
JNBP3.7,SBB
DJNZR5,SXB2
JMPSTART
SBC:
MOVR5,#250
SB1:
JBP3.7,SB2;2MS内不为高电平错误(监测9MS的低电平引导码)
DJNZR5,SB1
DJNZR4,SBC
JMPSTART
SB2:
;去掉20US的尖峰干扰信号
MOVR5,#5
SB2_A:
JNBP3.7,SB1
DJNZR5,SB2_A
MOVR4,#3
SB2_1:
MOVR5,#250
SB3:
;监测4.5MS高电平,如3MS内出现低电平错误
JNBP3.7,SXC
DJNZR5,SB3
DJNZR4,SB2_1
MOVR4,#2
JMPSB3_1
SXC:
;去掉20US的尖峰干扰信号
MOVR5,#5
SXC1:
JBP3.7,SB3
DJNZR5,SXC1
JMPSTART
SB3_1:
;监测4.5MS高电平,如5MS内不为低电平错误
MOVR5,#250
SB3_2:
JNBP3.7,SB4
DJNZR5,SB3_2
DJNZR4,SB3_1
JMPSTART
SB4:
;去掉20US的尖峰干扰信号
MOVR5,#5
SB4_1:
JBP3.7,SB3_2
DJNZR5,SB4_1
MOVR1,#1AH;设定1AH为起始RAM区
MOVR2,#4
PP:
MOVR3,#8
JJJJ:
MOVR5,#250
JJJJ2:
;1MS内不为低电平错误
JBP3.7,JJJJ3
DJNZR5,JJJJ2
JMPSTART
JJJJ3:
LCALLYS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOVC,P3.7;将P3.7引脚此时的电平状态0或1存入C中
JNCUUU;如果为0就跳转到UUU
MOVR5,#250
JJJJ4:
JNBP3.7,UUU
NOP
DJNZR5,JJJJ4
JMPSTART
UUU:
MOVA,@R1;将R1中地址的给A
RRCA;将C中的值0或1移入A中的最低位
MOV@R1,A;将A中的数暂时存放在R1中
DJNZR3,JJJJ;接收地址码的高8位
INCR1;对R1中的值加1,换成下一个RAM
DJNZR2,PP;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中
;以下对代码是否正确和定义进行识别
MOVA,1AH;比较高8位地址码
XRLA,#00000000B;判断1AH的值是否等于00000000,相等的话A为0
JNZEXIT;如果不相等说明解码失败退出解码程序
MOVA,1BH;比较低8位地址
XRLA,#11111111B;再判断高8位地址是否正确
JNZEXIT;如果不相等说明解码失败退出解码程序
LCALLYS3
MOVA,1CH;比较数据码和数据反码是否正确?
CPLA
XRLA,1DH;将1CH的值取反后和1DH比较不同则无效丢弃,核对数据是否准确
JNZEXIT;如果不相等说明解码失败退出解码程序
LCALLYS3
CLRP2.6;选中数码管
CLRP3.3;解码成功喇叭响?
AJMPBIJIAO
;判断在118毫秒内是否有连发码
AA:
MOVR1,#25
XX:
ACALLYS2
JNBP3.7,HH;跳转到判断连发代码是否正确的程序段
DJNZR1,XX
EXIT:
;对所有端口清零
AJMPSTART
;连发码判断程序段-----------
HH:
MOVR6,#4
S:
ACALLYS1;调用882微秒延时子程序
JBP3.7,EXIT;延时882微秒后判断P3.7脚是否出现高电平如果有就退出解码程序
DJNZR6,S;重复4次,目的是确认连发码的低电平信号波形
JNBP3.7,$;等待高电?
LCALLYS3
AJMPAA
BIJIAO:
MOVA,1CH;按键数值判断执
movp1,a
CJNEA,#10h,TT1
MOVP0,#7EH;数码管显示1
TT1:
CJNEA,#03h,T2
MOVP0,#0A2H;数码管显示2
T2:
CJNEA,#01h,T3
MOVP0,#62H;数码管显示3
T3:
CJNEA,#06h,T4
MOVP0,#74H;数码管显示4
T4:
CJNEA,#09h,T5
MOVP0,#61H;数码管显示5
T5:
CJNEA,#1dh,T6
MOVP0,#21H;数码管显示6
T6:
CJNEA,#1fh,T7
MOVP0,#7AH;数码管显示7
T7:
CJNEA,#0dh,T8
MOVP0,#20H;数码管显示8
T8:
CJNEA,#19h,t9
MOVP0,#60H;数码管显示9
T9:
CJNEA,#1bh,t10
MOVP0,#28H;数码管显示0
T10:
CJNEA,#11h,t11
MOVP0,#30H;数码管显示A
T11:
CJNEA,#15h,t12
MOVP0,#25H;数码管显示b
T12:
CJNEA,#17h,t13
MOVP0,#0a9H;数码管显示C
T13:
CJNEA,#12h,t14
MOVP0,#26H;数码管显示d
T14:
CJNEA,#16h,t15
MOVP0,#0a1H;数码管显示E
T15:
CJNEA,#4ch,t16
MOVP0,#0b1H;数码管显示f
t16:
AJMPAA
YS1:
MOVR4,#20;延时子程序1,精确延时882微秒
D1:
MOVR5,#20
DJNZR5,$
DJNZR4,D1
RET
YS2:
MOVR4,#10;延时子程序2,精确延时4740微秒
D2:
MOVR5,#235
DJNZR5,$
DJNZR4,D2
RET
YS3:
MOVR4,#2;延时程序3,精确延时1000微秒
D3:
MOVR5,#248
DJNZR5,$
DJNZR4,D3
RET
END