一、协议特征
8位地址和8位命令长度;
为了可靠,每次传输两遍地址(用户码)和命令(按键值);
通过脉冲串之间的时间间隔来实现信号的调制(PPM);
载波频率为38kHz;
每位的周期为1.12ms(低电平)或者2.25ms(高电平);
二、NEC协议的典型脉冲链
上图为NEC协议的典型脉冲链。协议规定低位首先发送。首先发送9ms+4.5ms的引导码,接下来是两字节用户码,第三字节是数据码,用来判断按键值,第四字节是数据反码,可以用来校验,提高按键的准确性。另外在数据帧传输的最后还有一个停止位的脉冲。
三、NEC协议脉冲数据码介绍
除了引导码、用户码和数据码以外,协议最后还有一个1bit的停止位,用于数据发送完毕判断。
一个NEC数据帧占用的时间长度包括:(引导码,9ms的高电平和4.5ms的低电平,然后是32位数据[其中包括:两字节用户码,第三字节是数据码,第四字节是数据反码]和1位停止位):即引导码:(9+4.5)ms + 32位数据[全是高电平时,(32x2.25)ms; 全是低电平时,(32x1.12)ms] + 1位停止位(0.5625ms),所以一帧数据所占用的时间范围是:
9+4.5+35.84+0.5625 = 49.9025ms < frame_data_time(NEC) < 9+4.5+72+0.5625 = 86.0625ms
四、NEC协议的高低电平说明
NEC协议使用比特的脉冲距离编码。每个脉冲是一个560us长的38kHz载波脉冲(大约21个周期)。一个逻辑“1”需要2.25毫秒来传输,而一个逻辑“0”只需要一半的时间,即1.125毫秒。建议载波占空比为1/4或1/3。
用户码和数据码中的‘0’和‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式(PPM)。
五、编程注意事项
1.红外接收头引脚信号是相反的电平。
以上电平是从发射头角度来看,红外接收头引脚输出的是相反的电平。
如图,即没有数据传输时,IR引脚保持为高电平,当接收到数据时,首先是引导码,9ms的高电平和4.5ms的低电平,然后是32位数据和1位停止位。一般来说,IR与主控平台的某中断引脚相连,当接收数据时,低电平会触发中断。
2.数据从LSB(低位)开始发送,所以选择右移方式接收数据。
四个字节的数据都是先发送D0,最后发送D7。所以接收到1位数据后,给变量的最高位赋值,右移。或者先右移,再给变量的最高位赋值。
3.可以用一个数组保存32个数据的持续时间,用于后面判断高低电平。
用定时器对两个数据(中断)之间的时间计时,并保存这个持续时间用于以后判断是位1还是位0。
4.可以用2字节,4字节变量存储32个数据,以节省代码空间。
可以用两个16位的int型变量存储数据,第一个int变量存储用户码,第二个存储数据码和数据反码。也可以用一个32位long型的变量存储所有数据。
六、判断停止位。
接收到停止位后可以屏蔽红外引脚的中断,防止后面数据的干扰,解码成功后在开启中断。就是每次传完一帧的数据,都会有一个0.5625ms的脉冲表示结束。同样的,每个重复码结束后,也有一个0.5625ms的脉冲表示结束。
七、重复码
当遥控器上的键一直按下时。每110毫秒重复码就会被传输一次,只要键保持按下状态。这个重复代码只是一个9ms的AGC脉冲,接着是2.25ms的空间和560 µs的脉冲。