|
CPU: ATMEGA8
编译: CVAVR
仿真: PROTEUS
RC5(曼彻斯特_码) 红外遥控编码格式解码方式
S S C A4 A3 A2 A1 A0 C5 C4 C3 C2 C1 C0
1、起始码检测
低电平持续时间 >=3.6ms,开始检测起始码,2个"1"
2、后续12个码检测(同步信号为每位中间的边沿)
A、从第2个起始码的上升沿作为第一个同步信号
B、延时1.33ms检测并记录一个信号电平
若为"1",下一个同步信号下降沿有效
若为"0",下一个同步信号上升沿有效
C、若正常收到同步信号,转B,重复12次。
如果从前一个同步边沿开始经过2.25ms时间后,
仍没有检测到下一个同步边沿,说明接收错误
3、定时器设置3.6ms比较中断
若有中断发生,则有2中可能
A、空闲状态下,表示准备检测起始码
B、解码状态下,表示同步信号检测失败,接收错误
4、解码程序流程(信号反向): A, B-C-B-C-B-C ...
A、初始状态程序为空闲状态,开定时器中断,开外部下降沿中断
B、有定时器中断
空闲状态下:转准备状态1,停止定时器计数
其它状态下:清除定时计数器,转空闲状态0
C、有外部中断
空闲状态下:清除定时计数器,返回
准备状态下:清除定时计数器,开始定时器计数,转解码状态2
解码状态下:清除定时计数器
解码状态>13完成解码
延时889us,清除定时计数器,
恢复外部下降沿中断,转空闲状态;否则继续
转解码状态+1
延时1.33ms检测并记录信号电平,
若电平=0,下一次上升沿有效
若电平=1,下一次下降沿有效
5、PROTEUS仿真
格式信号发生器
A、IrA.ptn 模拟产生0x123数据
B、IrB.ptn 模拟产生0x321数据
6、程序功能
解码成功IrCode!=0
串口发送10进制IrCode值(ASCII码)
if (IrCode==0x123) LEDA翻转
if (IrCode==0x321) LEDB翻转
清零IrCode, 等待下一个码
7、My email: cjq_sh@126.com
RC5格式 (原文件名:RC5.jpg)
仿真画面 (原文件名:Sim.jpg)
源程序ourdev_393602.rar(文件大小:67K) (原文件名:Demo1.rar) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|