wulin 发表于 2022-12-28 20:17
你在中断中已经改变LED状态0x00,出中断后LED没有恢复之前状态,主函数继续左(右)移0x00能有什么意义?
...
ytchfp163 发表于 2022-12-29 05:30
void zhongduan()函数里少了个外部中断触发方式IT0=1;。
xuyaqi 发表于 2022-12-29 07:01
中断处理要求时间越短越好,不要在中断里延时。
188610329 发表于 2022-12-29 13:34
了解一下什么叫现场保护,恢复现场,学会push,pop的用法。
Longan.Wang 发表于 2022-12-29 15:07
中断响应后,执行中断响应程序后,需要清除中断标志,如果没有清除中断标志位,单片机就会一直重复响应中断 ...
人中狼 发表于 2022-12-29 14:42
需要检测按键的释放,需要一个变量来保存按键按下时LED的状态
LLL2022 发表于 2022-12-29 14:20
谢谢,我看了一下,好像了解现场保护和恢复现场,但目前我对这堆栈空间的使用理解并不深,比较熟悉的就只 ...
以你的代码为例, 你要在主函数中 不断 改变 "LED" 而中断中又要 “临时的” 改变“LED”,而退出中断后又希望恢复“LED”本来的内容。虽然不建议这种中断中 Delay 的写法,但是,先不说这个。 这其中的“LED” 就是你需要保护的现场。这个时候一般需要用到 入栈 和 出栈 比如: void init0() interrupt 0 { _push_(LED); //入栈 if(K1==0) { delay(10); if(K1==0) { LED=0x00; delay(200); } } _pop_(LED); //出栈 } 当然,沙发的那个方法也可以,但是,如果有中断嵌套,多个涉及到 相同的“现场”,就不如 出入栈来的稳妥了。 |
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |