趣味介绍单片机组成

用通俗的话讲单片机的原理

Posted by kevin on March 28, 2019

昨天上嵌入式系统设计课时,老师又用诙谐的语调把单片机的一些特点拿来做引子引出嵌入式以及所有计算机的一些共性,让我这个小白听的津津有味,更加对这些硬件的原理感兴趣了。这里我就用我的理解再记录一下。

单片机的最小组成

一个最简单的计算机由 ROM(只读存储器),RAM(随机存取存储器),CPU(中央处理器),IO 接口(输入输出)这四部分组成,少了任何一个都不能叫做计算机,单片机拥有以上的全部内容,所以单片机本身就是一台计算机,它的各部分都被组装在一块集成电路上,因此体积十分小,目前我们常用的教学单片机就是C51系列的单片机。

下面我来介绍一下这些器件

RAM

RAM 全称 Random Access Momery,通俗点来说就是我们平时说的内存条,程序运行中的一些数据都存放在 RAM 中,并且没有掉电记忆,也就是说再次上电时 RAM 里面原来的数据就不见了。

下面是维基百科对其定义

随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。

RAM 可以直接与 CPU 交换数据,所以它的速度是非常快的,超过了硬盘和光驱等存储设备,一般单片机的 RAM 很小,如果满足不了需要的话我们也可以自己外扩 RAM,就像给我们笔记本加一块内存条一样。

对我们人来说,凡是可以存东西的都是 RAM,衣服的口袋是RAM,当衣服袋子不够装时,我们会拎一个袋子装,也就是单片机内置的 RAM 不够用时,我们就使用外扩的 RAM。

ROM

ROM 全称 Read Only Memory, 只读存储器。烧写到单片机中的程序就保存在这个位置,因为 ROM 是有断电记忆的,下次上电 ROM 中的程序还在里面,不会丢失。

历史上的 ROM 经过了很多变革,逐渐变成了我们现在通用的 flash。

PROM

在 ROM 之后就出现了可编程只读存储器(Programmable Read-Only Memory),和 ROM 不同的是,ROM里面的程序在芯片生产时就已经写进去了,之后就不能再更改,因此一旦程序有问题的话就只能废了,而 PROM 出厂时并不用写入数据,后续用户可以对 ROM 进行一次编程写入数据,比 ROM 的可控性更高。ROM 就相当于一本书,买来之后书里的内容已经被写好了,你不能篡改,PROM 就像你用钢笔在纸上写东西,写什么用户自己定,但是写了之后就不能改变了。

EPROM

EPROM(Erasable Programmable Read-Only Memory)指的是可擦写可编程只读存储器,PROM 只能编程,而 EPROM 又加入了擦除的功能,擦除之后用户又可以继续编程,只不过要在紫外线的照射下才能擦除,这就像你用一支铅笔在纸上写,写了之后又可以用橡皮涂掉,又可以继续在上面写,发展到这里已经有点意思了。

EEPROM

EEPROM(Electrically Erasable Programmable Read-Only Memory)指的是电可擦除可编程只读存储器,这就比 EPROM 要更加方便了,只要用电信号就可以擦除,不用再去照紫外线了。

Flash memory

上面说到的 EEPROM 虽然可以擦除,但是一般都是以字节为单位进行擦除,显得很慢,正因这样,flash 被发明了出来,虽然原理还是基于 EEPROM,但是擦除速度比 EEPROM 快的多,并且成本很低,因此目前在数码设备上用的基本都是 flash 闪存。flash 本身又分为 NOR flash 和 NAND flash,这个以后有空再写。


也就是说,ROM 会保持记忆,我们人脑中也有 ROM,因此我们可以保持长时间的记忆而不忘掉,要是一个人只有 RAM 没有 ROM 的话,那是什么呢,那就成了老年痴呆了(逃)。

CPU

CPU(Center Processing Unit)是单片机最重要的组成部分,用来处理各种指令以及和存储器交换数据等等。

就相当于我们人的大脑,不断的接收周围的信息并且作出反应,人的大脑有聪明的,也有笨的,CPU 也一样,有处理速度快的,也有慢的。

IO 接口

单片机要想跟外界建立联系的话,就得通过 IO 接口,像在 C51 单片机中,我们就有 P0 - P4 这32个接口,用来做不同的事情,比如控制数码管、键盘、LED 灯等等,没有接口就做不了这些事。

我们其实就有接口,跟别人握个手拥抱就跟别人建立了某种联系,这就可以看作是 IO 接口的功能。


上面就是一个单片机最小的组成部分,但是作为一台成熟的计算机,光有这些怎么够,所以又提出了中断定时计数器的概念。

中断

中断(Interruption)这个名词听起来像是一个不好的东西,总让人联想到程序中断了,其实不是,中断是一个非常了不起的特性。

维基百科这样介绍中断

通常,在接收到来自外围硬件(相对于中央处理器和内存)的异步信号,或来自软件的同步信号之后,处理器将会进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。

讲的太深奥了,本质上就是 当你在做 A 事时,有个人叫你去做 B 事,然后你就去做完了 B 事再回来做 A 事。

生活中的中断处处都是,因为有了中断,计算机才表现出了人的思维。

打比方,老师在讲课的时候怕同学们听不懂,就会问同学们有没有问题,好,一个班几十个人,如果一个一个问下去,没有问题的话就跳到下一个人继续问,直到所有同学都问完了,想想看,这样老师的效率该有多低啊!所以正确的操作应该是老师就在那里继续做她的事讲她的课,如果你有问题就举手打断她,然后她回答完你的问题再继续去讲课,这样效率才高嘛!

想到了吗?其实,这就是一个中断!自己做自己的,有人打扰时就去处理一下再回来继续刚才的事,有条不紊的进行。

单片机中的中断一般由外设引起,比如键盘等等,程序在运行中响应到外部中断然后触发一个中断事件,处理完之后再回来继续运行。这就涉及到另一个知识,叫堆栈。

正是因为有堆栈这种数据结构才有了这么方便的中断。想想看,单片机怎么知道处理完中断后该怎么回去继续做刚刚的事呢?

当响应到一个中断时,单片机会自动将当前运行的程序的 PC 寄存器(Program Counter)压入栈底,将其保存起来,也就是通常说的保护现场,保护完之后就可以去触发中断处理程序了,处理完之后又将 PC 从栈低弹出来给单片机执行,这叫做恢复现场,就是这样的内部机制使单片机能继续回去运行刚才的程序。

定时/计数器

单片机中的定时/计数器是用来定时一段时间执行某个程序或者对外部事件进行计数,比方说计算一个键盘被按了多少次,计的就是单片机的机器周期,这个跟每个单片机上面的晶振有关。

一旦完成计数或者定时了就会触发一个中断程序,例如我们定时10ms,然后到了10ms时,单片机就会去处理我们写好的中断程序,处理完了再回去继续刚才的事。有点像读初中的时候,定一个半夜两三点的闹钟,起来偷 QQ农场 的菜,偷完了再回去睡觉(暴露年龄了)。


以上就是一些个人的见解,本人也是个小白,有说错的地方还请大佬不吝赐教。