单片机如何执行代码命令,单片MCU内存如何分配?

单片机执行指令过程详解

单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。

分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。

计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。

一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。

下面我们将举个实例来说明指令的执行过程:

单片机如何执行代码命令,单片MCU内存如何分配?

开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。

例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:

 1 程序计数器的内容(这时是0000H)送到地址寄存器;

 2 程序计数器的内容自动加1(变为0001H);

 3 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中;

 4 CPU使读控制线有效;

 5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。

至此,取指阶段完成,进入译码分析和执行指令阶段。

由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。

单片机执行指令过程详解

因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC=0002H,PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能。

对于一款mcu来说,在性能描述的时候都会告诉sram,flash的容量大小,对于初学者来说,也不会去考虑和理会这些东西,拿到东西就只用。其实不然,这些量都是十分重要的,仔细想想,代码为什么可以运行,代码量是多少,定义的int、short等等类型的变量究竟是怎么分配和存储的,这些问题都和内寸有关系。

首先单片机的内存可以大小分为ram和rom,这里就不再解释ram和rom的区别了,我们可以将其等效为flash和sram,其中根据flash和sram的定义可得,flash里面的数据掉电可保存,sram中的并不可以,但是sram的执行速度要快于flash,可以将单片机的程序分为code(代码存储区)、RO-data(只读数据存储区)、RW-data(读写数据存储区)和ZI-data(零初始化数据区)。在MDK编译器下可以观察到在代码中这4个量的值,如下图1所示:

图1:

其中code和RO-data存储在flash中,所以两者之和为单片机中flash需要分配给它们的空间大小(并且等于代码所生成的.bin文件大小),另外RW-data和ZI-data存储在sram中,同样两者之和为单片机中sram需要分配给它们的空间大小。

另外,我们必然会想到栈区(stack)、堆区(heap)、全局区(静态区)(staTIc)、文字常量区和程序代码区和上面所介绍的code、RO-data等的关系。

单片机执行指令过程详解

用户喜欢...

如何为RF应用选择,使用和维护同轴连接器

无线电频率(RF)电路在有线和无线通信中正在激增,包括用于物联网(IoT)的Wi-Fi和各种无线技术。这些高频信号需要在系统,电路组件和子组件之间进行分配,而损耗或寄生辐射损耗最小。...


如何快速实施符合Qi标准的无线充电系统

对于移动设备,充电过程仍然是最后的束缚。尽管诸如无线充电联盟(WPC)Qi规范等标准有助于支持更高的充电功率水平,但开发人员在设计电路,印刷电路板和固件时仍面临多重挑战,以全面...


如何快速将NFC功能添加到任何应用程序

为了满足对近场通信(NFC)能力日益增长的需求,开发人员被要求快速创建优化设计。传统方法的发展速度缓慢,因为设计人员面临诸如RF电路优化,NFC协议管理,功耗以及最小设计占用等挑战...


降低机器人风险:如何设计安全的工业环境

工业自动化(IA)的增加,特别是工业机器人的使用,正在增加人类操作员与其他移动设备或移动机器之间的意外交互的机会。设计师有责任采取适当且经常重叠的安全预防措施,以避免从生产...


如何设计可靠,准确的存在感应

随着消费和工业系统变得更智能,更具交互性和更自主,他们需要能够感知对象,用户或路过者的存在。尽管基本的在场感知技术和技术已经很成熟,但设计人员面临着更精确,高效,经济高效...


无论环境如何,都可获得高精度,多通道温度测量

尽管温度测量是许多应用的常见要求,但开发人员在确保高度准确的结果方面面临严峻的挑战。克服这些挑战通常会导致设计复杂和设计周期延长,但新设备正在降低复杂性。 本文简要讨论与...


智能制造商如何将工业4.0原则提高到质量

质量很重要。许多制造商会告诉你,质量差,影响到最高和最低。他们会告诉你,质量差的后果正在崛起,社交媒体可能会使质量问题对OEM品牌造成破坏。他们也会告诉你,他们正在努力应对。...


数字双胞胎如何在物联网支持的环境中推动创新

动态数字表示或数字双胞胎正在迅速改变行业设计,构建和操作其产品和流程的方式。Gartner预测,到2021年,一半的大型工业公司将使用数字双子机,从而使这些机构的有效性得到10%的提高。...


如何建立一个可扩展的DIY iBeacon

在阅读Eddystone发布后,我对物理网络的概念感到非常兴奋。从200多个通知走出商场的想法在一定程度上蕴藏着我的热情,但是使用iBeacons做广告和销售以外的事情是一个非常有趣的机会。 我有一...


如何使用5.0“gen4 HMI显示器制作自己的数字定时器

你知道你可以轻松地创建自己的数字计时器吗? 您只需要以下材料: gen4-uLCD-50DCT-CLB(125-7950) gen4-PA(106-5303)和FFC电缆 扬声器 uSD卡 uUSB电缆 连接电线和5V电源 这个项目设计有三个功能,数字...


降低机器人风险:如何设计一个安全的工业环境

工业自动化(IA)的增加,尤其是工业机器人的使用,正在增加人类操作员与其他移动设备或移动机器之间的意外交互的机会。设计人员有责任采取适当且经常重叠的安全措施,以避免从生产中...


如何选修开发工业物联网触摸屏

几乎每个嵌入式系统都需要能够在现场更新固件,以添加新功能或修复错误。但是,由于开发人员必须编写自己的引导加载程序或从第三方组件供应商处获得引导加载程序,所以固件字段更新可...


伺服电机以及如何使用 Arduino 平台进行控制

什么是伺服电机? 什么是伺服电机,它们的用途是什么,它们由什么组成,以及它们如何工作? 伺服电机是一种根据控制信号确定轴转动位置的电机,通常用于通过调整襟翼来控制遥控飞机,...


如何快速添加环境感应工业物联网设计

测量环境参数的能力可以作为在工厂和工业应用以及智能建筑,家电和个人产品中建立成熟的健康和安全特征的基础。然而,为了提供这些功能,有助于满足法规要求,开发人员需要找到有效地...


为什么单片机中既有Flash又有EEPROM?

单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等存储器来实现。 插播一段:ROM最初...


一种基于总线的智能型执行器系统设计

在自动控制系统中,执行器同控制器或控制系统相连,共同实现对工业过程的控制。现场总线是过程控制技术、仪表工业技术和计算机网络技术三大技术领域相结合的产物。WorldFIP现场总线既...