内部总线(bus)
MCU内部总线或称片内总线,是微控制器CPU与各功能模块之间传输信息的公共通道,包括数据总线DB(data bus)、地址总线AB(address bus)和控制总线CB(control bus)三类,分别用来传输数据、地址和控制信号。
- 数据总线:数据总线DB是双向的,用于传送数据,实现CPU与存储器、I/O接口、各功能模块之间的信息交互,其方向取决于是读操作还是写操作。数据总线的位数就是CPU的字长,是微控制器的重要指标。对于8位、16位、32位和64位的CPU,它们的数据线是8条、16条、32条和64条,其计算性能随着数据总线位数的增加而增强。
- 地址总线:地址总线AB是单向的,由CPU发出地址信息,用来访问存储器和I/O接口。地址总线的位数决定了CPU可直接寻址的存贮空间的大小,若地址总线为16位,则其最大可寻址空间为2^{16}=64K字节=64K byte=64KB;若地址总线为20位,则其可寻址空间为2^{20}=1M byte=1MB;若地址总线为n位,则其寻址空间为2^n字节。
- 控制总线:控制总线CB用来传送控制信号或时序信号。控制总线是单向的,有的是CPU输出,如读/写信号、时钟信号等;有的是外设传送给CPU的,如中断请求信号、复位信号等。每个信号都有自己的功能,控制着微控制器有序工作。
以CPU访问存储器为例,CPU通过地址总线、数据总线和控制总线的配合, 与存储器之间传输信息,如从存储器读取指令、数据;或将运算结果输出,写入存储器保存。(存储器由存储矩阵、地址译码器、读写控制(三态双向缓冲器)等部分组成),
微控制器工作原理
对于微控制器使用者来说不需要详细了解其内部结构的具体线路,但需要清楚理解微控制器的工作原理和过程。微型计算机和微控制器的工作过程就是执行程序的过程,执行不同的程序就完成不同的任务、实现不同的功能。用户编写的程序预先存放在ROM中,微控制器的工作过程就是从ROM中逐条取出指令并执行的过程。
在介绍工作原理之前,先了解程序与指令的概念:程序是为实现某个功能而编写的一系列指令的有序集合。而指令是微控制器指挥各功能部件工作的指示和命令。微控制器使用者熟悉的指令用助记符进行表示,而微控制器能识别的是指令的机器码,是一组二进制数。对于微控制器的指令类别、数量、助记符、机器代码等,因其使用的内核不同而不同,是由内核设计者规定的。采用8051内核的MCU,其指令系统都是相同的。
一条指令包括两部分内容:
1.操作码,指明指令的功能(即做什么操作)
2.操作数,指明指令执行的数据或数据存放的地址(即操作对象)
以以下指令为例:
第一条指令的操作码是24H,操作数是68H。指令执行的操作是将累加器A的内容与立即数68相加,并把结果放回A中,即(A) <- (A)+68。
第二条指令的操作码是74H,操作数是15H。指令执行的操作是将立即数15H赋给累加器A,执行后A中的内容为15H,即(A) <- 15H。
第三条指令的操作码是D2H,操作数是90H。指令执行的操作是将P1口的D0位即P1.0置为1,执行后P1.0引脚变为高电平,即P1.0 <- 1。
之前在CPU一节中说到过CPU由运算器(ALU)和控制器组成,控制器又由指令部件、时序部件和操作控制部件三部分组成,指令部件由程序计数器PC(Program Counter) 、指令寄存器IR(Instruction Register)和指令译码器ID(Instruction Decode)组成,其中程序计数器 PC是16位的ROM指针(16位特殊功能寄存器),用于存放下一条取指指令的地址,寻址范围为64K;指令寄存器IR为8位寄存器,存放当前指令的操作码,等待译码;指令译码器ID对当前指令操作码进行译码,并通过控制电路产生执行该指令需要的控制信号,完成指令规定的操作。
指令执行过程:每条指令的执行可分为三个步骤,即读取指令(取指)、分析指令(译码)和执行指令(执行)。
- 读取指令(取指):根据程序计数器PC中的值,从ROM中读出当前指令的操作码,送到指令寄存器IR
- 分析指令(译码):将指令寄存器IR中的操作码送入指令译码器进行译码,分析该指令要求进行什么操作、操作数在那里。
- 执行指令(执行):根据译码结果取出操作数,由控制逻辑电路发出完成这条指令需要的一系列时序和控制信号,完成指令规定的操作。
以指令“MOV A,#15H” (机器码为74H,15H,分别存放到ROM单元的0000H 和0001H)为例详细说明微控制器的工作过程:
- 取指令:程序开始执行时,CPU内部的程序计数器(PC)当前值为
0000H。第一步PC将地址0000H送入地址寄存器,第二步CPU发出读信号,从ROM的0000H单元取出操作码74H,第三步取出的操作码74H经数据总线(DB)送入指令寄存器;第四步,PC值自动加1,指向下一个要读取的单元(0001H)。 - 分析指令:由指令译码器对现行指令进行译码,分析该指令要求 实现什么操作,如执行数据传送,还是加、减等运算等。第一步指令寄存器中的操作码74H送入译码器;第二步译码器分析74H,确认为“MOV A, #data”指令,并识别到需要从下一个存储单元获取立即数。
- 执行指令:取出操作数,由控制逻辑电路发出相应的控制信号, 完成操作码规定的操作。第一步CPU根据PC当前值(0001H)取出操作数15H;第二步将取出的立即数15H经由内部数据总线送入累加器A;第三步PC值再次自动加1,指向下一条指令的地址(0002H)。
微控制器在工作前,必须要把程序(完成一定功能的指令序列)存放在ROM中。微控制器上电后,即从ROM的0000H单元开始逐条取出指令,执行程序。