一种红外遥控信号的解码方法
- 格式:doc
- 大小:521.00 KB
- 文档页数:10
pic12f1822接收红外信号解码流程图单片机初始化
高电平 1.125 2.25低电平表示还在引导码高电平
高电平表示还在引导码9mS高电平结束,4.5mS低电平
高电平上,
高电平表示信号没来继续等待,高电位是红外接收头的电平
解码的关键是如何识别“0”和“1”,从位的定义我们可以
发现“0”、“1”均以0.56ms的低电平开始,不同的是高电
据高电平的宽度区别“0”和“1”。
如果从0.56ms低电平过
后,开始延时,0.56ms以后,若读到 的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比
0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,
读到的已 是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.88ms左右均可。
头的电平
mS。
红外遥控解码程序红外接收头的型号有很多HS0038 VS838等功能⼤致相同,只是引脚封装不同。
红外接收有⼏种统⼀的编码⽅式,采样哪种编码⽅式取决于遥控器使⽤的芯⽚,接收头收到的都是⼀样的。
电视遥控器使⽤的是专⽤集成发射芯⽚来实现遥控码的发射,如东芝TC9012,飞利浦AA3010T等,通常彩电遥控信号的发射,就是将某个按键所对应的控制指令和系统码(由0和1组成的序列),调制在38KHz的载波上,然后经放⼤、驱动红外发射管将信号发射出去。
不同公司的遥控芯⽚,采样的遥控码格式也不⼀样,较普遍的有两种,⼀种NEC标准,⼀种是PHILIPS标准。
NEC标准:遥控载波的频率为38KHz(占空⽐1:3)当某个键按下时,系统⾸先发射⼀个完整的全码,如果按键超过108ms仍未松开,接下来发射的代码(连发代码)将由起始码(9ms)和结束码(2.5ms)组成。
⼀个完整的全码 = 引导码 +⽤户码 +⽤户码 + 数据码 + 数据码 + 数据反码。
其中,引导码⾼电平9ms,低电平4.5ms;系统码8位,数据码8位,共32位;其中前16位为⽤户识别码,能区别不同的红外遥控设备,以防⽌不同的机种遥控码互相⼲扰。
后16位为8位的操作码和8位的操作反码,⽤于核对数据是否接收准确。
收端根据数据码做出应该执⾏上⾯动作的判断。
连发代码是在持续按键时发送的码。
它告知接收端。
某键是在被连续的按着。
NEC标准下的发射码表⽰发射数据0时⽤”0.56ms⾼电平 + 0.565ms低电平 = 1.125ms”表⽰;数据1⽤”⾼电平0.56ms + 1.69ms = 2.25ms”表⽰。
遥控器发射信号:需要注意的是:当⼀体化接收头收到38kHz红外信号时,输出端输出低电平,否则为⾼电平。
所以⼀体化接收头输出的波形和发射波形是反向的PHILIPS标准:载波频率38KHz:没有筒,点按键时,控制码1和0之间切换,若持续按键,则控制码不变。
⼀个全码 = 起始码’11’ +控制码 + ⽤户码 + ⽤户码数据0⽤“低电平1.778ms + ⾼电平1.778ms”表⽰;数据1⽤“⾼电平1.778ms + 低电平1.778ms”表⽰。
下面把这次红外编程的解码的经历简要的写一下,以便以后回顾总结:红外遥控过程是这样的:红外遥控器的矩阵键盘按键,接着专用芯片编码调制然后红外发射;红外接受头经过光电放大,解调,最后解码编程。
我的遥控专用芯片是UPD6122G-001.解码晶振是455kHz,调制载波频率是455kHz/12=38kHz。
此外调制信号是PWM进行调制的,0是脉冲波形位0.5625ms的高电平跟0.5625ms的低电平组成,1则是0.5625ms的高电平跟1.6785ms的低电平组成。
跟其他通用的波形一样,有键按下时,先是9ms的高电平的起始码,接着是一个4.5ms结果码,接下来就是数据了。
用户码的高8位,用户码的低8位,8位数据码,8位数据反码,最后还有一个停止位。
如果按键一直没松,则接下来就只是发送起始码(9ms高电平),接着是一个2.2ms的低电平,再接着是一个停止位。
我的红外接在单片机p3.7引脚上面,从网上收集了一些程序,基本上如同一则,汇编编写,跟外部中断还有关系。
于是便萌生了自己写一下的想法。
我的思路是用定时器进行计数,然后编程。
刚开始编写程序是,由于忘了对定时器的标志位进行置为,结果定时中断根本就没有执行,手头上又没有用仿真芯片,搞得我下载调试了十来次才发现了这个问题。
还有一个问题刚开始遥控能够解码的时候,可是一直按某个键,你按一次,她就变化一次,搞得我很是郁闷,差点儿没晕过去。
怎么找都不知道问题的所在,心里不断地打算放弃,不过最后还是坚持了下来,原来电路的实际解码电平跟资料上是相反的。
遥控器的实际电平由高变低,而电路板上却是由低变高。
这点确好相反。
总结:一要自信,二要坚持,才有可能完成你想做的事件。
#include"reg51.h"#include"2-16.h"#include"address.h"//需要显示的信息uchar code hello[] = "Hello,PengSen!";//变量uchar data psCount; //定时器计数器uchar data i;uchar data j;uchar data temp;uchar data dp[4]; //用来保存红外遥控的码值uchar data dp2[12];//用来显示红外遥控的码值sbit HW = P3^7;void delay(unsigned int y);void main(){//初始化initlcd();dp[0] = 0x0;dp[1] = 0x0;dp[2] = 0x0;dp[3] = 0x0;TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式TH1 = 0xfe; //定时500uSTL1 = 0x33;TCON = 0x01;IE = 0x80;TR1 = 1;printf(hello,13);while(1){//报文头ET1 = 0;psCount = 0;while(HW == 1); //初始状态下,红外输出脚一直是高电平,等待遥控按键ET1 = 1;while(HW == 0);if( psCount > 17)//0.5* 17 = 8.5ms约为9.0ms{ET1 = 0;psCount = 0;ET1 = 1;while(HW == 1);if(psCount > 5)//超过0.5*5 = 2.5毫米,检查一下遥控命令是不是连发,不是则执行下面的程序{ET1 = 0;psCount = 0;dp[0] = 0x0;dp[1] = 0x0;dp[2] = 0x0;dp[3] = 0x0;//数据for(i = 0 ; i < 4; i++){for(j = 0; j < 8; j++){while(HW == 0);ET1 = 0;psCount = 0;ET1 = 1;while(HW == 1);if(psCount > 2)//根据波形长度判定码值为0或1temp = 0;elsetemp = 1;dp[i] |= (temp<<j);//保存键值}}}}//停止位while(HW == 1);//数据显示delay(20);dp2[0] = dp[0]/100 + 0x30;dp2[1] = dp[0]%100/10 + 0x30;dp2[2] = dp[0]%10 + 0x30;dp2[3] = dp[1]/100 + 0x30;dp2[4] = dp[1]%100/10 + 0x30;dp2[5] = dp[1]%10 + 0x30;dp2[6] = dp[2]/100 + 0x30;dp2[7] = dp[2]%100/10 + 0x30; dp2[8] = dp[2]%10 + 0x30;dp2[9] = dp[3]/100 + 0x30;dp2[10] = dp[3]%100/10 + 0x30; dp2[11] = dp[3]%10 + 0x30;printf(dp2,12);delay(20);}}//延时子程序void delay(unsigned int y){uchar x;for(;y!=0;y--)for(x=200;x!=0;x--); }//定时器1中断void timer1() interrupt 3{psCount++;TH1 = 0xfe; //定时500uSTL1 = 0x33;}。
关于红外遥控的一点资料整理最近发现家里遥控器老是弄混(唉,遥控器多了,也是一件麻烦事)。
如果有一种可对家中各种红外遥控器发射的控制信号进行识别、存储和再现的智能型红外遥控器,用这样一个遥控器控制家中所有电器该多好。
这就是大家称作的学习型红外遥控器。
于是,下了不少工夫查找了许多资料,对红外遥控也做了一点表面研究,现总结一点文档,与大家一同探讨(有不对之处,请大家指正!);另外由于本人愚顿还未开窍,还有部分东西想不太明白,在此也向专家们请教,请知道的老兄支点招,在此小弟先谢过了!!!一、红外遥控概述红外遥控系统一般都是由发射部分和接收部分组成。
1、发射部分的主要元件为红外发光二极管。
它实际上是一只特殊的发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它发出的便是红外线而不是可见光。
目前大量使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通Φ5发光二极管相同,只是颜色不同。
2、接收部分主要元件是红外接收管,它是一种光敏二极管(实际上是三极管,基极为感光部分)。
在实际应用中要给红外接收二极管加反向偏压,它才能正常工作,亦即红外接收二极管在电路中应用时是反向运用,这样才能获得较高的灵敏度。
由于红外发光二极管的发射功率一般都较小(100mW左右),所以红外接收二极管接收到的信号比较微弱,因此就要增加高增益放大电路。
前些年常用μPC1373H、CX20106A等红外接收专用放大电路。
最近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。
成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封装(如图中的HS0038),均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VO或OUT)。
红外接收头的引脚排列因型号不同而不尽相同,可参考厂家的使用说明。
成品红外接收头的优点是不需要复杂的调试和外壳屏蔽,使用起来如同一只三极管,非常方便。
但在使用时注意成品红外接收头的载波频率。
红外解码一直是单片机中应用较多的,需要设备加装专用解码芯片,这就大大减轻了单片机的负担。
需要单片机样例使用延时做红外解码,比较容易理解,但是由于在主程序中使用,当存在许多中断时就可能造成误码,很多时候误码率较高,成品中则一般使用中断方式。
下面通过TC9012和uPD6121芯片为例大致讲解解码原理:先看一些遥控器发射波形图从上图可以看出 4.5ms高电平+4.5ms低电平称为头码,用于识别是否遥控码开始,uPD6121的头码是9ms+4.5ms,其他的一样,一些datasheet会提及连续发射码的波形图(就是一直按下某一遥控器按键),这里我们不做分析,仅分析单次按键发射的正个码的波形图。
头码过后可以看到4个8位的数据,我们最终目的就是要把这个 32位(4x8)从一体化红外接收头提取出来,并转换成16进制数,用于区分不同按键按下得出的不同数值。
在遥控器发射波形中,可以看出,8位数中的0或者1不是用高低电平表示,而是用不同的低电平的宽度表示,0.565ms表示0,1.69ms表示1,2个位中间还会有一个0.56ms的高电平(上图阴影部分)。
这个是红外遥控器发射的波形,图中看到的阴影高电平表示载波,一般使用38KHz,遥控器发射出去的含有载波的红外信号通过一体化红外接收头处理后得到的是含有载波的反向的波形,也就是没有上图中的阴影部分。
大致如下图一体化红外接收头内部集成了选频放大(38KHz左右频率增益最大),检波(把38KHz的载波滤除),放大整形(变成容易检测的矩形波)。
看到如上图波形,表示单片机引脚可以接收到的波形,我们只要通过单片机读取波形并分析波形的宽度,然后分辨出是头码,还是0或者1,最后整理出这组码的16进制组合。
正确的解码结果是按同一个按键得出的16进制数值是不变化的。
通过这个原理,我们可以分辨出每个按键的键值。
mini80/mini80e样例程序中使用的红外解码程序,应用了外部中断,平时从书上或者网络上看到的解码一般是单纯解码,整个程序不做其他工作,这种方式可以使用普通io口,用延时等待的方法判断接收到的是高电平还是低电平,从而判断码值。
红外线遥控解码原理一、引言红外线遥控解码是一种常见的电子技术应用,广泛用于电视、空调、音响等家电产品中。
通过红外线遥控解码技术,可以实现遥控器与设备之间的无线通信,方便人们对设备进行远程操控。
本文将介绍红外线遥控解码的原理和实现方式。
二、红外线遥控解码原理红外线遥控解码的原理是利用红外线信号的特点进行解码。
遥控器通过按键操作产生一系列的红外信号,这些信号被红外发射器发射出去,然后被接收器接收并解码。
下面将详细介绍红外线遥控解码的原理。
1. 红外线信号的特点红外线是一种电磁波,波长在0.75微米到1000微米之间。
在这个波长范围内,红外线具有较好的穿透性,能够穿透一些物体,比如空气、玻璃等。
同时,红外线的波长也决定了它能够被人眼所感知。
2. 红外线遥控信号的编码方式红外线遥控信号一般采用脉冲宽度编码(Pulse Width Encoding)的方式进行编码。
即通过调节红外线信号的脉冲宽度来表示不同的信息。
通常会将一个编码周期分为若干个时间单位,每个时间单位内的脉冲宽度决定了信号的状态,比如高电平表示1,低电平表示0。
3. 红外线遥控信号的解码方式红外线遥控信号的解码一般分为两个步骤:解调和解码。
解调是指将接收到的红外线信号转换为电信号,解码是指将解调后的电信号转换为对应的按键信息。
解调通常采用红外线接收头来完成,红外线接收头是一种能够感知红外线信号并将其转换为电信号的传感器。
红外线接收头内部含有一个光电二极管,当红外线信号照射到光电二极管上时,会产生一个电压信号。
通过对这个电压信号进行放大和滤波处理,可以得到解调后的电信号。
解码是将解调后的电信号转换为对应的按键信息。
解码一般采用红外线遥控解码芯片来完成,这些芯片内部包含了一系列的逻辑电路和存储器,能够根据输入的电信号解码出对应的按键信息。
不同的遥控器厂商和设备类型会使用不同的解码协议,因此解码芯片需要根据具体的解码协议来进行解码。
三、红外线遥控解码的实现方式红外线遥控解码可以通过硬件电路和软件算法两种方式来实现。
一种基于单片机的红外遥控信号解码新方法黄海阳;吴锤红【摘要】Infrared remote controllers are widely used in household electrical appliances. Infrared signal decoding methods are various in the application of embedded system. The hardware structure and software programming ideas of infrared remote controller decoding are briefly introduced. Aiming at two conventional infrared coding structure, the specific method which uses gating control mode of 51 MCU's timer for decoding is described, and the coding paradigm and the software flowchart are given.%红外遥控器在家电产品中已广泛使用。
在嵌入式系统应用方面,红外信号解码的方法也是多种多样。
本文简要介绍红外遥控器解码的硬件构成与软件编程思路,然后针对两种常用的红外编码结构,阐述了使用51单片机定时器门控方式解码的具体方法,并给出了代码示例与软件流程。
【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2012(012)007【总页数】4页(P30-33)【关键词】红外解码;门控方式;51单片机【作者】黄海阳;吴锤红【作者单位】福建农林大学机电工程学院,福州350002;福建农林大学机电工程学院,福州350002【正文语种】中文【中图分类】TN219引言随着家用电器、试听产品的普及,红外遥控器已经被广泛应用在各种类型的家电产品中(如遥控开关、智能开关等)[1]。
51单片机解码红外遥控器原理电视遥控器使用的是专用集成发射芯片来实现遥控码的发射,如东芝TC9012,飞利浦SAA3010T等,通常彩电遥控信号的发射,就是将某个按键所对应的控制指令和系统码(由0和1组成的序列),调制在38KHz的载波上,然后经放大、驱动红外发射管将信号发射出去。
不同公司的遥控芯片,采用的遥控码格式也不一样。
较普遍的有两种,一种是NEC标准,一种是PHILIPS 标准。
NEC标准:遥控载波的频率为38KHz(占空比为1:3);当某个按键按下时,系统首先发射一个完整的全码,如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。
一个完整的全码=引导码+用户码+用户码+数据码+数据反码。
其中,引导码高电平4.5ms,低电平4.5ms;系统码8位,数据码8位,共32位;其中前16 位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。
后16 位为8 位的操作码和8位的操作反码,用于核对数据是否接收准确。
收端根据数据码做出应该执行什么动作的判断。
连发代码是在持续按键时发送的码。
它告知接收端,某键是在被连续地按着。
NEC标准下的发射码表示发射数据时0用“0.56ms高电平+0.565ms低电平=1.125ms”表示,数据1用“高电平0.56ms +低电平1.69ms=2.25ms”表示即发射码“0”表示发射38khz的红外线0.56ms,停止发射0.565ms,发射码“1”表示发射38khz 的红外线0.56ms,停止发射1.69ms需要注意的是:当一体化接收头收到38kHz 红外信号时,输出端输出低电平,否则为高电平。
所以一体化接收头输了的波形是与发射波形是反向的,如图PHILIPS标准:载波频率为38KHz;没有简码,点按键时,控制码在1和0之间切换,若持续按键,则控制码不变。
一个全码=起始码‘11’+控制码+用户码+用户码,如图所示。
第18卷第2期苏州大学学报(自然科学) Vol .18, No .2 2002 年 4 月JOURNAL OF SUZHOU UNIVERSITY(NATURAL SCIENCE) Apr .2002文章编号:1000-2073(2002)02-0101-06一种红外遥控信号的解码方法肖圣兵,仲兴荣,徐清源,曲波(苏州大学通信与电子工程系, 江苏苏州215021)摘要:文章介绍了红外遥控的基本原理和红外遥控发射器的组成,详细论述了以单片机89C2051 为核心的红外遥控信号的解码方法, 提出了用单片机对红外遥控信号进行识别译码的程序设计流程.关键词:单片机;89C2051;红外遥控;解码中图分类号:TP722文献标识码:A红外遥控技术广泛应用于各种家用电器产品、金融及商业设施中,为用户提供方便的操纵手段.一些遥控功能相对简单的电器产品,红外遥控信号的接收识别往往采用与编码调制芯片配套的译码芯片.而遥控功能比较复杂的一些电器产品(如电视机),均采用专用的遥控解码芯片,实现特定的功能.为了能将性能稳定、价格低廉、功能较多的电视机遥控器应用于其他控制场合,本文利用单片机89C2051为核心,设计了一套红外遥控信号解码的软硬件系统,通过驱动电路的扩展,可实现功能较复杂的遥控控制.1 红外遥控的基本原理红外遥控系统一般由发射系统和接收系统组成.发射系统由专用芯片产生指令代码,经载波调制后驱动红外发射器件,发射红外控制信号.红外信号的指令代码均为二进制码,编码调制由专用芯片完成,编码的方法有多种,不同芯片的编码方法和代码长度有所不同.指令信号常用的编码调制方法有脉冲宽度调制(PWM)和脉冲位置调制(PPM)两种,本系统采用脉冲位置调制方法的遥控信号发射器,即用两个脉冲串之间的时间间隔来表示二进制信息.红外遥控信号被红外接收头接收后,经放大、检波、整形,得到TTL电平的代码信号,再送给解码电路,经译码并执行,去控制指定对象,实现遥控功能.收稿日期:2002-01-10基金项目:江苏省青年教师基金(Q3119218)作者简介:肖圣兵(1964-),男(汉族),江苏苏州人,高级工程师,主要从事信息技术的研究.102苏州大学学报(自然科学)第18卷2 红外遥控信号发射器的组成红外遥控信号发射器选用以集成电路TC9012为核心的遥控信号发生器,它与键盘矩阵、输出驱动级和红外发光二极管组成遥控发射器器,图1为红外遥控信号发射器的电原理图.图1红外遥控信号发射器的电原理图遥控信号发生器集成电路TC9012,由振荡器、时钟信号发生器、键位扫描信号发生器、键位编码、遥控指令编码器、码转换器、编码调制器以及输出缓冲器等组成.振荡器由第8、9脚间的内部电路及其外接陶瓷谐振器组成,振荡频率取决于陶瓷谐振器,此处为455kHz,经TC9012 内部电路 12 分频后得到约为 37 .9kHz 、占空比为 1 3 的脉冲载波信号, 遥控编码脉冲对37.9kHz的载波信号进行调制,经驱动放大后,激励红外发射管发出红外遥控信号. 455kHz经 256 分频后得到约为 1 .78kHz 的系统时钟脉冲信号, 时钟脉冲周期 T cp =0 .5626ms .3 红外遥控信号的编码方式图2遥控编码信号的波形遥控器发射的遥控编码脉冲由前导码、系统码、系统码、功能码、功能码的反码组成,如图2所示.前导码是一个遥控码的起始部分,由时间宽度均为8T cp的一个高电平和一个低电平组成,作为接收数据的准备脉冲.系统码和功能码的编码是采用脉冲位置调制方式,根据第2期肖圣兵,仲兴荣,等:一种红外遥控信号的解码方法103脉冲之间的时间间隔来区分码值的“0”或“1” .对应于二进制数字信号“0”、“1”的脉冲时间间隔分别为2T cp和4T cp,而每一脉冲的宽度仍不变均为T cp,如图3所示.系统码是通过遥控器的遥控编码芯片的引脚不同接法设定的,用以区分不同型号的遥控系统;功能码则是遥控器图3脉冲位置调制方式的二进制码“0”和“1”的波形功能按键的编码,不同的功能按键其代码不相同;功能码的反码是用来纠错的.系统码为8位,功能码也为8位,所以脉冲码共为32位.,为了增强遥控系统的可靠性,将系统码发送两次,将功能码与其相反码一起发送.从图中可知,该遥控器的系统码为八位二进制数01101110 , 功能码为 01100000 八位二进制数, 该遥控器最多可以有256 个功能键 .4 红外遥控信号接收器红外遥控接收器由光电二极管和红外遥控信号接收集成电路CX20106构成,其原理如图4所示.遥控信号接收集成电路CX20106由前置放大器、限幅放大器、带通滤波器、峰值检波器和整形电路等组成.红外遥控信号发射器发射的红外遥控信号,激励光电二极管,产生光电流,经输入电阻转换成电压信号,通过CX20106 放大,再经过检波器滤去 38kHz 的载波 ,最后经整形电路整形,由脚7输出遥控编码脉冲,送至单片机解码电路.图4红外遥控接收器电原理图5 红外遥控信号单片机解码的硬件电路图 5红外遥控信号解码硬件电路以 89C2051 单片机为核心组成的红外遥控信号解码电路如图 5 所示.104 苏州大学学报(自然科学)第18卷图 5 中 89C2051 是美国 ATMEL 公司推出的一种高性价比单片机.89C2051 指令系统与MSC -51 完全兼容,具有2K 字节可重复编程的闪烁存储器和128 字节内部 RAM ;P3 .0~ P3 .6 共7 个脚, 准双向端口,并且保留了全部P3 的第二功能, 如P3 .0、P3 .1的串行通信功能, P3 .2、P3 .3的中断输入功能 ,P3 .4、P3 .5 的定时输入功能, 以及两个 16 位定时计数器 .图 5 中 U2 为具有上电复位功能的“看门狗”集成电路 IMP706 ,其6 脚与89C2051 的 9 脚相连,接收89C2051输出的“看门狗”控制信号,U2的7脚输出的复位信号通过一个反相器连接到89C2051的复位端1脚.89C2051的4、5脚外接12MHz的晶振和2只20P的元片电容,与其内部电路一起产生12MHz 的时钟信号.遥控编码脉冲直接传送至单片机的 11 脚 ,并经一反相器传送至单片机的6脚.6 红外遥控代码单片机译码程序的设计方法单片机红外遥控译码信号采用中断方式.红外接收头输出信号(图4中OUT与图5中的IN相连)经反相后连接到89C2051的外部中断INT0.INT0设置为下降沿边缘触发方式,用内部定时器T0测量正脉冲宽度,T0工作于方式2(16位计数器),在INT0的中断服务程序中,完成遥控译码.红外遥控信号在INT0引脚引起单片机中断后,进入中断服务程序.在中断服务程序中检测INT0引脚上是否为低电平,如为低电平表示传送码到来,延时等待至再次出现高电平,清TH0、TL0,开启T0,计数开始,INT0引脚变低时关闭T0.根据计数器TH0、TL0 的计数值 ,判断出该位代码为“0”或“1” ,并存入系统码寄存器的对应位;继续进行延时等待,直至INT0引脚电平升高后重复进行上述位代码检测步骤,并将相应值放入相应位至8 位系统码检测完毕 .随后进行8 位系统码、8 位功能码和8 位功能反码检测,具体过程与第一次系统码检测完全相同,结果存入相应寄存器中.最后,单片机系统根据功能码寄存器内容进行不同的功能操作.6 .1引导码的识别无遥控信号时,遥控接收器输出为低电平,经反相后INT0引脚上为高电平,当有遥控信号引导码出现时,INT0引脚由高到低发生电平变化,引起INT0中断.在INT0中断服务程序中检测INT0引脚电平,如为低电平则等待,直至INT0引脚出现高电平,清TH0、TL0,启动T0计数.根据TH0和TL0的计数值,判断正脉冲的宽度.如正脉冲的宽度在3.5~5.5ms范围内(实际引导码正脉冲宽度为 8T CP =8 ×0 .563ms =4 .5ms), 则认为是引导码 ,准备读取后续遥控代码,否则认为干扰,跳出INT0中断译码程序,返回主程序.程序流程图如图6所示.6 .2系统码、功能码、功能反码的译码 .系统码、功能码、功能反码的识别技术关键是0、1代码的识别.根据上面的遥控编码方法和波形图可知,在INT0中断服务程序中,我们只要能测出加到单片机INT0引脚的遥控接收反码信号的高电平宽度即可得到其代码.如脉冲宽度编码方法中,表示“0”的高电平宽度为0.56ms,表示“1”的高电平宽度为1.68ms,我们需要做的是判断出高电平的宽度范围.如大于0.46ms小于0.66ms可判为“0” ,大于1.58ms小于1.78ms可判为“1”,否则,判为非法的干扰代码,退出中断译码程序.这样我们就可以比较容易用程序读取代码.程序流程图如图7 所示.第2期肖圣兵,仲兴荣,等:一种红外遥控信号的解码方法105图6引导码识别流程图图7系统码、功能码识别流程图7 单片机红外遥控译码的软件抗干扰技术在红外遥控系统中,虽然发射、接收芯片内部均含有抗干扰及杂波滤除功能,但红外干扰源对系统的影响仍无法完全避免;另外,某些意外情况也可能造成译码的错误.为了提高系统的抗干扰能力,杜绝误操作,在软件上采用了多种抗干扰措施.7 .1单片机译码程序中“窗口”范围的确定单片机译码系统中,单片机晶振采用12MHz,机器周期为1μs,即每经过1μs,定时器的计数值T0加1.则脉冲“0”的高电平宽度为0.56ms对应的计数值为N0=0.56ms 1μs=560= 0230H ,脉冲“1”的高电平宽度为1 .68ms 对应的计数值为 N1 =1 .68ms 1μs =1680 =0690H , 引导码的脉冲高电平宽度为4.5ms对应的计数值为N2=4.5ms 1μs=4500=1194H.由于遥控脉冲形变、外界干扰及计数器计时误差,实际测出的遥控码计数值只在上述数值附近.为此,为读出的T0计数值设计一个“窗口” ,“窗口”范围为±0.1ms(对应计数值为±64H),即“0”范围 :0230H ±64H , 01DCH ~ 0294H“1”范围 :0690H ±64H , 062CH ~ 06F4H引导码范围:1194H±64H,1130H~11F8H只有位于“窗口”内的计数值才作为有效数据记录在数据存储区内.7 .2忽略干扰数据、提取有效数据实际上遥控脉冲信号由于干扰有“移位”现象,遥控发射器的按键按下以前,若此时有干。