刚刚完成了红外接收。现把算法发布出来供大家分享。不为显摆,只为活跃社区,常常在这里看贴,现在也把自己的心得贴出来。欢迎拍砖。
hs6221发送,接收头解码。使用定时及外中断。
//码元接收 //1.Wt1 //收到下降边沿E1 //启动100us定时器。每定时中断一次查询输入引脚电平,分别计入高低电平计数器。 //进入Wt2
//2.Wt2 9ms //判断输入管脚电平为高触发中断(因为硬件不能设置上升沿触发中断) //根据高电平计数次数判断间隔时间。如满足9ms起始标志,清计数器,进入Wt3;否则清计数器,关定时器转1。
//3.Wt3 4.5ms/2.25ms //3.1 判断时间间隔若为4.5ms,表明为新键按下。计数器清零,等待下次中断,转Wt4。 //3.2 判断时间间隔若为2.25ms,表明重复按键。最近一次码元加入缓冲队列。清计数器,关定时器转1。 //3.3 其它时间,非法,清计数器,关定时器转1。
//4.Wt4 1.125/2.25 //4.1 1.125/2.25ms 当前码为0/1,码元计数器加1。 //若码元计数器为32,则一帧完毕。码元加入缓冲队列,置新码标志,清计数器,关定时器转1;否则转4重复。 //4.2 其它间隔时,转1。[毛刺处理暂未考虑]。 |