在大学学了2年的单片机,差不多也用了两年的单片机了,但是对其内部细致的工作原来还是有点模糊不清(可能平时的应用可以不涉及到底层工作原理,大部分工作都让编译器和汇编器替我们做了,这也阻碍了我们对底层工作原理的了解啊)。一直在不知其理的状态下开发了这么多年,内心有很多疑问,也有一种被架空的感觉。可能我比较喜欢踏实,所以一直想把内部原理搞明白,这里总结了几点。
首先,我们分析一下单片机(一般处理器)的大致工作原理吧。我们都学过简单的加法电路,计数电路,存储器读写电路和其它具有特定功能的时序电路,这些都是数字电路的时序电路课程中的简单的应用,我们可以把单片机理解为由这些基本时序电路组合而成的较为复杂的数字电路。在正常程序执行流程下,单片机在时钟时序的推动下PC自动计数,控制器根据PC值从程序存储器ROM中读取程序代码(一条指令的存储空间有可能占用一个字节,也有可能占用两个字节,最多占用三个字节),经过程序代码译码后可以得到具体的操作方式(如MOV操作)和操作数(如RO,R1)。
其次,我们理解一下指令系统。我们可以把单片机的一条指令理解为单片机支持的可执行的一个小流程,当然这个流程是需要单片机内部工艺和硬件的支持的(所以一般单片机指令系统的指令都是有限的,如51单片机支持111条指令)。我们可以理解成一个系列的单片机指令越多(当然这里指的指令都是有意义的指令),单片机运行就会越灵活越高效,当然这对单片机内部处理器硬件要求也越高,这也是制约单片机高效处理的因素之一,不过当下一些高端的单片机系列如ARM系列单片机在指令系统方面已经非常高效。
我们都知道存储指令是需要存储空间的,也就是内部ROM,执行指令需要执行时间,也就是指令周期。对于51单片机中的111条指令最多占用三个字节的存储空间,指令最大的程序执行周期是四个时钟周期(即乘法和除法指令)。这里的存储空间指的是汇编代码汇编成机器码后,机器码占用的存储空间。这里我们或许会思考,一条机器语言必须要包含足够的信息,单片机才能够根据指令运行程序。如MOV ACC #0xff 对于这条语句必须占用两个以上字节,因为数据“0xff”占用一个字节,还需要存储操作方式MOV和ACC两个信息。但是如果要对一个地址如0xffff赋一个0xffff的值,那这样理解不是要至少占用5个字节(4个字节分别存储操作地址和操作数,1个字节存储操作方式)。可能大师们一下看出了问题所在,不过当初我就是有这么思考过。结合51指令系统根本没有直接进行将一个16位数赋值给一个16位地址的指令(我承认当时我想多了),这需要由很多指令组合完成操作,那内部存储方式也就是很多指令一起的存储方式了(可能远不止5个字节)。这也是指令系统的微妙之处,他既要考虑存储空间,也要考虑执行周期,同时还要考虑指令功能的全面性。
在51系列单片机中指令中一个周期是可以同时读取两个字节的代码,这相对一个周期读取一个字节的方式来说一定程度上也减少了双字节指令的执行周期。由于读取三字节的指令至少占用两个周期,所以三字节指令执行周期必须是两个周期及以上。
以上是各个指令对应的汇编指令码,机器码和机器执行周期,有助于理解指令的细节。
对于指令系统中不同指令是有不同的寻址方式的,这是单片机内部对数据处理的一套机制,任何其他操作都是建立在这套机制之上的。所以对指令系统的理解有助于对单片机内部的细节工作过程的理解和运用。
关键字:MCS-51 单片机 底层
引用地址:
MCS-51单片机底层工作原理分析1
推荐阅读最新更新时间:2024-03-16 14:37
了解电动汽车电机控制及MCU在其中的关键作用
电动汽车(EVs)的发展已成为当今汽车行业的趋势之一。汽车制造商纷纷投入资源,推动电动汽车的发展,以应对环境问题、资源稀缺性以及消费者需求的不断演变。电动汽车的核心部件之一是电机和电机控制单元( ECU ),它们对车辆性能、效率和可靠性至关重要。 电动汽车电机 控制的重要性 电动汽车的 动力系统 由 电池 组、电机和电机控制单元组成。电机控制单元是电动汽车的大脑,它通过监测和调整电机的操作来实现动力输出和能量管理。因此,电机控制对于电动汽车的性能、效率和可持续性至关重要。 电动汽车电机控制的主要目标包括: 1. 提高效率和续航里程:通过有效地管理电机的功率输出,电机控制单元可以帮助电动汽车最大程度地利用电池储存
[汽车电子]
功率驱动器件与MCU/DSC的接口电路设计技巧
由于MCU和DSC的成本大幅下降,目前多数马达控制设计中都使用MCU和数字信号控制器(DSC)来执行马达控制算法。本文介绍了一些方法和技巧,可将MCU或DSC的逻辑层输入/输出口(I/O)与功率电子驱动电路接口,并讲述了如何正确地进行相关硬件及软件开发的方法。 在进行MCU或DSC的逻辑层输入/输出口(I/O)与功率电子驱动电路的接口设计时,除了性能和价格需要权衡考虑外,还有许多方面要折衷处理。我们可根据以下问题来选择接口元件:1. 本电路需要驱动何种马达?2. 该马达采用何种算法进行控制?3. 控制器外设可简化哪些接口要求?4. 电气安全要求是什么?5. 此设计是否用于产品开发?
栅极驱动接口电路
半桥输出
[嵌入式]
基于PIC单片机的一种车载红外夜视仪设计
0 引言 随着汽车市场的快速发展和安防意识的日益强化,人们对汽车安全保障技术的要求越来越高,而现有汽车照明系统在雪夜、雪天或大雾等能见度较低情况下视距不远、效果不佳的弊病成为汽车行驶的安全隐患之一。更严重的是在夜晚行车时,驾驶员通常会被对方车辆的灯光干扰出现盲区,容易发生车祸。夜视系统却可以在黑暗中帮助驾驶员导航,使驾驶员在有灯光和黑暗两种情况下都能看清驾驶环境。因此开发一种结构简单、性能稳定、可靠性好、适用性强的汽车红外夜视系统,具有重要的市场应用前景。 1 系统总体设计 1)系统原理 根据工作原理的不同,红外夜视系统分为被动红外夜视系统和主动红外夜视系统。主动红外夜视系统利用其所携带的红外光源主动照射目标,由光
[单片机]
AVR单片机扫描4X4矩阵键盘并数码管显示程序
/* program name : keyboard ; 功能描述 : 扫描16个按键(4X4),并把键值显示在数码管上(两位); 要点 : 在扫描按键时运用了比较复杂的两个for()循环嵌套式 扫描方案,大大减少了程序量,循环嵌套方案让我纠结了好久, 键值有0~9,上,下,左,右,确认,清零; 体会: 又一个里程碑,泪奔啊...我似乎成了 代码男神 啊...; 实验用时: 约等于14小时(每天2小时X7天); 完成时间: 2013-11-19 23:58:22 */ #include iom16v.h #include macros.h #define uint8 unsi
[单片机]
51单片机学习——1--点亮第一个LED
点亮LED 原理: 此单片机的LED灯就是个发光二极管,只能单向通行。图中LED阴极接IO口,阳极接VCC,也就是电源,为高电平,而正常情况下P2口默认输出高电平,所以只需令P2口输出低点平即可。 代码: #include reg52.h sbit led=P2^0;//通过位定义,令led代表P20口 void main() { while(1) { led=0;//令P20为低电平 } } 总结: 知识点: 设置管脚sbit name=Px^x(IO口) 令目标led灯对应的IO口输出低电平 拓展: 也可以直接对P2的所有IO口进行赋值输出。即1111 1111从高位到低位分别对应从左到右
[单片机]
单片机EMC测试详解
这里讲解EMC的定义,EMC在单片机应用系统的测试方法,EMC新器件新材料的应用以及故障排除技术。只要从事电子产品的研发、生产或者供应,就必须进行EMC电磁兼容的检测工作。 引言 所谓EMC就是:设备或系统在其电磁环境中能正常工作,且不对该环境中任何事物构成不能承受的电磁骚扰的能力。EMC测试包括两大方面内容:对其向外界发送的电磁骚扰强度进行测试,以便确认是否符合有关标准规定的限制值要求;对其在规定电磁骚扰强度的电磁环境条件下进行敏感度测试,以便确认是否符合有关标准规定的抗扰度要求。 对于从事单片机应用系统设计的工程技术人员来说,掌握一定的EMC测试技术是十分必要的。EMC是电磁兼容(Electro-MagneTIc
[单片机]
基于51单片机的8x8 LED点阵
最近学了LED点阵,并用了三种方式显示字母组,分别为按键控制显示,自动变换显示,和滚动显示 第一种 #include reg51.h #include intrins.h typedef unsigned char u8; typedef unsigned int u16; sbit RCLK=P3^5; sbit SRCLK=P3^6; sbit SER=P3^4; #define GPIP_KEY P1 #define GPIO_DIG P0 u8 keyvalue; u8 code duan ={{0x00,0x42,0x7e,0x42,0x42,0x3c,0x00,0x00},//对字母编码
[单片机]
卡尔曼滤波在单片机上的使用
#ifndef _KALMAN_H_ #define _KALMAN_H_ extern KalmanGain;// 卡尔曼增益 extern EstimateCovariance;//估计协方差 extern MeasureCovariance;//测量协方差 extern EstimateValue;//估计值 extern void KalmanFilterInit(void); extern KalmanFilter( Measure); #endif #include config.h #include math.h KalmanGain;// 卡尔曼增益 Estimat
[单片机]