第2章 51单片机结构及最小系统
2.1 51单片机外部结构及最小系统
2.1.1 51单片机引脚
51系列单片机有DIP、QFP、PLCC等多种封装形式,这里仅介绍总线型DIP40封装,其引脚排列和逻辑符号如图1.2.1所示。
图1.2.1 AT89C51单片机DIP40封装引脚结构
DIP40封装引脚功能如下所述。
(1)电源及时钟引脚
Vcc:接5V电源。
Vss:接地。
XTAL1:外接晶振输入端(采用外部时钟时,此引脚作为外部时钟信号输入端)。
XTAL2:内部时钟电路输出端(采用外部时钟时,此引脚悬空)。
(2)并行I/O接口引脚(32个,分成4个8位并行口)
P0.0~P0.7:通用I/O口引脚或数据/低8位地址总线复用引脚。
P1.0~P1.7:通用I/O口引脚。
P2.0~P2.7:通用I/O口引脚或高8位地址总线引脚。
P3.0~P3.7:一般I/O口引脚或第二功能引脚。
(3)控制信号引脚
RST/Vpd:复位信号引脚/备用电源输入引脚。
:地址锁存信号引脚/编程脉冲输入引脚。
初始化
:内外程序存储器选择信号引脚/编程电压输入引脚。
:外部程序存储器选择信号输出引脚。
2.1.2 时钟与复位电路
1.时钟电路
单片机工作时,从取指令到译码再进行微操作,必须在时钟信号控制下,才能有序地工作。单片机的时钟信号通常有两种产生方式:一是内部时钟方式,二是外部时钟方式。
内部时钟方式的硬件电路如图1.2.2(a)所示。在XTAL1和XTAL2引脚接上一个晶振,在晶振上加上两个稳定频率的C1和C2,其典型值为33pF。晶振频率典型值有6MHz、11.0592MHz和12MHz等。
外部时钟方式的硬件电路如图1.2.2(b)所示。它一般适用于多片单片机同时工作时,使用同一时钟信号的情况,以保证单片机的工作同步。
图1.2.2 80C51单片机时钟电路
为了更好地理解单片机的工作时序,先介绍几个定义。
晶振周期:振荡电路产生的脉冲信号的周期,是最小的时序单位,用节拍P来表示。
时钟周期:把2个晶振周期称为S状态,即时钟周期。通常包括两个节拍P1和P2。
机器周期:把12个晶振周期称为机器周期,用TCY表示。
指令周期:执行指令所需的时间。一般为1个机器周期或2个机器周期或4个机器周期。
如晶振频率为12MHz时,机器周期为1µs。80C51单片机时钟信号如图1.2.3所示。
单片机程序的执行过程是在时钟的驱动下,CPU不断取指令、译码、执行的过程。单片机的指令根据存储空间分有单字节指令、双字节指令、三字节指令;根据执行时间分有单周期指令、双周期指令和四周期指令,下面列举说明指令时序。
图1.2.3 单片机的时钟信号
(1)单字节指令时序
如图1.2.4所示,在S1P2开始读取指令的操作码,并执行指令,在S4P2结束操作。但S4P2读取的操作码无效。
图1.2.4 单字节指令时序
(2)双字节指令时序
如图1.2.5所示,在S1P2读取第一字节,在S4P2读取第二字节。
图1.2.5 双字节指令时序
(3)双周期指令
对于单字节指令,在两个机器周期内要进行4次读操作,但后3次读操作无效,其时序如图1.2.6所示。
图1.2.6 单字节双周期指令时序
访问片外RAM单字节指令周期时序如图1.2.7所示。
图1.2.7 访问外部RAM指令周期时序
比较上述几个时序图,不难发现,只有访问片外RAM时,地址锁存信号ALE才具有周期性,其周期为6个时钟周期,因此ALE也可以作为其他电路的时钟信号。
2.复位电路
单片机在启动运行时,单片机内部各部件都要处于某一明确的状态,并从这个状态开始工作,由此单片机有一个复位引脚RST。为了保证单片机进行可靠的复位,在RST引脚上必须加上2个机器周期以上的高电平。如晶振频率为12MHz的单片机,复位信号高电平持续时间要超过2µs。
在具体应用中,复位电路有两种基本方式,一种是上电复位,另一种是上电与按键复位。电路如图1.2.8所示。
思考题:
1.单片机外接晶振频率与运行速度有何关系?
2.单片机晶振频率为 12MHz 时,机器周期为多少?单片机晶振频率为24MHz时,机器周期又为多少?
3.单片机指令是如何读取和执行的?
图1.2.8 80C51复位电路
上电复位电路中当晶振频率为12MHz时,C的典型值为10µF,R为8.2kΩ;晶振频率为6MHz时,C典型值为22µF,R为1kΩ。
单片机复位后,进入初始状态。各寄存器状态如下。
程序计数器PC:0000H,即复位后单片机从0000H单元开始执行程序。一般在0000H单元存放一条转移指令,转移到主程序中。PC具有自动加1功能且永远指向下一条即将要执行的指令,因此PC导引程序运行。
P0~P3口:FFH,即各I/O锁存器置1,可以直接输入。
堆栈指针SP:07H,即堆栈的栈顶地址为07H单元,07H单元为工作寄存器区,一般需要堆栈时,将SP赋值,应超过30H。
其余的SFR:均为00H。
片内RAM:为随机值。
2.1.3 最小系统
单片机要能够正常工作,必须有连接正确的时钟和复位电路,这是构成单片机最小系统的必需条件。所谓单片机最小系统,就是使用最少的元件构成能够运行程序的单片机系统。在过去的51单片机最小系统中,由于8031单片机没有内部程序存储器,所以需要外接程序存储器来构成最小系统。而现在的单片机已经在内部集成了程序存储器,所以只需要一片单片机,再配上基本的时钟、复位电路即能构成最小系统,进行单片机的程序开发工作。图1.2.9所示电路中,仅包含单片机、时钟电路、复位电路共计6个元件的系统即单片机最小系统。
图1.2.9 80C51最小系统图
2.2 51单片机内部结构
2.2.1 整体结构
80C51单片机的基本结构如图1.2.10所示。
图1.2.10 80C51单片机基本结构
由图1.2.10可知,80C51单片机由以下部分组成。
(1)CPU系统
① 8位CPU,能够进行布尔处理。
② 内部时钟电路。
③ 总线控制逻辑。
(2)内部存储器系统
① 4KB程序存储器(ROM/EPROM/Flash),可外扩至64KB。
② 128B的数据存储器(RAM,可外扩至64KB)。
③ 21个特殊功能寄存器(SFR)。
(3)I/O接口及中断、定时部件
① 4个8位并行I/O接口。
② 5个中断源的中断系统,2个优先级。
③ 2个16位定时/计数器。
④ 1个全双工的串行I/O口。
2.2.2 并行I/O结构
80C51单片机有4个并行I/O口P0、P1、P2和P3。每个并行接口均由数据输入缓冲器区、数据输出驱动及锁存器构成。4 个并行接口在结构上基本相同,但也存在差异,所以各接口功能有所不同。下面分别介绍各I/O口接口及功能。
1.P0口结构及工作原理
P0口由8位I/O口构成,每位包括1个D锁存器、2个三态缓冲区、由1对场效应管组成的输出驱动电路,以及1个与门、1个反相器和1个电子开关MUX。其位结构如图1.2.11所示。
图1.2.11 P0口的位结构
P0口特点如下。
P0口地址为80H,可以进行位操作。
P0口既可以为数据/低8位地址总线,也可以作为通用I/O口。
P0口采用漏极开路输出作通用I/O口时,要接上拉电阻,可推动8个TTL电路。
P0口作为输入时必须将P0口置1。
当P0口作为数据/低8位地址总线使用时,单片机内部硬件自动使控制信号C为1,使电子开关MUX接上反相器的输出端。若地址/数据总线状态为1,则场效应管T1导通,T2截止,引脚状态为1;若地址/数据总线状态为0,则场效应管T1截止,T2导通,引脚状态为0。
当P0口作为通用I/O口使用时,控制信号C为0,T1截止,电子开关MUX接上锁存器的反相端。由于上拉场效应管T1处于截止状态,因此,输出时需接上拉电阻。
P0口作为输出口时,内部总线的数据,在写锁存器信号作用下存入D锁存器中,经锁存器的反相端送至场效应管T2,再经 T2反相,在P0口上引脚上输出的数据正好是内部总线的数据。
P0口作为输入口时,首先要使T2截止,否则引脚信号被箝位在0电平,导致信号无法输入。数据从引脚读入到内部总线上有两种方式。一种是“读锁存器”,一种是“读引脚”,具体使用哪种方式由指令决定。当CPU执行“读——修改——写”指令(如ANL P0,#07H)时单片机选择“读锁存器”方式,这种方式可以防止外部电路原因使引脚状态发生变化而产生误读。其他指令均通过“读引脚”方式将引脚状态读入到内部总线上。
2.P1口结构与工作原理
P1口的位结构如图1.2.12所示。
图1.2.12 P1口的位结构
由图1.2.11可知,P1口由1个输出锁存器、2个三态输入缓冲器和输出驱动电路组成。其特点如下。
只能作为通用I/O口使用。
输入时,P1口必须先置“1”,使内部场效应管T截止,从而不影响输入电平。
无需接上拉电阻即可驱动4个TTL电路。
P1口接口结构简单,读者自行分析其工作原理。
3.P2口结构及工作原理
P2口包括1个输出锁存器、1个转换开关MUX、2个三态输入缓冲器、输出驱动电路和1个反相器。P2接口的位结构如图1.2.13所示。
图1.2.13 P2口的位结构
P2口特点如下。
可以作为高8位地址线,也可以作为通用I/O口。
作为通用 I/O 口输出时,由于内部集成了上拉电阻,无需再接上拉电阻,可以驱动 4个TTL电路。
输入时,P2口必须先置“1”,使内部场效应管T截止,从而不影响输入电平。
作高8位地址使用时,控制信号C为1,转换开关MUX接上地址线,经反相器和场效应管两次反相后送到P2口引脚上。
作通用I/O口使用时,其输入/输出工作原理与P0口相似,不再作详细分析。
4.P3口结构及工作原理
P3口由1个输出锁存器、3个输入缓冲器、输出驱动电路和组成。输出驱动电路包括1个与非门、1个场效应管T和上拉电阻R,其结构如图1.2.14所示。
图1.2.14 P3口的位结构
P3口作通用I/O口时与P1口类似,此外,P3口还具有第二功能。作为第二功能使用时,单片机内部硬件自动将P3口锁存器置1,以保证第二功能的输出。P3口作为第二功能使用时,各引脚定义如下。
P3.0:RXD(串行接口输入)。
P3.1:TXD(串行接口输出)。
P3.2:INT0(外部中断0输入)。
P3.3:INT1(外部中断1输入)。
P3.4:T0(定时/计数器0的外部输入)。
P3.5:T1(定时/计数器1的外部输入)。
P3.6:WR(片外RAM“写”信号线)。
P3.7:RD(片外RAM“读”信号线)。
2.3 51单片机存储结构
80C51 系列单片机存储器分为两种类型,一种是程序存储器(ROM),另一种是数据存储器(RAM)。RAM 用来存放暂时性的输入、输出数据和运算中间结果,ROM 用来存放程序或常数。
2.3.1 80C51单片机程序存储器
MCS-51 系列的 80C51 在芯片内部有 4KB 的掩膜 ROM,87C51 在芯片内部有 4KB EPROM,89C51在芯片内部有 4KB Flash ROM。目前几乎所有的单片机内部ROM都是FLASH ROM。
80C51单片机的程序存储器配置如图1.2.15所示。
图1.2.15 80C51程序存储器配置
从图1.2.15(a)可以看出,内部ROM与外部ROM低4KB的地址重叠,单片机主要通过内部程序存储器选择信号来控制。当引脚信号为低电平时,单片机只访问外部ROM,对无内部ROM的8031系列单片机的引脚必须接地。当为高电平时,先访问片内低4KB ROM,再访问外部高60KB ROM。
程序存储器低端的一些地址被固定作为特定的入口地址。
0000H:单片机复位后的入口地址。
0003H:外部中断0中断服务程序的入口地址。
000BH:定时/计数器0溢出中断服务程序的入口地址。
0013H:外部中断1中断服务程序的入口地址。
001BH:定时/计数器1溢出中断服务程序的入口地址。
0023H:串行口的中断服务程序的入口地址。
这些入口在需要编写中断程序时使用,一般的程序在存放时应跳过这个区域,避免引起错误。编写中断程序时一般在这些入口地址开始的单元中存放一条转移指令,转移到相应的中断服务程序处。如果中断服务程序少于8B,可以将中断服务程序直接存放到相应的入口地址以后的几个单元中。
2.3.2 80C51单片机的数据存储器
80C51单片机数据存储器分为片外RAM和片内RAM。片外RAM最大可扩展64KB,地址范围为0000H~FFFFH。片内RAM可分为两个不同的存储空间,即低128字节单元的数据存储器空间和分布21个特殊功能寄存器SFR的高128字节存储器空间。注意,对于增强型单片机(如AT89C52),数据存储器容量为256字节,因此还存在一个与SFR所在的高128字节存储空间地址相同的存储空间(图1.2.16中所示增强型附加空间),即地址也为80H~FFH,这时,CPU将通过访问指令的不同来进行区分:如果是直接寻址,则访问SFR区;如果是寄存器间接寻址,则访问的是高128字节的数据存储空间。其结构如图1.2.16所示。
图1.2.16 80C51数据存储器结构
1.片内低128B RAM
片内低128B RAM单元分为工作寄存器区、位寻址区、通用RAM区3部分。
(1)工作寄存器区
80C51单片机内部低32B单元分成4个工作寄存器组,每组占8个单元,分别用R0~R7来表示。单片机运行时只能允许一个工作寄存器组作为当前工作寄存器组。
当前工作寄存器组的选择由特殊功能寄存器中的程序状态字寄存器PSW的RS1、RS0两位来决定,选择方法如表1.2.1所示。
表1.2.1 当前工作寄存器组的选择
(2)位寻址区
80C51 单片机具有位处理功能,因此存储空间有一个位寻址区,位于片内 RAM 的20H~2FH单元中,16个单元共128位,其地址范围为00H~7FH。该区也可以作为普通的RAM单元使用,进行字节操作。
(3)通用RAM区
位寻址区之后的30H~7FH共80字节单元作为通用RAM区。这些单元作为数据缓冲区,在实际应用中80C51的堆栈一般设在30H~7FH范围中。
2.片内高128B RAM
80C51单片机片内高128B RAM分布了21个特殊功能寄存器,它们分散在80H~FFH地址中,字节地址能被8整除的单元可以进行位寻址。21个特殊功能寄存器地址分配如表1.2.2所示。
表1.2.2 80C51特殊功能寄存器位地址及字节地址表
这里先介绍几个特殊功能寄存器,其他的SFR将在以后的章节中结合具体功能部件进行说明。
累加器ACC:地址为E0H,存放操作数和运算结果,是单片机中使用最频繁的寄存器。
B寄存器:地址为F0H,在乘法或除法运算时存放乘数或除数,运算后,B寄存器存放乘积的高8位或余数。B寄存器也可以作为一般的寄存器使用。
堆栈指针SP:存放堆栈栈顶地址。数据入栈时,SP自动加1;数据出栈时,SP自动减1。
数据指针DPTR:用来存放16位的地址,是唯一的一个16位SFR。DPTR可以分为高8位和低8位单独使用,即DPH和DPL。
程序状态字PSW:程序状态字用于存放程序运行状态信息,各标志位如表1.2.3所示。
表1.2.3 程序状态字
Cy:进位标志位。在加法或减法运算时,D6向D7有进位借位,Cy为1,否则为0。
AC:辅助进位标志位。在加法或减法运算时,D3向D4有进位或借位,AC为1,否则为0。
F0:用户标志位,用户可以自行定义。
RS1、RS0:当前寄存器组的选择位。
OV:溢出标志位。D6、D7进位或借位不同时则发生溢出,即OV为1,否则为0。
P:奇偶标志位。当累加器ACC中1的个数为奇数时,P为1,否则为0。
程序计数器PC:16位的PC不属于特殊功能寄存器。其存放的内容是下一个要取的指令的16位存储单元地址。也就是说,CPU总是把PC的内容作为地址,从ROM中取出指令,然后执行。每取出一条指令后,PC的值自动加1。
3.片外RAM
单片机在内部RAM不够用的情况下需要扩展片外RAM。扩展片外RAM需要构建单片机的三总线结构,硬件电路较为复杂,因此,现在许多单片机直接把外部 RAM 集成进单片机内部,但是访问时仍采用外部RAM的访问方法。如前述及的STC12C5A60系列单片机,其内部RAM为1280B,就是由内部256B加外部1024B构成的。其内部256B采用MOV指令访问,而超过256B的部分采用MOVX访问。若是采用C语言编程,则分配变量时要加上xdata进行定义。
【思考与练习】
1.AT89C51单片机的工作电压为______V,其复位端是______电平复位。
2.51单片机的内部数据存储器可分为3个部分,即通用工作寄存器区、______、______,其中通用工作寄存器区的地址范围为______~______。
3.51单片机4个I/O口中,______口为开漏极结构,作普通I/O口使用时需要外接上拉电阻。P3口中,外部中断占用______脚和______脚,定时器计数输入端占用______脚和______脚。
4.当单片机的PSW=18H时,这时当前的工作寄存器是第______组,其中R4所对应的存储单元地址为______H。
5.堆栈指针用______表示,单片机上电复位后其指向地址______H。
6.AT89C51 的内部数据存储器大小是______字节,程序存储器大小为______字节,RAM中位寻址区的起止范围是______H~______H。
7.PC是程序指针,具有______功能,永远指向______指令。
8.51单片机的系统时钟频率为6MHz时,机器周期为______。