在微控制器入门系列讲座中,我们首先学习微控制器的基本结构和工作原理,以及外围功能电路,然后挑战实际微控制器的操作。
微控制器是控制电子产品的大脑
如今我们生活中很多电器都用到了单片机,比如手机、电视、冰箱、洗衣机,还有按一下开关就会闪烁LED的儿童玩具,那么单片机在这些电器里到底起什么作用呢?
微控制器是这些电器运行的关键,负责指挥硬件的运行,例如接收按钮或按键的输入信号,按照预先编好的程序指挥电机、LCD等外围功能电路的运行。
那么,单片机是如何构成的呢?(图1)
MCU是由CPU、内存、外设功能等组成,如果把MCU比喻成一个人,那么CPU负责思考,内存负责记忆,外设功能相当于人的视觉感官系统和控制手脚动作的神经系统。
图 1:微控制器的组件
虽然我们说CPU相当于人的大脑,但是它并不能像人脑一样有意识、自发地思考,CPU只能按顺序读取并执行存储在内存中的指令(程序)组合。当然,CPU执行的指令并不是“走路”或“说话”之类的高难度命令,而是一些非常简单的指令,比如从内存的某个地方“读取数据”或“写入”某个数据到内存的某个地方,或者做加法、乘法和逻辑运算等。但是,这些简单指令的组合却可以实现很多复杂的功能。
有思想的 CPU
让我们从CPU的结构来了解它的功能。(图2)
图 2:CPU 的作用
◇程序计数器
当CPU读取一条指令的时候,它需要知道要执行的指令在内存中的哪个位置,这个位置信息就叫做地址(相当于家乡地址)。程序计数器(PC)就是存储地址的寄存器。通常PC被设计成以1为增量,也就是当CPU执行到地址0000处的指令时,PC就会自动加1,变成地址0001。每执行完一条指令,PC就会自动加1,指向下一条指令的地址。可以说PC决定了程序的执行顺序。
◇指令译码电路
指令译码电路对从内存中读出的指令含义进行解释,运算电路根据译码结果进行运算。准确的说,指令译码电路就是我们在《数字电路入门(二)》中学习的译码电路,只是电路结构稍微复杂一些。所以,指令译码电路的工作原理就是从符号化(加密)的指令中还原出指令。
◇计算电路
运算电路又叫ALU(Arithmetic and Logic Unit),是进行运算的电路,可以进行加法、乘法等算术运算,也可以进行AND、OR、BIT-SHIFT等逻辑运算,运算是在指令译码电路的控制下进行的,通常运算电路的结构比较复杂。
◇CPU内部寄存器
CPU内部寄存器是存放临时信息的地方,有存放运算值和运算结果的通用寄存器,也有存放运算标志的标志寄存器等一些专用寄存器。也就是说运算电路在进行运算的时候,并不是直接在内存中进行运算,而是将内存中的数据复制到通用寄存器中,在通用寄存器中进行运算。
CPU 的工作原理
我们用一个具体的运算3+4来说明一下CPU的运算过程。
假设存储器中存储的程序和数据如下。
◇第1步:程序执行时,CPU读取当前PC指向的0000地址处的指令(此操作称为读指令),经过译码电路解释后,该指令的意思是“读取0100地址处的内容,然后保存到寄存器1中”。于是CPU执行该指令,从0100地址处读取数据,并存入寄存器1中。
寄存器1:0→3(由0变为3)
由于执行了1条指令,所以PC的值变为0001
◇第二步:由于PC的值为0001,因此CPU读取地址0001处的指令,经过译码电路译码后,执行该指令。此时PC加1。
寄存器2:0→4(由0改为4)
电脑:0001 → 0000
◇步骤3:由于PC的值为0002,所以CPU从地址0002处读取指令,并送入指令译码电路,译码结果为:将寄存器1和寄存器2相加,然后将结果存放到寄存器1中。
寄存器 1:3 → 7
电脑:2→3
于是3+4的结果7就被存放到了寄存器1中,加法运算就完成了。这就是CPU依次处理每条简单指令的过程。
能记住的记忆
存储器是单片机的存储设备,主要保存程序和数据,一般分为两类:ROM和RAM。
◇只读存储器
ROM(Read Only Memory)是只读存储器的缩写,ROM中存储的数据不可删除,不会因断电而丢失。ROM主要用于存储用户程序和程序执行过程中保持不变的常量。
瑞萨的大多数微控制器都使用闪存作为 ROM。这是因为闪存不仅可以像 ROM 一样在计算机关闭时保持数据完整,而且还允许修改数据。
内存
RAM(Random Access Memory)是随机读写存储器的缩写。可以随时读取和写入数据,但计算机关闭后,RAM 中保存的数据就会消失。它主要用于存储程序中的变量。
在单片机(*1)中,SRAM多用作内部RAM。SRAM虽然可以高速访问,但内部结构过于复杂,难以实现高密度集成,因此不适合用作大容量存储器。
除了SRAM以外,DRAM也是常见的RAM。DRAM的结构比较容易实现高密度集成,因此比SRAM具有更大的容量。但是,很难在同一芯片上安装高速逻辑电路和DRAM。因此,它在单片机中很少使用,基本上作为外围电路使用。
(*1) 单片机是将CPU、ROM、RAM、振荡电路、定时器、串行I/F集成在一个LSI中的微处理器。在单片机的基础上配置系统的一些主要外围电路而形成的大规模集成电路称为系统LSI。
“为什么要使用微控制器…”
为什么很多电器都采用单片机呢?
我们以点亮LED的电路为例,如图3所示,不带微控制器的电路是一个由LED、开关和电阻组成的简单电路。
图 3:无微控制器的 LED 电路
使用微控制器的电路如图4所示。
图4:安装有微控制器的LED电路图
显然,使用单片机的电路要复杂得多,设计电路需要耗费精力和金钱。目前看来,使用单片机并没有什么优势。不过,现在下结论还为时过早。
如果我们让这个电路做一些更复杂的操作会怎么样呢?比如我们想让LED在按下开关后,经过一段时间后亮起或熄灭,那么对于装有单片机的电路,我们只需要改变单片机中的程序,而不需要改变原有的电路。而对于没有单片机的电路,我们必须在初级电路上加一个定时器IC,或者用一个标准的逻辑IC和FPGA组成逻辑电路来实现这个功能。
也就是说,在改变和增加新功能的时候,用单片机的电路显然更容易实现。这正是电器设备采用单片机的原因。单片机真是方便的东西!