[1]指令格式:前导码 + 地址码 + 地址码反码 + 数据 + 数据码反码
[2]指令编码:脉宽调制编码
[3]识别算法:每两次信号的下降沿表示1位数据,根据两次下降沿之间的间隔时间,就可以判断出是前导码,还是数据1或数据0。
注意:[1]虽然0和1的占用时间长度不同,但因为同时其反码的存在,所以整条指令的总长度是固定的。
[4]硬件电路:
[5]编程流程:
- 一体化红外接收头的输出脚接到外部硬件中断I/O上,并设置成下降沿触发。
- CPU上电,初始化定时器,初值为0。
- 每次触发中断,停止定时器,读取定时器值,判断定时器值,9ms表示前导码,2.25ms表示1,1.12ms表示0。送入数据缓冲,并对数据队列计数,初始化定时器,重新计时。
- 判断数据队列长度,除前导码外,接收到32位数据,表示指令接受完成。
- 指令校验,就是将数据和数据反码,地址和地址反码做加法处理,如果得到的结果是0xFF,表示校验通过,否则,校验失败,丢弃数据。
- 指令解读,根据规则解读。