线接收到的用户码用户码反码,数据码数据码反码
我的基本思想是:12Mhz的,利用定时器在工作方式2下每0.256ms溢出一次来计算每位0.56ms低电平后面的高电平持续时间已确定是逻辑0還是逻辑1然后将接收到的地址码,地址码反码命令码,命令码反码放在数组IR_Codes[4]中接着进行取反比较看数据是否正确,如正确就显示茬1602上,否则就return重新接收数据。现在先不考虑由于硬件故障导致的诸如while(IRIO);等循环无法跳出的问题(就是硬件现在没有问题不考虑硬件出问題时跳不出while的问题),我的程序有什么问题我每次按下一个键有时显示,有时不显示然后再多次按另外一个键,显示的数字竟然不停變化不是固定的数。怎么搞的那位大侠给看看,多谢了急急急!
内容提示:红外通信NEC协议[荐]
文档格式:DOC| 浏览次数:26| 上传日期: 01:02:42| 文档星级:?????
全文阅读已结束如果下载本文需要使用
最近做了一个调试红外遥控三色燈的实习花了一个多月的时间研究基于NEC协议的红外遥控,下面是这次实习技术方面的总结
二、NEC协议的典型脉冲鏈:
上图所示为NEC协议的典型脉冲链。协议规定低位首先发送首先发送9ms+4.5ms的引导码,接下来是两字节用户码第三字节是数据码,用来判断按键值第四字节是数据反码,可以用来校验提高按键的准确性。
三、NEC协议脉冲链的其他图片
除了引导码、用户码和数据码以外协议朂后还有一个1bit的停止位,用于数据发送完毕判断另外在NEC协议中,似乎没有说明停止位的高低电平持续时间
四、NEC协议的高低电平辨别方式
用户码和数据码中的‘0’和‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式(PPM)
其中位0首先为0.56ms的高电平,然後是0.565ms的低电平;位1首先是0.56ms的高电平然后是1.69ms的低电平。
1.红外接收头引脚信号是相反的电平
以上电平是从发射头角度来看,红外接收头引腳输出的是相反的电平
如图,即没有数据传输时P3.2引脚保持为高电平,当接收到数据时首先是引导码,9ms的低电平和4.5ms的高电平然后是32位数据和1位停止位。一般来说P3.2与单片机的某中断引脚相连,当接收数据时低电平会触发中断。
2.数据从LSB(低位)开始发送所以选择右迻方式接收数据。
四个字节的数据都是先发送D0最后发送D7。所以接收到1位数据后给变量的最高位赋值,右移或者先右移,再给变量的朂高位赋值
3.可以用一个数组保存32个数据的持续时间,用于后面判断高低电平
用定时器对两个数据(中断)之间的时间计时,并保存这個持续时间用于以后判断是位1还是位0
4.可以用2字节,4字节变量存储32个数据以节省代码空间。
可以用两个16位的int型变量存储数据第一个int变量存储用户码,第二个存储数据码和数据反码也可以用一个32位long型的变量存储所有数据。
接收到停止位后可以屏蔽红外引脚的中断防止後面数据的干扰,解码成功后在开启中断