学习单元二 单片机的“解剖图”
一、单片机的抽象结构
图3-7所示为单片机内部电路的抽象结构。它完整地“解剖”了单片机的内部结构和引脚的关系等内容,充分理解这个结构将很好地帮助我们理解单片机的工作过程,但我们并不奢望初学者短时间内能把此图的内部结构全部弄清楚,在此只需要初学者有一个大概的印象即可。
图3-7 单片机的抽象结构
图中最外侧的虚线框代表单片机的塑料外壳。以虚线框为界,框内为其内部结构,框外部为外露的40个引脚。这40个引脚分别是:4组I/O口共32个引脚(P0.0~P0.7、P1.0~P1.7、P2.0~P2.7、P3.0~P3.7)、2个电源引脚Vcc和GND、2个接晶振的引脚XTAL1和XTAL2、其余4个时序与控制引脚、ALE/、/VPP和RST。
为了更快地理解这个结构,我们先从熟悉的四个端口P0~P3入手。首先是P1口,它在结构图的左下方,其中I/O口P1.0~P1.7的8根双向细箭头代表着8个引脚,这8个引脚与“P1口的驱动”相连,而“P1口的驱动”与“P1口锁存器”相连,这一点与刚才图3-6的分析是相同的。
同样的分析方法可应用于P0、P2和P3口。从图中看到,P0和P2口的驱动通过总线与“程序地址寄存器”相连,说明P0和P2口的第二“角色”是作为地址和数据线与“程序地址寄存器”打交道;而P3口的驱动与中断、串行口通信和定时器寄存器通过总线相连,可以猜想P3口的第二“角色”就是与中断、串行口通信和定时器有关的操作。此外P0、P1、P2和P3口的锁存器都相连到单片机内部一条主要的总线上。从图中还可以看到几乎每一个方框都与这一条主要的总线发生关系。例如程序状态字PSW、累加器ACC、B寄存器等。在单片机运行过程中,这条主要的总线上传输着各种各样的数据。例如执行指令“MOV P1, A”时,把累加器ACC的数据载入P1中。这时,数据从累加器ACC中出来,“跑进”总线上,并沿着总线来到P1口锁存器附近,P1锁存器也接到MOV指令的“通知”,知道有数据送来需要接收,于是P1口锁存器把总线上这段从ACC送出的数据接收下来,并送到P1口驱动上,这样在单片机的P1口就出现了与累加器ACC中相同的8位数据。
有人可能会说从ACC送到总线上的数据在总线上“跑”了一圈,为什么其他的功能模块如P1~P3口锁存器或程序状态字PSW等不接收而偏偏只有P1口接收到呢?这是单片机执行指令“MOV P1, A”的结果,原因是只有P1口锁存器接到了MOV指令发出的接收数据的“通知”。
图3-7除了展示单片机的4组I/O口,还展现了振荡器(OSC)如何与外部的晶振和电容连接,以及4个控制引脚、ALE/、/VPP和RST与内部结构的关系等。
二、深入“解剖”单片机的CPU
在计算机中,CPU是计算机的核心器件,它完成高速的算术和逻辑运算。在单片机中也有CPU,为了简化单片机的CPU,可以把图3-7中ALU看成是单片机的CPU,只是ALU的结构和功能比CPU简单得多。
对图3-7中的单片机内部功能模块——ALU(Arithmetic Logic Unit,算术逻辑单元,简称ALU)进行放大处理后如图3-8所示。
图3-8 算术逻辑单元ALU
ALU更通俗易懂的名字是“进行算术运算和逻辑运算的处理单元”。ALU由数字电路构成,它能进行加、减法等算术运算,也能做与、或、异或等逻辑运算。
为了方便讲解,在图3-8中我们把ALU的两个输入分别标注为输入1和输入2, ALU的两个输出分别标注为输出1和输出2,其中输入1来自暂存器1,输入2来自暂存器2,输出1输出到程序状态字PSW,输出2输出到总线。这里,有几点需要了解:
(1)输入1和输入2的数据来自总线,送入ALU中运算后,运算结果通过输出2又输出到总线上。
(2)ALU的状态通过输出1送往程序状态字PSW(Program State Word,简称PSW),所以,程序状态字PSW随着ALU的运算过程发生相应的变化。如执行加法指令ADD时,当最高位有进位时,程序状态字中PSW的CY就被置1,这都归功于ALU通过输出1向程序状态字PSW中的CY位输出高电平。
从图中还看到,在输入1和输入2之前,有两个单元电路——暂存器1和暂存器2,它们是缓存,用于数据的缓冲。之所以使用缓冲机制,原因是当总线上传来数据时,ALU有可能还没有完成前一个运算。这时,总线上的数据就可以先存储在暂存器1和暂存器2中,当ALU完成前一个运算后,就把暂存器1和暂存器2中的数据通过输入1和输入2读进来进行运算。
本单元针对单片机的抽象结构重点介绍了I/O口和ALU,还有一些很重要的功能模块和概念如RAM、ROM等有待在后续的学习中介绍。本单元的内容可能一开始不好理解,其实不用担心,因为上面的分析对单片机应用来说用处不大,只是有助于理解其内部结构。尽管这样,我们还是把图3-7所示的单片机的抽象结构分析了很大一部分,如4组I/O口和单片机的CPU——算术逻辑单元ALU等,并把总线上的数据传输机制解释清楚了。这样对于单片机内部结构的初步了解已经足够了。