Intel公司推出的MCS-51系列单片机以其典型的结构、完善的总线、特殊功能寄存器的集中管理方式、位操作系统和面向控制的指令系统,为单片机的发展奠定了良好的基础。
8051是MCS-51系列单片机的典型品种。众多单片机芯片生产厂商以8051为基核开发出的CHMOS工艺单片机产品统称为80C51系列。
2.1 80C51 系列概述
2.1.1 MCS-51 系 列
MCS-51 是 Intel 公司生产的一个单片机系列名称。属于这一系列的单片机有多种,如 051/8751/8031,8052/8752/8032,80C51/87C51/80C31,80C52/87C52/80C32 等。
该系列单片机的生产工艺有两种:一是 HMOS工艺(即高密度短沟道 MOS工艺),二是 CHMOS 工艺(即互补金属氧化物的 HMOS 工艺)。CHMOS 是CMOS 和 HMOS 的结合,既保持了 HMOS 高速度和高密度的特点,还具有CMOS 低功耗的特点。在产品型号中凡带有字母“C”的,即为 CHMOS 芯片, 不带有字母“C”的,即为 HMOS 芯片。HMOS 芯片的电平与 TTL 电平兼容, 而 CHMOS 芯片的电平既与 TTL 电平兼容,又与 CMOS 电平兼容。所以,在单片机应用系统中应尽量采用 CHMOS 工艺的芯片。
在功能上,该系列单片机有基本型和增强型两大类,通常以芯片型号的末位数字来区分。末位数字为“1”的型号为基本型,末位数字为“2”的型号为增强型。如 8051/8751/8031、80C51/87C51/80C31 为基本型,而 8052/8752/8032、80C52/87C52/80C32 为增强型。
在片内程序存储器的配置上,该系列单片机有三种形式,即掩模 ROM、EPROM 和 ROMLes(s 无片内程序存储器)。如80C51 含有 4K 字节的掩模ROM, 87C51 含有 4K 字节的 EPROM,而 80C31 在芯片内无程序存储器,应用时要在单片机芯片外部扩展程序存储器。
2.1.2 80C51 系 列
首先,80C51 是 MCS-51 系列单片机中 CHMOS 工艺的一个典型品种。另外,其它厂商以8051 为基核开发出的CHMOS 工艺单片机产品统称为80C51 系列。后面的叙述中若无特殊声明,“80C51”均指统称。当前常用的 80C51 系列单片机主要产品有:
Intel 公司的:80C31、80C51、87C51,80C32、80C52、87C52 等;
ATMEL 公司的:89C51、89C52、89C2051、89C4051 等。
除此之外,还有 Philips、华邦、Dallas、Siemens(Infineon)等公司的许多产品。
虽然这些产品在某些方面有一些差异,但基本结构和功能是相同的。所以, 以 80C51 代表这些产品的共性,而在具体的应用电路中,有时会采用某一产品的特定型号。
2.2 80C51 的基本结构与应用模式
2.2.1 80C51 的基本结构
80C51 单片机的基本结构如图 2.1 所示。
注:与并行口P3 复用的引脚:串行口输入和输出引脚RXD 和TXD;外部中断输入引脚 INT0和INT1 ;外部计数输入引脚 T0 和 T1;外部数据存储器写和读控制信号 WR 和RD 。
由图可见,80C51 单片机主要由以下几部分组成:
(1)CPU 系统
- 8 位 CPU,含布尔处理器;
- 时钟电路;
- 总线控制逻辑。
(2)存储器系统
- 4 K 字节的程序存储器(ROM/EPROM/Flash,可外扩至 64 K);
- 128 字节的数据存储器(RAM,可再外扩 64 K);
- 特殊功能寄存器 SFR。
(3)I/O 口和其它功能单元
- 4 个并行 I/O 口;
- 2 个 16 位定时/计数器;
- 1 个全双工异步串行口;
- 中断系统(5 个中断源、2 个优先级)。
2.2.2 80C51 的应用模式
一、总线型单片机应用模式
通常的微处理器芯片都设有单独的地址总线、数据总线和控制总线。但单片机由于芯片引脚数量的限制,数据总线与地址总线经常采用复用方式,且许多引脚还要与并行 I/O 口引脚兼用。总线型单片机典型产品如 80C31/ AT89C51 等。
1.总线型应用的“三总线”模式
常用的总线型单片机有 40 个引脚,除电源、晶振输入引脚和仅能作通用并行 I/O 的 P1 口外,其余引脚大多是为应用系统总线扩展而设置的。利用这些引脚可以方便地将单片机配置成典型的“三总线”结构,如图 2.2 所示。
这时应用系统在以下方面可以得到扩展:
- 芯片内部没有程序存储器(如 80C31)或芯片内程序存储器容量不够用时(如 80C51);
- 系统需要扩展并行总线外围器件(如扩展并行可编程接口 81C55 或ADC0809 等)。
这种总线型应用在扩展外围器件较多时接线复杂,系统可靠性会降低。所以系统设计时,应尽量减少扩展器件的数量。
2.非总线型应用的“多 I/O”模式
总线型单片机也可以采用非总线型的“多 I/O”应用模式,这时单片机的扩展功能都不使用,因此可以利用的通用 I/O 口线的数量较多,如图 2.3 所示。由图可见,该模式极适于具有大量 I/O 口线需求的应用系统。
二、非总线型单片机应用模式
非总线型单片机已经将用于外部总线扩展的 I/O 接口线和控制功能线去掉,从而使单片机的引脚数减少,体积减小。对于不需进行并行外围扩展、装置的体积要求苛刻且程序量不大的系统极其适合。非总线型单片机典型产品如AT89C2051/AT89C4051。
2.3 80C51 典型产品资源配置与引脚封装
2.3.1 80C51 典型产品资源配置
80C51 系列单片机基本组成虽然相同,但不同型号的产品在某些方面仍会有一些差异。典型的单片机产品资源配置如表 2.1 所示。
由表 2.1 可见:
(1)增强型与基本型在以下几点有所不同:(我们一般用的都是STC89C52RC单片机,是增强型单片机)
- 片内 ROM 从 4K 字节增加到 8K 字节;
- 片内 RAM 从 128 字节增加到 256 字节;
- 定时/计数器从 2 个增加到 3 个;
- 中断源由 5 个增加到 6 个。
(2)片内 ROM 的配置形式有以下几种:
- 无 ROM(即 ROMLess)型,应用时要在片外扩展程序存储器;
- 掩模 ROM(即 MaskROM)型,用户程序由芯片生产厂写入;
- EPROM 型,用户程序通过写入装置写入,通过紫外线照射擦除;
- FlashROM 型,用户程序可以电写入或擦除(当前常用方式)。
另外,有些单片机产品还提供 OTPROM 型(一次性编程写入 ROM)供应状态。通常OTPROM 型单片机较 Flash 型(属于 MTPROM,即多次编程 ROM) 单片机具有更高的环境适应性和可靠性,在环境条件较差时,应优先选择。
2.3.2 80C51 的引脚封装
80C51 系列单片机采用双列直插式(DIP)、QFP44(Quad Flat Pack)和 LCC(Leaded Chip Carrier)形式引脚封装。这里仅介绍常用的总线型 DIP40 引脚封装和非总线型 DIP20 引脚封装,如图 2.4 所示。
一、总线型 DIP40 引脚封装
(1)电源及时钟引脚(4 个)
- VCC:电源接入引脚;
- VSS:接地引脚;
- XTAL1:晶体振荡器接入的一个引脚(采用外部振荡器时,此引脚接地);
- XTAL2:晶体振荡器接入的另一个引脚(采用外部振荡器时,此引脚作为外部振荡信号的输入端)。
(2)控制线引脚(4 个)
- RST/VPD:复位信号输入引脚/备用电源输入引脚;
- ALE/PROG:地址锁存允许信号输出引脚/编程脉冲输入引脚;
- EA /VPP:内外存储器选择引脚/片内 EPROM(或 FlashROM)编程电压输入引脚;
- PSEN :外部程序存储器选通信号输出引脚。
(3)并行 I/O 引脚(32 个,分成 4 个 8 位口)
- P0.0~P0.7:一般 I/O 口引脚或数据/低位地址总线复用引脚;
- P1.0~P1.7:一般 I/O 口引脚;
- P2.0~P2.7:一般 I/O 口引脚或高位地址总线引脚;
- P3.0~P3.7:一般 I/O 口引脚或第二功能引脚。
二、非总线型 DIP20 封装引脚(以 89C2051 为例)
(1)电源及时钟引脚(4 个)
- VCC:电源接入引脚;
- GND:接地引脚;
- XTAL1:晶体振荡器接入的一个引脚(采用外部振荡器时,此引脚接地);
- XTAL2:晶体振荡器接入的另一个引脚(采用外部振荡器时,此引脚作为外部振荡信号的输入端)。
(2)控制线引脚(1 个)
- RST:复位信号输入引脚。
(3)并行 I/O 引脚(15 个)
- P1.0~P1.7:一般 I/O 口引脚(P1.0 和 P1.1 兼作模拟信号输入引脚 AIN0 和AIN1);
- P3.0~P3.5、P3.7:一般 I/O 口引脚或第二功能引脚。
2.4 80C51 的内部结构
2.4.1 80C51 的内部结构
80C51 单片机由微处理器(含运算器和控制器)、存储器、I/O 接口以及特殊功能寄存器 SFR(图中用加黑方框和相应的标识符表示)等构成,如图 2.5所示。
注:此图中未画出增强型单片机相关部件;加黑框内是可以寻址的 SFR(21 字节)。
一、80C51 的微处理器
作为 80C51 单片机核心部分的微处理器是一个 8 位的高性能中央处理器(CPU)。它的作用是读入并分析每条指令,根据各指令的功能控制单片机的各功能部件执行指定的运算或操作。它主要由以下两部分构成:
1.运算器
运算器由算术/逻辑运算单元 ALU、累加器 ACC、寄存器 B、暂存寄存器、程序状态字寄存器 PSW组成。它所完成的任务是实现算术与逻辑运算、位变量处理和数据传送等操作。
ALU 功能极强,既可实现 8 位数据的加、减、乘、除算术运算和与、或、异或、循环、求补等逻辑运算,同时还具有一般微处理器所不具备的位处理功能。
累加器 ACC 用于向 ALU 提供操作数和存放运算的结果。在运算时将一个操作数经暂存器送至 ALU,与另一个来自暂存器的操作数在 ALU 中进行运算, 运算后的结果又送回累加器 ACC。同一般微机一样,80C51 单片机在结构上也是以累加器 ACC 为中心,大部分指令的执行都要通过累加器 ACC 进行。但为了提高实时性,80C51 的一些指令的操作可以不经过累加器 ACC,如内部 RAM 单元到寄存器的传送和一些逻辑操作。
寄存器 B 在乘、除运算时用来存放一个操作数,也用来存放运算后的一部分结果。在不进行乘、除运算时,可以作为通用的寄存器使用。
暂存寄存器用来暂时存放数据总线或其它寄存器送来的操作数。它作为ALU 的数据输入源,向 ALU 提供操作数。
程序状态字寄存器 PSW 是状态标志寄存器,它用来保存 ALU 运算结果的特征(如:结果是否为 0,是否有溢出等)和处理器状态。这些特征和状态可以作为控制程序转移的条件,供程序判别和查询。
2.控制器
同一般微处理器的控制器一样,80C51 的控制器也由指令寄存器 IR、指令译码器 ID、定时及控制逻辑电路和程序计数器 PC 等组成。
程序计数器 PC 是一个 16 位的计数器(注意:PC 不属于 SFR)。它总是存放着下一个要取指令的 16 位存储单元地址。也就是说,CPU 总是把 PC 的内容作为地址,从内存中取出指令码或含在指令中的操作数。因此,每当取完一个字节后,PC 的内容自动加 1,为取下一个字节做好准备。只有在执行转移、子程序调用指令和中断响应时例外,那时 PC 的内容不再加 1,而是由指令或中断响应过程自动给 PC 置入新的地址。单片机开机或复位时,PC 自动清 0,即装入地址 0000H,这就保证了单片机开机或复位后,程序从 0000H 地址开始执行。
指令寄存器 IR 保存当前正在执行的一条指令。执行一条指令,先要把它从程序存储器取到指令寄存器中。指令内容含操作码和地址码两部分,操作码送往指令译码器 ID,并形成相应指令的微操作信号。地址码送往操作数地址形成电路以便形成实际的操作数地址。
定时与控制是微处理器的核心部件,它的任务是控制取指令、执行指令、存取操作数或运算结果等操作,向其它部件发出各种微操作控制信号,协调各部件的工作。80C51 单片机片内设有振荡电路,只需外接石英晶体和频率微调电容就可产生内部时钟信号。
二、80C51 的片内存储器
80C51 单片机的片内存储器与一般微机存储器的配置不同。一般微机的ROM 和 RAM 安排在同一空间的不同范围(称为普林斯顿结构)。而 80C51 单片机的存储器在物理上设计成程序存储器和数据存储器两个独立的空间(称为哈佛结构)。
基本型单片机片内程序存储器容量为 4 KB,地址范围是 0000H--0FFFH。增强型单片机片内程序存储器容量为 8 KB,地址范围是 0000H--1FFFH。
基本型单片机片内数据存储器均为 128 字节,地址范围是 00H--7FH,用于存放运算的中间结果、暂存数据和数据缓冲。这 128 字节的低 32 个单元用作工作寄存器,32 个单元分成 4 组,每组 8 个单元。在 20H~2FH 共 16 个单元是位寻址区,位地址的范围是 00H--7FH。然后是 80 个单元的通用数据缓冲区。
增强型单片机片内数据存储器为 256 字节,地址范围是 00H~FFH。低 128 字节的配置情况与基本型单片机相同。高 128 字节为一般 RAM,仅能采用寄存器间接寻址方式访问(而与该地址范围重叠的 SFR 空间采用直接寻址方式访问)。
三、80C51 的 I/O 口及功能单元
80C51 单片机有 4 个 8 位的并行口,即 P0~P3。它们均为双向口,既可作为输入,又可作为输出。每个口各有 8 条 I/O 线。
80C51 单片机还有一个全双工的串行口(利用 P3 口的两个引脚 P3.0 和P3.1)。
80C51 单片机内部集成有 2 个 16 位的定时/计数器(增强型单片机有 3 个定时/计数器)。
80C51 单片机还具有一套完善的中断系统。
四、80C51 的特殊功能寄存器(SFR)
80C51 单片机内部有 SP、DPTR(可分成 DPH、DPL 2 个 8 位寄存器)、PCON、IE、IP 等 21 个特殊功能寄存器单元,它们同内部 RAM 的 128 个字节统一编址,地址范围是 80H~FFH。这些 SFR 只用到了 80H~FFH 中的 21 个字节单元,且这些单元是离散分布的。
增强型单片机的 SFR 有 26 个字节单元,所增加的 5 个单元均与定时/计数器 2 相关。
2.4.2 80C51 的时钟与时序
单片机的工作过程是:取一条指令、译码、进行微操作,再取一条指令、译码、进行微操作,这样自动地、一步一步地由微操作依序完成相应指令规定的功能。各指令的微操作在时间上有严格的次序,这种微操作的时间次序称作时序。单片机的时钟信号用来为单片机芯片内部的各种微操作提供时间基准。
一、80C51 的时钟产生方式
80C51 单片机的时钟信号通常有两种产生方式:一是内部时钟方式,二是外部时钟方式。内部时钟方式如图 2.6(a)所示。在 80C51 单片机内部有一振荡电路,只要在单片机的 XTAL1 和 XTAL2 引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。图中电容器 C1 和 C2 的作用是稳定频率和快速起振,电容值在 5--30 pF,典型值为 30 pF。晶振 CYS 的振荡频率范围为 1.2--12 MHz,典型值为 12 MHz 和 6 MHz。
外部时钟方式是把外部已有的时钟信号引入到单片机内,如图 2.6(b)所示。此方式常用于多片 80C51 单片机同时工作,以便于各单片机同步。一般要求外部信号高电平的持续时间大于 20 ns,且为频率低于 12 MHz 的方波。对于采用 CHMOS 工艺的单片机,外部时钟要由 XTAL1 端引入,而 XTAL2 端引脚应悬空。
二、80C51 的时钟信号
晶振周期(或外部时钟信号周期)为最小的时序单位。如图 2.7 所示。
晶振信号经分频器后形成两相错开的时钟信号 P1 和 P2。时钟信号的周期也称为 S 状态,它是晶荡周期的两倍。即一个时钟周期包含 2 个晶振周期。在每个时钟周期的前半周期,相位 1(P1)信号有效,在每个时钟周期的后半周期,相位 2(P2)信号有效。每个时钟周期有两个节拍(相)P1 和 P2,CPU 以两相时钟 P1 和 P2 为基本节拍指挥各个部件谐调地工作。
晶振信号 12 分频后形成机器周期。一个机器周期包含 12 个晶荡周期或 6个时钟周期。因此,每个机器周期的 12 个振荡脉冲可以表示为 S1P1,S1P2,S2P1,S2P2,…,S6P2。
指令的执行时间称作指令周期。80C51 单片机的指令按执行时间可以分为三类:单周期指令、双周期指令和四周期指令(四周期指令只有乘、除两条指令)。
晶振周期、时钟周期、机器周期和指令周期均是单片机时序单位。晶振周期和机器周期是单片机内计算其它时间值(如波特率、定时器的定时时间等) 的基本时序单位。如晶振频率为 12MHz,则机器周期为 1 μs,指令周期为 1~ 4 μs。
三、80C51 的典型时序
1.单周期指令时序
单字节指令时,时序如图 2.8(a)所示。在 S1P2 把指令操作码读入指令寄存器,并开始执行指令。但在 S4P2 读的下一指令的操作码要丢弃,且 PC 不加 1。
双字节指令时,时序如图 2.8(b)所示。在 S1P2 把指令操作码读入指令寄存器,并开始执行指令。在 S4P2 再读入指令的第二字节。
单字节指令和双字节指令均在 S6P2 结束操作。
2.双周期指令时序
对于单字节指令,在两个机器周期之内要进行 4 次读操作。只是后 3 次读操作无效。如图 2.9 所示。
由图中可以看到,每个机器周期中 ALE 信号有效两次,具有稳定的频率, 可以将其作为外部设备的时钟信号。
应注意的是,在对片外 RAM 进行读/写时,ALE 信号会出现非周期现象, 如图 2.10 所示。在第二机器周期无读操作码的操作,而是进行外部数据存储器的寻址和数据选通,所以在 S1P2~S2P1 间无 ALE 信号。
2.4.3 80C51 的复位
复位是使单片机或系统中的其它部件处于某种确定的初始状态。单片机的工作就是从复位开始的。
一、复位电路
当在 80C51 单片机的 RST 引脚引入高电平并保持 2 个机器周期时,单片机内部就执行复位操作(如果 RST 引脚持续保持高电平,单片机就处于循环复位状态)。
实际应用中,复位操作有两种基本形式:一种是上电复位,另一种是上电与按键均有效的复位。如图 2.11 所示。
上电复位要求接通电源后,单片机自动实现复位操作。常用的开机复位电路如图 2.11(a)所示。开机瞬间 RST 引脚获得高电平,随着电容 C1 的充电,RST 引脚的高电平将逐渐下降。RST 引脚的高电平只要能保持足够的时间(2 个机器周期),单片机就可以进行复位操作。该电路典型的电阻和电容参数为:晶振频率为 12 MHz 时,C1 为 10 μF,R1 为 8.2 kΩ;晶振频率为 6 MHz 时,C1为 22 μF,R1 为 1 kΩ。
开机与按键均有效的复位电路如图 2.11(b)所示。开机复位原理与图 2.11(a)相同,另外,在单片机运行期间,还可以利用按键完成复位操作。晶振频率为 6MHz 时,R2 为 200 Ω。
二、单片机复位后的状态
单片机的复位操作使单片机进入初始化状态。初始化后,程序计数器PC=0000H,所以程序从 0000H 地址单元开始执行。单片机启动后,片内 RAM为随机值,运行中的复位操作不改变片内 RAM 的内容。
特殊功能寄存器复位后的状态是确定的。P0~P3 为 FFH,SP 为 07H,SBUF 不定,IP、IE 和 PCON 的有效位为 0,其余的特殊功能寄存器的状态均为 00H。相应的意义为:
- P0~P3=FFH,相当于各接口锁存器已写入 1,此时不但可用于输出,也可以用于输入;
- SP=07H,堆栈指针指向片内 RAM 的 07H 单元(第一个入栈内容将写入 08H 单元);
- IP、IE 和 PCON 的有效位为 0,各中断源处于低优先级且均被关断,串行通信的波特率不加倍;
- PSW=00H,当前工作寄存器为 0 组。
2.5 80C51 的存储器组织
存储器是组成计算机的主要部件,其功能是存储信息(程序和数据)。存储器可以分成两大类,一类是随机存取存储器(RAM),另一类是只读存储器(ROM)。
对于 RAM,CPU 在运行时能随时进行数据的写入和读出,但在关闭电源时,其所存储的信息将丢失。所以,它用来存放暂时性的输入输出数据、运算的中间结果或用作堆栈。
ROM 是一种写入信息后不易改写的存储器。断电后,ROM 中的信息保留不变。所以,ROM 用来存放固定的程序或数据,如系统监控程序、常数表格等。
2.5.1 80C51 的程序存储器配置
80C51 单片机的程序计数器PC是16位的计数器,所以能寻址64KB的程序存储器地址范围,允许用户程序调用或转向 64KB 的任何存储单元。
MCS-51 系列的 80C51 在芯片内部有 4KB 的掩模 ROM,87C51 在芯片内部有 4KB 的 EPROM,而 80C31 在芯片内部没有程序存储器,应用时要在单片机外部配置一定容量的 EPROM。
80C51 的程序存储器配置如图 2.12 所示。
2.5.2 80C51 的数据存储器配置
80C51 单片机的数据存储器分为片外 RAM 和片内 RAM 两大部分,如图2.13 所示。
80C51 片内 RAM 共有 128 字节,分成工作寄存器区、位寻址区、通用 RAM区三部分。
基本型单片机片内 RAM 地址范围是 00H~7FH。
增强型单片机(如 80C52)片内除地址范围在 00H~7FH 的 128 字节 RAM外,又增加了 80H--FFH 的高 128 字节的 RAM。增加的这一部分 RAM 仅能采用间接寻址方式访问(以与特殊功能寄存器 SFR 的访问相区别)。
片外 RAM 地址空间为 64KB,地址范围是 0000H~FFFFH。
与程序存储器地址空间不同的是,片外 RAM 地址空间与片内 RAM 地址空间在地址的低端 0000H~007FH 是重叠的。这就需要采用不同的寻址方式加以区分。访问片外 RAM 时使用专门的指令 MOVX,这时读( RD )或写( WR ) 信号有效;而访问片内 RAM 使用 MOV 指令,无读写信号产生。另外,与片内 RAM 不同,片外 RAM 不能进行堆栈操作。
在 80C51 单片机中,尽管片内 RAM 的容量不大,但它的功能多,使用灵活。
一、工作寄存器区(采用寄存器寻址)
80C51 单片机片内 RAM 的低端 32 个字节分成 4 个工作寄存器组,每组占8 个单元。
- 寄存器 0 组 :地址 00H~07H;
- 寄存器 1 组 :地址 08H~0FH;
- 寄存器 2 组 :地址 10H~17H;
- 寄存器 3 组 :地址 18H~1FH。
每个工作寄存器组都有 8 个寄存器,分别称为 R0,R1,…,R7。程序运行时,只能有一个工作寄存器组作为当前工作寄存器组。
当前工作寄存器组的选择由特殊功能寄存器中的程序状态字寄存器 PSW 的RS1、RS0 来决定。可以对这两位进行编程,以选择不同的工作寄存器组。工作寄存器组与 RS1、RS0 的关系及地址如表 2.2 所示。
当前工作寄存器组从某一工作寄存器组换至另一工作寄存器组时,原来工作寄存器组的各寄存器的内容将被屏蔽保护起来。利用这一特性可以方便地完成快速现场保护任务。
二、位寻址区
内部 RAM 的 20H 至 2FH 共 16 个字节是位寻址区。其 128 位的地址范围是00H~7FH。对被寻址的位可进行位操作。人们常将程序状态标志和位控制变量设在位寻址区内。该区未用的单元也可以作为通用 RAM 使用。位地址与字节地址的关系如表 2.3 所示。
三、通用 RAM 区
位寻址区之后的 30H 至 7FH 共 80 个字节为通用 RAM 区。这些单元可以作为数据缓冲器使用。这一区域的操作指令非常丰富,数据处理方便灵活。
在实际应用中,常需在 RAM 区设置堆栈。80C51 的堆栈一般设在30H~7FH的范围内。栈顶的位置由 SP 寄存器指示。复位时 SP 的初值为 07H,在系统初始化时可以重新设置。
2.5.3 80C51 的特殊功能寄存器
在 80C51 单片机中设置了与片内 RAM 统一编址的 21 个特殊功能寄存器(SFR),它们离散地分布在 80H~FFH 的地址空间中。字节地址能被 8 整除的(即十六进制的地址码尾数为 0 或 8 的)单元是具有位地址的寄存器。在 SFR 地址空间中,有效位地址共有 83 个,如表 2.4 所示。访问 SFR 只允许使用直接寻址方式。
特殊功能寄存器(SFR)每一位的定义和作用与单片机各部件直接相关。这里先概要介绍一下,详细用法在相应的章节中进行说明。
一、与运算器相关的寄存器(3 个)
- 累加器 ACC,8 位。它是 80C51 单片机中最繁忙的寄存器,用于向 ALU提供操作数,许多运算的结果也存放在累加器中;
- 寄存器 B,8 位。主要用于乘、除法运算。也可以作为 RAM 的一个单元使用;
- 程序状态字寄存器 PSW,8 位。其各位含义为
CY:进位、借位标志。有进位、借位时 CY=1,否则 CY=0;
AC:辅助进位、借位标志(高半字节与低半字节间的进位或借位);
F0:用户标志位,由用户自己定义;
RS1、RS0:当前工作寄存器组选择位;
OV:溢出标志位。有溢出时 OV=1,否则 OV=0;
P:奇偶标志位。存于 ACC 中的运算结果有奇数个 1 时 P=1,否则 P=0。
二、指针类寄存器(3 个)
- SP 堆栈指针,8 位。它总是指向栈顶。80C51 单片机的堆栈常设在
30H~7FH 这一段 RAM 中。堆栈操作遵循“后进先出”的原则,入栈操作时,SP 先加 1,数据再压入 SP 指向的单元。出栈操作时,先将 SP 指向单元的数据弹出,然后 SP 再减 1,这时 SP 指向的单元是新的栈顶。由此可见,80C51 单片机的堆栈区是向地址增大的方向生成的(这与常用的 80X86 微机不同);
- 数据指针 DPTR,16 位。用来存放 16 位的地址。它由两个 8 位寄存器
DPH 和 DPL 组成,可对片外 64 KB 范围的 RAM 或 ROM 数据进行间接寻址或变址寻址操作。
三、与口相关的寄存器(7 个)
- 并行 I/O 口 P0、P1、P2、P3,均为 8 位。通过对这 4 个寄存器的读/写操作,可以实现数据从相应口的输入/输出;
- 串行口数据缓冲器 SBUF;
- 串行口控制寄存器 SCON;
- 串行通信波特率倍增寄存器 PCON(一些位还与电源控制相关,所以又称为电源控制寄存器)。
四、与中断相关的寄存器(2 个)
- 中断允许控制寄存器 IE;
- 中断优先级控制寄存器 IP。
五、与定时/计数器相关的寄存器(6 个)
- 定时/计数器 T0 的两个 8 位计数初值寄存器 TH0、TL0,它们可以构成16 位的计数器,TH0 存放高 8 位,TL0 存放低 8 位;
- 定时/计数器 T1 的两个 8 位计数初值寄存器 TH1、TL1,它们可以构成16 位的计数器,TH1 存放高 8 位,TL1 存放低 8 位;
- 定时/计数器的工作方式寄存器 TMOD;
- 定时/计数器的控制寄存器 TCON。
2.6 80C51 的并行口结构与操作
80C51 单片机有 4 个 8 位的并行 I/O 口 P0、P1、P2 和 P3。各口均由口锁存器、输出驱动器和输入缓冲器组成。各口除可以作为字节输入/输出外,它们的每一条口线也可以单独地用作位输入/输出线。各口编址于特殊功能寄存器中,既有字节地址又有位地址。对口锁存器的读写,就可以实现口的输入/输出操作。
虽然各口的功能不同,且结构也存在一些差异,但每个口的位结构是相同的。所以,口结构的介绍均以其位结构进行说明。
2.6.1 P0 口、P2 口的结构
当不需要外部程序存储器和数据存储器扩展时(如 80C51/87C51 的单片应用),P0 口、P2 口可用作通用的输入/输出口。
当需要外部程序存储器和数据存储器扩展时(如 80C31 的应用),P0 口作为分时复用的低 8 位地址/数据总线,P2 口作为高 8 位地址总线。
一、P0 口的结构
P0 口由一个输出锁存器、一个转换开关 MUX、两个三态输入缓冲器、输出驱动电路和一个与门及一个反相器组成,如图 2.14 所示。图中控制信号 C 的状态决定转换开关的位置。当 C=0 时,开关处于图中所示位置;当 C=1 时,开关拨向反相器输出端位置。
1.P0 用作通用 I/O 口
当系统不进行片外 ROM 扩展(此时EA =1),也不进行片外 RAM 扩展(内部 RAM 传送使用“MOV”类指令)时,P0 用作通用 I/O 口。在这种情况下, 单片机硬件自动使控制 C=0,MUX 开关接向锁存器的反相输出端。另外,与门输出的“0”使输出驱动器的上拉场效应管 T1 处于截止状态。因此,输出驱动级工作在需外接上拉电阻的漏极开路方式。
作输出口时,CPU 执行口的输出指令,内部数据总线上的数据在“写锁存器”信号的作用下由 D 端进入锁存器,经锁存器的反相端送至场效应管 T2, 再经 T2 反相,在 P0.X 引脚出现的数据正好是内部总线的数据。
作输入口时,数据可以读自口的锁存器,也可以读自口的引脚。这要根据输入操作采用的是“读锁存器”指令还是“读引脚”指令来决定。
CPU 在执行“读—修改—写”类输入指令时(如:ANL P0,A),内部产生的“读锁存器”操作信号使锁存器 Q 端数据进入内部数据总线,在与累加器 A 进行逻辑运算之后,结果又送回 P0 的口锁存器并出现在引脚。读口锁存器可以避免因外部电路原因使原口引脚的状态发生变化造成的误读(例如,用一根口线驱动一个晶体管的基极,在晶体管的射极接地的情况下,当向口线写
“1”时,晶体管导通,并把引脚的电平拉低到 0.7 V。这时若从引脚读数据,会
把状态为 1 的数据误读为“0”。若从锁存器读,则不会读错)。
CPU 在执行“MOV”类输入指令时(如:MOV A,P0),内部产生的操作信号是“读引脚”。这时必须注意,在执行该类输入指令前要先把锁存器写入“1”,目的是使场效应管 T2 截止,从而使引脚处于悬浮状态,可以作为高阻抗输入。否则,在作为输入方式之前曾向锁存器输出过“0”,T2 导通会使引脚钳位在“0”电平,使输入高电平“1”无法读入。所以,P0 口在作为通用 I/O 口时,属于准双向口。
2.P0 用作地址/数据总线
当系统进行片外 ROM 扩展(此时EA =0)或进行片外 RAM 扩展(外部RAM 传送使用“MOVX @DPTR”类指令)时,P0 用作地址/数据总线。在这种情况下,单片机内硬件自动使 C=1,MUX 开关接向反相器的输出端,这时与门的输出由地址/数据线的状态决定。
CPU 在执行输出指令时,低 8 位地址信息和数据信息分时地出现在地址/ 数据总线上。若地址/数据总线的状态为“1”,则场效应管 T1 导通、T2 截止,引脚状态为“1”;若地址/数据总线的状态为“0”,则场效应管 T1 截止、T2 导通,引脚状态为“0”。可见 P0.X 引脚的状态正好与地址/数据线的信息相同。
CPU 在执行输入指令时,首先低 8 位地址信息出现在地址/数据总线上,P0.X 引脚的状态与地址/数据总线的地址信息相同。然后,CPU 自动地使转换开关 MUX 拨向锁存器,并向 P0 口写入 FFH,同时“读引脚”信号有效,数据经缓冲器进入内部数据总线。
由此可见,P0 口作为地址/数据总线使用时是一个真正的双向口。
二、P2 口的结构
P2 口由一个输出锁存器、一个转换开关 MUX、两个三态输入缓冲器、输出驱动电路和一个反相器组成。图中控制信号 C 的状态决定转换开关的位置。当 C=0 时,开关处于图中所示位置;当 C=1 时,开关拨向地址线位置。P2 口的位结构如图 2.15 所示。
由图可见,P2 口的输出驱动电路与 P0 口不同,其内部设有上拉电阻(由两个场效应管并联构成)。
1.P2 用作通用 I/O 口
当不需要在单片机芯片外部扩展程序存储器(对于 80C51/87C51,EA =1),只需扩展 256 字节的片外 RAM 时(访问片外 RAM 利用“MOVX @Ri”类指令来实现),只用到了地址线的低 8 位,P2 口不受该类指令的影响,仍可以作为通用 I/O 口使用。
CPU 在执行输出指令时,内部数据总线的数据在“写锁存器”信号的作用下由 D 端进入锁存器,经反相器反相后送至场效应管 T2,再经 T2 反相,在 P2.X引脚出现的数据正好是内部总线的数据。
P2 口用作输入时,数据可以读自口的锁存器,也可以读自口的引脚。这要根据输入操作采用的是“读锁存器”指令还是“读引脚”指令来决定。
CPU 在执行“读—修改—写”类输入指令时(如:ANL P2,A),内部产生的“读锁存器”操作信号使锁存器 Q 端数据进入内部数据总线,在与累加
器 A 进行逻辑运算之后,结果又送回 P2 的口锁存器并出现在引脚。
CPU 在执行“MOV”类输入指令时(如:MOV A,P2),内部产生的操作信号是“读引脚”。应在执行输入指令前把锁存器写入“1”,目的是使场效应管 T2 截止,从而使引脚处于高阻抗输入状态。
所以,P2 口在作为通用 I/O 口时,属于准双向口。
2.P2 用作地址总线
当需要在单片机芯片外部扩展程序存储器( EA =0)或扩展的 RAM 容量超过 256 字节时(读/写片外 RAM 或 I/O 采用“MOVX @DPTR”类指令),单片机内硬件自动使控制 C=1,MUX 开关接向地址线,这时 P2.X 引脚的状态正好与地址线输出的信息相同。
2.6.2 P1 口、P3 口的结构
P1 口是 80C51 惟一的单功能口,仅能用作通用的数据输入/输出口。
P3 口是双功能口,除具有数据输入/输出功能外,每一口线还具有特殊的第二功能。
一、P1 口的结构
P1 口的位结构如图 2.16 所示。
由图可见,P1 口由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成。其输出驱动电路与 P2 口相同,内部设有上拉电阻。
P1 口是通用的准双向 I/O 口。输出高电平时,能向外提供拉电流负载,不必再接上拉电阻。当口用作输入时,须向口锁存器写入 1。
二、P3 口的结构
P3 口的位结构如图 2.17 所示。P3 口由一个输出锁存器、三个输入缓冲器(其中两个为三态)、输出驱动电路和一个与非门组成。其输出驱动电路与 P2口和 P1 口相同,内部设有上拉电阻。
1.P3 用作第一功能的通用 I/O 口
当 CPU 对 P3 口进行字节或位寻址时(多数应用场合是把几条口线设为第二功能,另外几条口线设为第一功能,这时宜采用位寻址方式),单片机内部的硬件自动将第二功能输出线的 W 置 1。这时,对应的口线为通用 I/O 口方式。
作为输出时,锁存器的状态(Q 端)与输出引脚的状态相同;作为输入时, 也要先向口锁存器写入 1,使引脚处于高阻输入状态。输入的数据在“读引脚” 信号的作用下,进入内部数据总线。所以,P3 口在作为通用 I/O 口时,也属于准双向口。
2.P3 用作第二功能使用
当 CPU 不对 P3 口进行字节或位寻址时,单片机内部硬件自动将口锁存器的 Q 端置 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 (片外数据存储器“写”选通控制输出);
- P3.7: RD (片外数据存储器“读”选通控制输出)。
P3 口相应的口线处于第二功能,应满足的条件是:
(1)串行 I/O 口处于运行状态(RXD,TXD);
(2)外部中断已经打开( INT0 、 INT1 );
(3)定时器/计数器处于外部计数状态(T0、T1);
(4)执行读/写外部 RAM 的指令( RD 、 WR )。
作为输出功能的口线(如 TXD),由于该位的锁存器已自动置 1,与非门对第二功能输出是畅通的,即引脚的状态与第二功能输出是相同的。
作为输入功能的口线(如 RXD),由于此时该位的锁存器和第二功能输出线均为 1,场效应管 T 截止,该口引脚处于高阻输入状态。引脚信号经输入缓冲器(非三态门)进入单片机内部的第二功能输入线。
2.6.3 并行口的负载能力
P0、P1、P2、P3 口的输入和输出电平与 CMOS 电平和 TTL 电平均兼容。
P0 口的每一位口线可以驱动 8 个 LSTTL 负载。在作为通用 I/O 口时,由于输出驱动电路是开漏方式,由集电极开路(OC 门)电路或漏极开路电路驱动时需外接上拉电阻;当作为地址/数据总线使用时,接口线输出不是开漏的, 无须外接上拉电阻。
P1、P2、P3 口的每一位能驱动 4 个 LSTTL 负载。它们的输出驱动电路设有内部上拉电阻,所以可以方便地由集电极开路(OC 门)电路或漏极开路电路所驱动,而无须外接上拉电阻。
由于单片机口线仅能提供几毫安的电流,当作为输出驱动一般晶体管的基极时,应在口与晶体管的基极之间串接限流电阻。
本 章 小 结
MCS-51 是 Intel 公司生产的一个单片机系列名称。其它厂商以 8051 为基核开发出的 CHMOS 工艺单片机产品统称为 80C51 系列。80C51 单片机在功能上分为基本型和增强型,在制造上采用 CHMOS 工艺。在片内程序存储器的配置上有掩模 ROM、EPROM 和 Flash、无片内程序存储器等形式。
80C51 单片机由微处理器、存储器、I/O 口以及特殊功能寄存器 SFR 构成。
80C51 单片机的时钟信号有内部时钟方式和外部时钟方式两种。内部的各种微操作都以晶振周期为时序基准。晶振信号二分频后形成两相错开的时钟信号 P1 和 P2,十二分频后形成机器周期。一个机器周期包含 12 个晶振周期(或6 个时钟周期)。指令的执行时间称作指令周期。
80C51 单片机的存储器在物理上设计成程序存储器和数据存储器两个独立的空间。片内程序存储器容量为 4 KB,片内数据存储器为 128 字节。
80C51 单片机有 4 个 8 位的并行 I/O 口:P0 口、P1 口、P2 口和 P3 口。各口均由接口锁存器、输出驱动器和输入缓冲器组成。P1 口是惟一的单功能口, 仅能用作通用的数据输入/输出口。P3 口是双功能口,除具有数据输入/输出功能外,每一条接口线还具有不同的第二功能,如 P3.0 是串行输入口线,P3.1 是串行输出口线。在需要外部程序存储器和数据存储器扩展时,P0 口作为分时复用的低 8 位地址/数据总线,P2 口作为高 8 位地址总线。
单片机的复位操作使单片机进入初始化状态。复位后,PC 内容为 0000H,P0 口~P3 口内容为 FFH,SP 内容为 07H,SBUF 内容不定,IP、IE 和 PCON的有效位为 0,其余的特殊功能寄存器的状态均为 00H。
思考题及习题
1.80C51 单片机在功能上、工艺上、程序存储器的配置上有哪些种类?
2.80C51 单片机存储器的组织采用何种结构?存储器地址空间如何划分?各地址空间的地址范围和容量如何?在使用上有何特点?
3.80C51 单片机的 P0~P3 口在结构上有何不同?在使用上有何特点?
4.如果 80C51 单片机晶振频率为 12MHz,时钟周期、机器周期为多少?
5.80C51 单片机复位后的状态如何?复位方法有几种?
6.80C51 单片机的片内、片外存储器如何选择?
7.80C51 单片机的 PSW 寄存器各位标志的意义如何?
8.80C51 单片机的当前工作寄存器组如何选择?
9.80C51 单片机的控制总线信号有哪些?各信号的作用如何?
10.80C51 单片机的程序存储器低端的几个特殊单元的用途如何?
关注微信公众号:[<font=red>果果小师弟],获取更多精彩内容!