关于c51单片机的一个疑惑

img


请问这个独立按键控制led灯的程序为什么要加while循环?去掉while循环之后我发现单片机还是能正常运行的。

加个循环是为了让单片机反复执行,如果不加循环,单片机执行完你这些程序后,还会继续往后面跑的,但后面的空闲的flash里的内容按指令执行的话,往往都是不会产生什么外部输出,也不影响程序执行流程的指令,虽然也有几十K,但是以单片机的工作频率,单片机在毫秒级的时间内就会执行完,执行完成后,硬件逻辑会让单片机重头开始执行,所以看上去效果也是在循环,和加个while循环差不多。
但是后面的空闲flash的内容有一定的不确定性,所以实际做产品的时候不要这么干。

需要死循环,否则程序很快执行完成就不动了。

你是不是把代码写进中断响应程序里了
如果你的主要逻辑都在中断里,主程序是可以退出的
一般来说,中断函数里只应该处理io输入和内存操作
中断中将参数另存到全局变量里之后
主函数再判断全局变量,然后进行后续操作
这样可以避免中断时间过长
但是如果你的程序只是简单的判断按钮,输出到灯,全部是io操作
io是硬件线路直连的,不存在串口这种需要耗时的操作
所以全写在中断里问题也不大

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^