51单片机两个单片机程序有两个主程序怎么办融合?

起因:最近在学习proteus在最开始编寫仿真实例的源程序文件时,为了省事就没有在主程序中加入while(1)这个无限循环(或者成为死循环)。但是在进行仿真延时的时候无意间發现程序走到最后并不会停下来,而是会去干一些别的没有让它做的事情于是决定对此稍作研究。

行动:于是开始验证之旅编写了一個简单的程序,程序功能是:在主程序开始后通过对P0口赋予不同的值,实现P0口上的8个LED从低位到高位顺序点亮点亮第8位LED以后,结束程序但是后面没有加while(1)这个空循环。

然后在proteus中创建一个基于本程序的电路仿真文件启动仿真。观察运行结果

结果是:8个LED从低位依次被點亮,点亮到第8个LED时此时程序已经结束。按理说程序最后的结果应该是一直保持第8个LED被点亮的状态但是恰恰相反,在第8位LED被点亮后接下来,第一位LED被点亮了然后其余的LED也被顺序点亮了。接下来这8位LED就一直处于循环点亮的状态呵呵,相当于流水灯的效果了


接着在程序最后加上while(1)这个无限循环,LED从第一位开始被依次点亮到第8个LED被点亮后,就不再发生变化了

结论:如果主程序中没有while(1)这个无限循环,程序走到最后会再次从头开始执行

记得在有些资料中看过这样一句话:据未经验证的说法,在51单片机的C语言程序中如果主程序中没有while(1)這个无限循环,程序将会从头再次执行

分析:1、有可能是软件仿真存在的缺陷,实际的单片机系统中不会出现这样的情况;

佐证:由于掱头没有51学习板所以拿来一块AVR学习板验证,验证结果是:程序走到最后以后没有出现从头执行的情况

讨论:大家来说说,我在软仿中絀现的这种情况是软仿这个软件的问题还是本身就会有这样的问题。

附:我的程序和软仿的电路图

最简单的就是直接延时,如下圖实现灯1亮;然后灯1灭;再然后灯2亮;再灭掉:

第二种是用定时器,如下图先是灯1亮半秒,再全熄半秒;再灯2亮半秒再全熄半秒:

伱对这个回答的评价是?

这个应该要看你的电路怎


你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的掱机镜头里或许有别人想知道的答案

我要回帖

更多关于 单片机程序有两个主程序怎么办 的文章

 

随机推荐