标题: 关于红外遥控功能中断问题 [打印本页]

作者: PEB188    时间: 2021-8-29 19:57
标题: 关于红外遥控功能中断问题
红外接收是用外部中断IO口实现的,那遥控的功能服务怎么中断?
按键1是正向流水灯,按键2是反向流水灯,现在按了1之后只能等流水灯跑完了再按2才有反应。


作者: lkc8210    时间: 2021-8-29 22:20
不要用delay,不要用for
作者: PEB188    时间: 2021-8-29 23:00
lkc8210 发表于 2021-8-29 22:20
不要用delay,不要用for

这不现实啊,循环都不用怎么实现需要的功能。我就没明白功能服务怎么中断,物理按键可以直接外部中断,换成红外该怎么中断
作者: haistart    时间: 2021-8-29 23:13
那是因为你是一个循环就跑完整个流水灯的过程,你可以把流水灯的控制分在所有循环里,每次循环根据变量不同的状态决定io的操作逻辑。这样你收到新指令就可以在下一个小循环做出改变,而不需要等很久。这就是硬件定时器的作用。
作者: PEB188    时间: 2021-8-29 23:50
haistart 发表于 2021-8-29 23:13
那是因为你是一个循环就跑完整个流水灯的过程,你可以把流水灯的控制分在所有循环里,每次循环根据变量不同 ...

红外功能服务函数用的case,流水灯循环中加入键码变量判断,那怎么跳转到新变量对应的case那条执行相应代码
作者: Ledge    时间: 2021-8-29 23:59
你得使用外部触发,直接跳转到相应的中断服务函数中去
作者: lkc8210    时间: 2021-8-30 00:10
PEB188 发表于 2021-8-29 23:00
这不现实啊,循环都不用怎么实现需要的功能。我就没明白功能服务怎么中断,物理按键可以直接外部中断,换 ...


  1. while(1){
  2. for(i=0;i<8;i++){
  3. //your code
  4. }
  5. }
复制代码

改为
  1. i=0;
  2. while(1)
  3. {
  4. //your code
  5. if(++i>=8)i=0;
  6. }
复制代码

作者: lkc8210    时间: 2021-8-30 00:14
PEB188 发表于 2021-8-29 23:00
这不现实啊,循环都不用怎么实现需要的功能。我就没明白功能服务怎么中断,物理按键可以直接外部中断,换 ...

我在你之前的贴子中已回答了类似的例子
作者: PEB188    时间: 2021-8-30 09:14
Ledge 发表于 2021-8-29 23:59
你得使用外部触发,直接跳转到相应的中断服务函数中去

红外是中断0触发解码的,那解码后跳入中断1函数中去,用两个中断是吗?
作者: 188610329    时间: 2021-8-30 14:06
外部中断响应红外请求,开定时器中断,关外部中断。
定时器中断解码,生成键码,关定时器中断,开外部中断。
主程序根据键码判断该干啥。





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1