收藏|地图|在线留言在线咨询|0755-82225097
宇凡微,提供专业的单片机芯片方案开发设计服务,8位MCU、IC稳定供应。
单片机

热门关键词:

宇凡微详解:51单片机程序执行流程

作者: 宇凡微 编辑: 单片机开发工程师 来源: 宇凡微 发布日期: 2021.10.16 浏览次数:
信息摘要:
今天宇凡微为大家分享的内容是51单片机程序执行流程,在我们的学习过程中总是会遇到一些难题,我们宇凡微将为大家整理更多的知识点,供大家学习参考…

        今天宇凡微为大家分享的内容是51单片机程序执行流程,在我们的学习过程中总是会遇到一些难题,我们宇凡微将为大家整理更多的知识点,供大家学习参考。


51单片机程序执行流程


        单片机是没有上操作系统的东西,在keil中编写的代码都是裸机代码,深入编写裸机代码有助于了解硬件的特性。

        若不是硬件特性已定的情况之下的其它流程都是代码作祟。忽然想到来探探51单片机的执行流程。这个念头起源于最初见到每个51程序里面的主函数里面最终都挂一个while(1);语句。为何要加一句while死循环让程序停留在main函数中呢。将while(1);语句去掉有什么影响么?

        写一个很简单的程序试一下。

51单片机程序执行流程代码

        执行以上程序,由P1端口控制的流水灯闪了一下。程序最终进入while(1);里纠缠去了,这个到好解释。

        现将while(1);语句屏蔽掉。我还以为程序不能被正确执行了呢,因为退出了main主函数,就像Render需要循环来实现一样(尽管刚刚闪灯的程序不在循环之内,但我还是不由产生了这一错觉)。程序执行的结果是:流水灯不停的闪烁!

        看到这个现象后的猜想及动作:

        1、这块板坏了吧!(在带操作系统如linux字符界面下运行一个不带死循环的C语言文件完毕后就会返回到linux shell程序中)。赶紧换个板再测试一下,显然还是一样的结果;

        2、单片机中将一直执行main函数中的最后一个(些)语句?(基于带OS平台下运行标准C语言文件的经验,可从来没有想过是main函数被多次调用或多次进入);

        3、单片机内将C语言指令取出来加载到单片机内,单片机内自动生成一个主程序循环执行C语言中main函数的内容?(虽然很荒唐,还是想了);

        4、赶快谷歌百度一下单片机的执行流程(虽然在谷歌百度时以“51单片机程序执行流程”搜索,没有搜到相关内容)。换朴实的搜索词:“51单片机 main”。然后就出现跟我一样带有疑问的问题:为什么main函数中不加while(1);语句之后程序会反复执行呢?回答的关键词包括“程序跑飞、看门狗、复位”;

        5、趁上嵌入式的机会将“51单片机程序执行流程”搬出来并向老师讲述了我所写程序的得到的现象,包括我怎么验证呀等等。

        老师的回答:Keil C51程序自动加载了一个名为”STARTUP.A51”的文件,在这个文件里面进行了一系列的初始化操作后进入用户编写的C语言程序入口main函数中,main函数执行完毕后,STARTUP.A51文件后有一句跳转到程序入口main函数的语句,所以会再次进入C语言主程序main函数中执行相关内容。

        然后我用keil软件模拟了运行一下以上那一段代码:

51单片机程序执行流程

        程序开始运行就在程序入口main函数的第一条语句之处,Disassembly窗口是c语言代码与汇编代码相对应的窗口,前面是地址,后面的是C语言对应的汇编语句。下面的窗口是相应文件的运行代码的位置,由黄色箭头指向当前正要执行的代码。然后点击单步运行工具条,指导跳出main函数为止,程序跳转到STARTUP.A51中的以下代码位置:

51单片机程序执行流程

        继续点击单步调试直到进入一个循环中:

51单片机程序执行流程

        这里是一个循环,根据DJNZ指令的功能:每执行一次DJNZ RO, IDATALOOP就将R0的值减1,若R0的值不为0则就跳到IDATALOOP地址去。很显然这是一个循环,那么RO的值是多少呢,在以下窗口显示:

51单片机程序执行流程

        可见r0的初值为0x7f,这里将要循环0x7f(128)次,具体在这里r0值的含义可查看一下子的。那么在这个循环之后程序又将去哪里呢?跳过这个循环后程序运行的地方如下:

51单片机程序执行流程

        在单步运行一次:

51单片机程序执行流程

        根据Disassembly的内容,此条语句执行了就又要回到main函数中去了,执行一下试试:

51单片机程序执行流程

        所以,在51单片机中,程序的执行流程就是会不断( 以r0的值作为延迟条件, 具体含义可继续探索 )的进入main函数中执行main函数中的代码。

        为什么我们在linux等上面运行不带死循环的C语言代码后程序就会自行终止呢?这是不同的操作流程:

        1、C51单片机不带OS(操作系统),代码的执行形势在此看来就由STARTUP.A51来安排了,没有一个更大的程序来管理怎么调用main函数。

        2、像Linux这类的平台是带了OS的,运行一个C语言程序对linux来说就是一个任务,除了运行C语言程序这个任务外还有其它的任务。当运行一个C语言程序完毕时,此次的任务也算是完成了。如在linux shell界面运行一个文件名为“hello.c”功能为输出“hello world!”的C语言程序,过程如下:

        编译:gcc hello.c –o hello

        运行:./hello

        在运行hello可执行文件时,可以当做是shell调用了hello这个可执行程序。在hello运行完毕后,将返回值等返回给shell界面。整个C语言文件的生死全有linux shell程序管理。


        内容采用于:51单片机程序执行流程详细分析-百度文库


        以上就是深圳宇凡微为大家介绍关于51单片机程序执行流程的全部内容。我们公司拥有13年的单片机方案开发经验,能够快速完成您的各种定制需求,更多详情请咨询网站客服或拨打电话!

免责声明:部分文章信息来源于网络以及网友投稿,本网站只负责对文章进行整理、排版、编辑,是出于传递 更多信息之 目的,并不意味着赞同其观点或证实其内容的真实性,如本站文章和转稿涉及版权等问题,请作者在及时联系本站,我们 会尽快处理。官方所有内容、图片如未经过授权,禁止任何形式的采集、镜像,否则后果自负!

标题: 宇凡微

地址:https://www.yufanwei.com/

推荐资讯

台湾花莲县海域发生7.3级地震,牵动大陆同胞的心!愿同胞平安

台湾花莲县海域发生7.3级地震,牵动大陆同胞的心!愿同胞平安

4月3日清晨,台湾花莲县海域发生了一场7.3级的地震,震源深度达到了12千米。这场地震发生在清晨7时58分,此次震中位于海域,离台湾岛最近约14公里。地震造成台湾全岛震感强烈,福建、广东等地震感非常明显,浙江、江苏、上海等地亦有震感反馈。
2024-04-03
向雷总学习-致敬每一位创业者-为梦想而奋斗的精神加电

向雷总学习-致敬每一位创业者-为梦想而奋斗的精神加电

3月28日(本周四)晚7点引发全网高度关注的小米汽车正式发布上市,当晚,“小米汽车SU7价格”“雷总雷神”话题直接爆了,还有多个相关话题霸屏微博热搜榜。在发布会现场看到,理想汽车李想,小鹏汽车何小鹏,蔚来汽车李斌和长城汽车魏建军、北汽集团张建勇等一众车界大佬纷纷前来捧场。现场约有1200人一起见证小米第......
2024-04-03
宇凡微QFID系列NFC非接触式读卡方案-致力打造更便携的无线通信技术

宇凡微QFID系列NFC非接触式读卡方案-致力打造更便携的无线通信技术

QFID系列方案——NFC非接触式读卡方案,以更高的性能、更可靠的安全性、更丰富的应用场景,不断的技术迭代和市场拓展,为全球用户提供了卓越的使用体验,也为中国市场带来了全新的解决方案。
2024-03-22
以科技创新引领企业高质量发展 —— 宇凡微荣膺“2023年度自主创新新锐企业奖”

以科技创新引领企业高质量发展 —— 宇凡微荣膺“2023年度自主创新新锐企业奖”

2024年3月14日下午,以“聚集产学研创新动能构建高质量发展体系”为主题,第四届深圳企业创新促进大会暨深圳工业总会2023年度年会圆满落幕。深圳宇凡微电子有限公司在合封芯片和芯片封装领域脱颖而出,促进原创性、颠覆性创新成果竞相涌现,一举斩获“自主创新新锐企业奖”。
2024-03-15
单片机封装类型

单片机封装类型介绍

单片机实质上是一个芯片,封装形式有很多种,例如DIP(DualI-liePackage双列直插式封装)、SOP(SmallOut-LiePackage小外形封装)、PLCC(PlaticLeadedChiCarrier带引线的塑料芯片封装)、QFP(QuadFlatPackage塑料方型扁平式封装)、PGA(PiGridArrayackage插针网格阵列封装)、BGA(BallGridArrayPackage球栅阵列封装)等。下面......
2022-09-20

咨询热线

0755-82225097