51单片机程序深入编写裸机代码有助于了解硬件的特性

发布者:火箭飞人最新更新时间:2020-02-01 来源: elecfans关键字:51单片机  裸机代码  硬件 手机看文章 扫描二维码
随时随地手机看文章

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


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


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

执行以上程序,由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软件模拟了运行一下以上那一段代码:

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

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

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

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

再单步运行一次:

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

是的!

所以,在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单片机程序深入编写裸机代码有助于了解硬件的特性

上一篇:基于单片机的电动模型汽车自动控制系统设计
下一篇:单片机测量三相电网功率因数的接口电路分析

推荐阅读最新更新时间:2024-11-24 19:25

MCS-51单片机指令系统(2)
指令系统的分类 该指令系统使用44种助记符,它们代表着33种可能,可以实现51种操作。因此,有的功能可以有几种助记符。指令助记符与操作数的各种可能寻址方式的组合总共构造出111条指令。不同指令对标志位的影响不同,可能会影响PSW中(Cy、AC、OV、P)某些标志位的状态,且需要正确估算指令的字节数。 指令格式由两部分组成,即操作码和操作数。操作码:规定指令进行什么操作,操作数:指令操作的对象。有单字节指令、双字节指令、三字节不同长度的指令,格式不同:(1)单字节指令:操作码、操作数 同在一个字节中。(2)双字节指令:操作码+操作数。(3)三字节指令:操作码+操作数+操作数。 在MCS-51单片机中,立即数不能作为目的操
[单片机]
黑客谈智能硬件:脆弱到没朋友
    曾破解过公交卡,如今,杨卿又将目标转到了无人机上。坏消息是,他成功了,被破解后的无人机,可以无视厂商设下的安全限制,轻松在北京六环内起飞。当然,由于没有了限制,你可以在无人机上放上你想放的任何东西,飞到你想飞到的任何地方。   好消息是,搞了这个“破坏”的杨卿,是一个“白帽”黑客。   “经过三四个月的尝试,我们发现,不仅仅是汽车,在政策上颇为敏感的无人机,也并非无懈可击”,杨卿说,除了无人机,很多智能硬件都比我们想象中要脆弱很多;同时,资金相对紧张的智能硬件初创厂商,在安全上下功夫的并不多。   杨卿没有对智能硬件全盘否定。他给出的建议是,在购买前,想下智能硬件被黑的后果,比如智能的豆浆机,大不了半夜响起来吓人
[安防电子]
单片机 msp430 与c51 的区别
一、特点: msp430系列单片机是一种新型的16位单片机,主要特点就是功耗小,速度快,主要开发语言是c。开发环境有iar集成开发环境。 msp430单片机有不同系列,有f系列,c系列。比如f系列msp 40f135表示的是rom是flash型的。常用的是f系列的13系列14系列。13系列的有msp430f133和msp430f135两种。14系列的有msp430f149等。 msp4301f149有60KB的flash和2KB的ram,比起51的算是很大了。如果你想跑操作系统的话就买现在ti公司的新系列的单片机,ram有10k。 c51单片机都被s52单片机代替了。 学习430单片机有了51的基础应该很容易入门。 二、区别: 首先
[单片机]
世强元件电商为智能硬件企业提供创新服务,备受瞩目
2017年9月15日-21日,第三届全国大众创业万众创新活动周如期举行。 展会期间,世强元件电商作为全国电子元件分销转型升级的样本参与其中,不仅展示了其平台独有的数百个智能硬件创新方案,也分享了世强元件电商专注为智能硬件企业做创新服务的理念,掀开了互联网与智能硬件创新服务的新篇章。 据悉,世强元件电商充分发挥自身在元件分销领域的技术和资源优势,在技术服务、元件采购等方面发力,帮助企业快速突破设计壁垒、缩短研发时间、降低研发成本,吸引了数万创新者。 汇集全球最新的技术和元器件,让企业零距离接触 企业实现智能硬件创新的前提,需要对先进的技术、方案、元器件、板材、板材加工业等有一定的了解,其次还得做项目硬件工程师有足
[物联网]
世强元件电商为智能<font color='red'>硬件</font>企业提供创新服务,备受瞩目
51单片机对盒仔机器人的控制设计
一、盒仔机器人 BOXZ,昵称盒仔,是一款开源的互动娱乐平台!百度一下,有很多盒仔的制作教程,基本都是用arduino制作完成的。假期没事,带着宝宝们用51制作了一个廉价的BOXZ。先上张图: 从图上不难看出,为了宝宝们易于接受,我把盒仔的手机摇控改成了用线控的方法,做了一个简易的摇控器。 二、材料准备 名称型号及参数数量备注5V稳压模块LM78051 充电电池12V1 电容22pf2 按钮 4 自锁按钮 1 51单片机 stc12c2052ad 1 晶振 11.0592Mhz 1 电机驱动 L298N模块 1 降压模块 可调,选择12v在可输入范围内,给l298N供电1 小车轮子 直接65mm,胎宽在26mm或者以下2
[单片机]
<font color='red'>51</font><font color='red'>单片机</font>对盒仔机器人的控制设计
51单片机-数码管静态显示
数码管,英文名称Segment Displays,是把多个发光二极管封装在一起,组成8字,或者米字形的器件。 如上图所示,分别为8字和米字形的数码管,还有一些异形的,暂时不考虑。 今天主要说8字形的数码管,这种数码管主要分两类:7段的和8段的;驱动方式分两种:共阴极 和 共阳极。根据连在一起的字符数量,还会分为1位的,2位的,3位的,4位的等等。 先说七段和八段的分别,这个很简单,从外表就能看出来。把8字分成一段一段的LED,刚好有7段,如果再加上右下角那个小点,就是8段。也就是说,一个完整的1位数码管由七个或者八个LED组成,想要显示1、2、3等等的字符,点亮相应的数码管组成该字符就行。那么如何点亮
[单片机]
<font color='red'>51</font><font color='red'>单片机</font>-数码管静态显示
基于51单片机的热释电红外检测报警器程序
两种模式:一种紧急报警模式,另一种布防报警模式。 三个LED指示灯:红色为报警指示灯(检测到有人报警时闪亮)、绿色为布防指示灯(等待布防时1s一闪、进入布防状态时常亮)、黄色为传感器信号指示灯(有信号就亮,否则灭)。 按下布防键,系统计时20秒进入布防状态(此时绿色的led灯闪烁),20秒后系统进入布防状态(此时绿色的led亮长亮),此时当有人靠近时,黄色信号灯亮,红外热释电传感器将信号输送给单片机,单片机接收到信号蜂鸣器响,红色led灯亮,实现声光报警。 当遇到特殊情况时,按下按键1(紧急报警键),系统马上报警。 红外热释电传感器感应人体,当感应到人输出高电平,没感应到人输出低电平。 四个按键:按键1
[单片机]
基于FPGA的数字核脉冲分析器硬件设计方案
多道脉冲幅度分析仪和射线能谱仪是核监测与和技术应用中常用的仪器。20世纪90年代国外就已经推出了基于高速核脉冲波形采样和数字滤波成型技术的新型多道能谱仪,使数字化成为脉冲能谱仪发展的重要方向。国内谱仪技术多年来一直停留在模拟技术水平上,数字化能谱测量技术仍处于方法研究阶段。为了满足不断增长的高性能能谱仪需求,迫切需要研制一种数字化γ能谱仪。通过核脉冲分析仪显示在显示器上的核能谱帮助人们了解核物质的放射性的程度。 1 数字多道分析仪的优势 国内很大一部分学者采用核谱仪模拟电路的方式实现脉冲堆积的处理。由于整个过程都是由模拟电路来实现,所以一直受到多种不利因素的困扰:模拟滤波成形电路有限的处理能力达不到最佳滤波的要求;模拟系统在高计数
[电源管理]
基于FPGA的数字核脉冲分析器<font color='red'>硬件</font>设计方案
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved