红外遥感

https://blog.csdn.net/lightrour/article/details/79485040
看完上述文章自己叙述一下整体过程:

  1. 每次按下一个按键的时候,红外会发送一序列高低电平,然后根据规定的协议NEC来进行解码。
  2. 时序有三种情况那就是高电平时间有以下几种情况:4.5ms(引导信号,)1680us(逻辑1),560us(逻辑0),2.5ms(按键次数自增),97.94ms(连续发信号)
  3. 程序的大致过程,以及一些标志位:
    当输入捕获检测到引导信号时(高电平4.5ms),设定标志位RmtSta|=1<<7,表示接收到开始信号,然后就可以检测后续各个脉冲的高电平时间了来解码成逻辑1或者逻辑0,(if(RmtSta&0X10)这个语句后面就是解码的过程)。
    4.程序当中断函数中配置了两个各个中断,一个是更新中断,一个是捕获中断(上升沿和下降沿),高电平的时间检测也是用捕获来完成的(上文中有叙述),因为这两个中断的优先级是相同的,所以不会出现打断的情况,但是如果高电平超过10ms(自动装载值)就会发生溢出中断,这个时候有两个情况高电平时间超过10ms:
    1).就是97.94ms连续发送信号,这个时候其实一个按键按下的发送帧已经传输完毕,所以可以设置一个按键键值采集信息,RmtSta|=1<<6;,并且关闭上升沿的捕获标记RmtSta&=~0X10;(因为这里已经不用计算捕获高电平时间了)然后后续的脉冲序列有2.5ms的高电平,因为引导开始的标志在这时还没有屏蔽,所以还可以检测捕获电平的高度,我们就通过2.5ms的高电平的个数来计算按键按下次数。
    2)但是这里还有一种情况就是按键完全松开,这个时候就会一直是高电平,那就开始计数,所以在溢出中断中会记录高电平的时间,如果满足这个判定if((RmtSta&0X0F)<14)RmtSta++,那就说明一直高电平可以判定为按键松开了,我们就把引导点平的的标志关掉。

猜你喜欢

转载自blog.csdn.net/weixin_42595206/article/details/103603336