OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2813|回复: 10

关于红外遥控器实验,例程代码里面的先导码与 同步码头是一样的吗?

[复制链接]

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2018-4-2
在线时间
17 小时
发表于 2018-6-15 19:54:59 | 显示全部楼层 |阅读模式
这个更新中断程序,里面这个if(RmtSta&0x80) 先导码标志置1,这个是什么时候收到的先导码呢?
NTTJ{)52_TT17QAKBK6D@AT.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4510
金钱
4510
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-6-16 10:34:48 | 显示全部楼层
/*注意设置了两个中断,即溢出中断和捕获中断):
//1、先看捕获中断,Rmtsta刚开始时为0,当发生一次上升沿捕获时(RDATA对应的引脚得到一个高电平),
马上把捕获事件配置为下降沿捕获,然后Rmtsta=0x10,标记了上升沿已经被捕获;
//2、当有下降沿到来时,将CCR1寄存器的值赋给Dval变量,并再将捕获事件配置为上升沿捕获;(先上再下为一对,计算间隔时间)
补充:像这样上升沿捕获和下降沿捕获交替使用,是为了捕获到高电平的持续时间(即保存在Dval的值)。
//3、注意:只有当接收头收到了引导码后,才进行解码。
故先判断Dval的值是不是在4200us~4700us之间,如果是,就将Rmtsta的最高位置1(Rmtsta|=1<<7),标记成功接收到了引导码。

//4、 当Rmtsta的最高位被置为1后,即满足了if(Rmtsta&0x80),就可以判断Dval的值在下面3种范围内了:
300~800(560us)、1400~1800(1680us)、2200~2600(2500us)。
从而得到0或者1或者RmtCnt++。 实现了解码。
//4、以上3条,其中的高电平持续时间都小于10ms,意思就是还没到10ms就产生了捕获中断(上升沿和下降沿),
因为优先级相同的原因,这时是无法产生溢出中断的。
只有当超过10ms了,还没有产生上升沿捕获或下降沿捕获,就会产生溢出中断。
//5、 那什么情况下10ms都没有产生捕获呢,那就是连发码,那个97.94ms的高电平,远大于了10ms,故会产生溢出中断。
在溢出中断里会标记已经完成一次完整的键值信息采集(RmtSta|=1<<6),正点原子在溢出中断中给设的连发码时间为130ms,
超过130ms视为是松开按键了(因为松开按键就不会有脉冲,也是长期高电平持续,看上文)。
//此外,处理红外键盘的程序就很简单了,先判断是不是得到所有一个键的所有信息了(根据上一条,判断if(RmtSta&(1<<6))是否成立),
然后通过移位读取之前在捕获中断中存进去的数据,再进行原码和反码的对比。这里不多说了。。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 1 反对 0

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4510
金钱
4510
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-6-15 22:38:25 | 显示全部楼层
先导码就是同步码
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2018-4-2
在线时间
17 小时
 楼主| 发表于 2018-6-16 10:11:16 来自手机 | 显示全部楼层
warship 发表于 2018-6-15 22:38
先导码就是同步码

你好,我还是想要问一下,更新中断里没有把收到先导码标志置1啊 更新中断是怎样执行的呢
回复 支持 反对

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4510
金钱
4510
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-6-16 10:30:31 | 显示全部楼层
else if(Dval>4200&&Dval<4700)                //无引导码已检出标志,但现在新检出引导码(高电平持续4.5ms)则为新一帧数据的引导码
                                {
                                        RmtSta|=1<<7;                                        //标记成功接收到了引导码
                                        RmtCnt=0;                                                //清除按键次数计数器
                                }
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4510
金钱
4510
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-6-16 10:35:06 | 显示全部楼层
NEC码规定的连发码(由9ms低电平+2.5ms高电平+0.56ms低电平和 97.94ms高电平组成),
如果在一帧数据发送完后,按键仍没有松开,则发送重复码(连发码),
可以通过统计连发码的次数来标记按键按下的长短/次数。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2018-4-2
在线时间
17 小时
 楼主| 发表于 2018-6-18 21:41:28 来自手机 | 显示全部楼层
warship 发表于 2018-6-16 10:34
/*注意设置了两个中断,即溢出中断和捕获中断):
//1、先看捕获中断,Rmtsta刚开始时为0,当发生一次上升 ...

感谢感谢,太感动了, 读君一席话,理解了好多 真的太感谢了
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2018-4-2
在线时间
17 小时
 楼主| 发表于 2018-6-22 09:31:51 | 显示全部楼层
warship 发表于 2018-6-16 10:34
/*注意设置了两个中断,即溢出中断和捕获中断):
//1、先看捕获中断,Rmtsta刚开始时为0,当发生一次上升 ...

我还有一个小问题, 溢出中断是10ms的 然后先导码是由一个9ms的低电平和一个4.5ms的高电平组成 , 这两个加起来就超过10ms了 ,难道定时器不是从先导码刚开始时 低电平的时候计时的吗?
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2018-4-2
在线时间
17 小时
 楼主| 发表于 2018-6-22 14:02:20 | 显示全部楼层
warship 发表于 2018-6-16 10:35
NEC码规定的连发码(由9ms低电平+2.5ms高电平+0.56ms低电平和 97.94ms高电平组成),
如果在一帧数据发送 ...

你好,我还想问一个小问题, 溢出中断是10ms的 然后先导码是由一个9ms的低电平和一个4.5ms的高电平组成 , 这两个加起来就超过10ms了 ,难道定时器不是从先导码刚开始时 低电平的时候计时的吗?
回复 支持 反对

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4510
金钱
4510
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-6-22 21:53:13 | 显示全部楼层
invisible 发表于 2018-6-22 14:02
你好,我还想问一个小问题, 溢出中断是10ms的 然后先导码是由一个9ms的低电平和一个4.5ms的高电平组成  ...

写了那么多,
你一点儿也没有理解,
只要有电平跳变,
都会被捕获,在中断服务程序中被清零
定时器都会重新计时的。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2018-4-2
在线时间
17 小时
 楼主| 发表于 2018-6-26 08:37:31 | 显示全部楼层
warship 发表于 2018-6-22 21:53
写了那么多,
你一点儿也没有理解,
只要有电平跳变,

懂了懂了 感谢大神
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 08:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表