打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单片机是怎样执行程序的(单片机所有的外设都是挂在单片机的可以访问的地址上其实单片机地址是我们虚构出来的)

https://www.toutiao.com/article/7103830230791553568/?log_from=f0beccbfa491d_1660700050045


    (单片机所有的外设都是挂在单片机的可以访问的地址上其实单片机地址是我们虚构出来的)

单片机(Micro Control Unit):全称微型控制单元,简称单片机(MCU),从字面意思我们可以了解到,它就是一个微型的计算机系统。然后我们下面通过比较来了解下它为什么时一个微型计算机系统。

电脑主板

我们首先来看下我们熟悉的电脑主板,可能有人会问,我是来学单片机的,你给我介绍主板干嘛?我们这里是用主板来做一个类比,我们看了上面一大堆东西,估计很多人用了很长时间的也不知道单片机和代码是怎么回事。

电脑主板块包括CPU,北桥,南桥;其中南桥下面主要掌管着这些低速设备USB,PCI,SATA,BIOS等外设。

手机"CPU"

这里CPU之所以加了引号是因为CPU指的是中央处理单元,而我们手机的处理器不仅仅只有中央处理功能。有CPU,GPU,5G和WIFI模组,还有人工智能APU;对比下主板是不是发现有什么共同点。没错,手机处理器将这些外设全部集成到一个芯片里面去了,其实像现在最新CPU也是朝着这个方向做的,目前已经有很多CPU把显卡集成进去了。

有时候我们其实用不到电脑CPU和手机处理器这么强悍的性能和诸多功能,我只要控制个I/O、串口通信等。那些不要的东西给它裁剪掉,加上简单的计算单元,然后把它的可靠性提高。这样就形成了单片机。

单片机内部组成

51单片机同样包含CPU(8051内核),SRAM(内存)可怜的1K,闪存(硬盘)也只有区区的几十K,然后外围的模块基本就是下载代码用的ISP,EEPROM,看门狗,复位模块,串口模块,中断模块,基本输入输出I/O模块。

因为单片机主要应用在一些对价格比较敏感的领域,所以这类单片机种类也比较多,像51是我们常用的单片机,主要应用的场合有数码家电(洗衣机,电饭锅,电磁炉,微波炉),工业现场数据采集与传输等,但是随着它的价格优势下降和易上手程度,慢慢的市场被32位单片机被取代,STM32比51单片机的内部结构复杂很多,51有的东西它都有,并且比51的更强大;51单片机没有的模块它也有,调试功能模块,RTC模块,USB模块,CAN总线模块,ADC,SPI,I2C等等。

单片机是如何工作的?

先举一个例子:我们要住宾馆,我们是通过什么来找到你要住的地方,那就是房间号,因为房间号是酒店预先编好的。然后我们就可以通过唯一的房间号,找到这个房间。

单片机也是一样的,我们所有的外设都是挂在单片机的可以访问的地址上,我们要对单片机进行预先定义地址,不然我们就找不到哪个设备对应那个地址,也就没办法操作。其实单片机地址是我们虚构出来的,为了便于实际使用中的方便而已。

CPU是如何执行程序的?

1、我们先来看下两位全加器

A = 01B = 1H

B = 11B = 3H

A + B = 1 + 3 = 4 = 100B

2、那么数字电路是如何进行加减乘除运算的?

注意:我们这里不考虑一些特殊的情况,我们8位数最大能表示的数为255,所以只考虑数值小于255的情况,更深入的探讨大家可以去寻找更专业的资源学习。

加法运算:

假设我们要进行8+13运算:

十进制运算:8+13= 21;

二进制运算:0000 1000 + 0000 1101 = 00010101;

减法运算:

加法是进位,减法需要考虑的则是借位,小学时对加减法的经验是这样的,但是计算机不是这么处理的。计算机只有加法,没有减法。那么 int a = b - c是怎么得出来结果的呢?首先要了解一个概念——补码。

计算机中对于有符号数,用最高位作为符号位,“0”代表“+”,“1”代表“负号-”;其余数位用作数值位,代表数值。比如 Byte类型的取值范围为 -128 ~ 127。其中,表示数值的只有 7位,首位表示正负。

补码规定,正数和 0的补码就是其原码(原码、反码的定义这里就不多赘述),负数的补码是其正数的原码取反再加 1。

举个例子,求负 -10的补码:十进制 10的原码(按 8位举例)为 0000 1010,其反码为 1111 0101,取反后再加 1即为其补码1111 0110。因此,负10的补码为 1111 0110。

不知道写到这里,大家有没有发现什么端倪?我们再回到减法计算来,a = b - c实际上等同于a = b + ( -c )。

情形1,减数>被减数

12 - 5= 0000 1100 + 1111 1011= (1)0000 0111= 7乘法的流程。

·5 * 3 = 0000 0101 * 0000 0011

·第一步:5 + 5 = 10

·00000 0101 + 0000 0101 = 0000 1010

·第二步:10 + 5 = 15

·0000 0101 + 0000 1010 = 0000 1111

虽然CPU中有乘法器,但是我们发现实际的最终操作流程还是加法和位移操作计算的乘法运算。我们写的代码中的乘法到底是用乘法器运算还是转化成加法运算,我们也并不太确定,有些编译器编译的时候会对代码进行优化,选取最优的一种算法来计算结果。

除法运算:

除法可以通过减法来实现,比如10 / 3等价于10一直减3直到被减数小于 3,减了 3次,那么10 / 3的结果就为3了,余数为减完剩下的值1。

其实上面已经提到了乘法器,除法的原理同样也类似(这里不说浮点数的除法,只说整数的除法),但是稍微复杂一点。

晶振在单片机中是起什么作用?

上面的运算,我们都是通过手动的方式来进行的,我们知道数字电路本身是不工作的,它也不能工作,否则电路就会出乱子,它必须依赖其它电路产生的高低电平才能驱动它工作,我们把这种有规律的高低电平定为脉冲,单片机也是数字电路,它又是怎么工作的?我们必须要有一个能源源不断产生脉冲的电路,它才能持续不断的工作下去,这也就是晶振在单片机电路中为什么被称作为“心脏”的原因,我们把这个“心脏”去掉,相应的整个单片机系统也会罢工。

为什么有些单片机没有晶振?我们知道单片机工作只要有持续不断的脉冲输入就行,我们有些场合对单片机没有精确的时间要求,所以一般使用内部自带的振荡器为单片机提的时钟脉冲也能确保单片机正常工作,所以在有些地方我们就看不到晶振。那是因为内部自带了RC振荡电路。

复位:CPU执行程序需要有一个初始状态,通过复位可以进入到一个初始状态。这样单片机知道自己的起始位置,它才能按照既定的方式运行程序。

本期先分享到这里,想要进群学习单片机编程的同学可以私信我,回复“我要入门”,与我们一起成长,喜欢的可以点个赞关注我们!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单片机常用名词解释
面向信号处理过程的ADC特性使传感器连接变得简单
总复习
试卷
计算机硬件基础
STM32F0单片机快速入门八 聊聊 Coolie DMA
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服