
MCS-51系列单片机产品有8051,8031,8751,80C51,80C31等型号(前三种为CMOS芯片,后两种为CHMOS芯片)。它们的结构基本相同,其主要差别反映在存储器的配置上。8051内部设有4K字节的掩模ROM程序存储器,8031片内没有程序存储器,而8751是将8051片内的ROM换成EPROM。由ATMEL公司生产的C51将EPROM改成了4K的闪速存储器,他们的结构大同小异,本章将对8051单片机的结构作一介绍。
1 MCS-51单片机内部结构
1.1、 MCS-51单片机组成
MCS-51单片机是在一块芯片中集成了CPU,RAM,ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部件。MCS-51单片机内包含下列几个部件:
◆ 一个8位CPU;
◆ 一个片内振荡器及时钟电路;
◆ 4K字节ROM程序存储器;
◆ 128字节RAM数据存储器;
◆ 两个16位定时器/计数器;
◆ 可寻址K外部数据存储器和K外部程序存储器空间的控制电路;
◆ 32条可编程的I/O线(四个8位并行I/O端口);
◆ 一个可编程全双工串行口;
◆ 具有五个中断源、两个优先级嵌套中断结构。
频率基准源 计数器
串 行 串 行
中断 控制 并行 I/O 口 输入 输出
图2-1 8051单片机框图
8051单片机框图如图2-1所示。各功能部件由内部总线联接在一起。
图中4K(4096)字节的ROM存储器部分用EPROM替换就成为8751;图中去掉ROM部分就成为8031的结构图。
1、 CPU
CPU是单片机的核心部件。它由运算器和控制器等部件组成。
⑴ 运算器
运算器的功能是进行算术运算和逻辑运算。可以对半字节(4位)、单字节等数据进行操作。例如能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算和与、或、异或、求补、循环等逻辑操作,操作结果的状态信息送至状态寄存器。
8051运算器还包含有一个布尔处理器,用来处理位操作。它是以进位标志位C为累加器的,可执行置位、复位、取反、等于1转移、等于0转移、等于1转移且清0以及进位标志位与其他可寻址的位之间进行数据传送等位操作。也能使进位标志位与其他可位寻址的位之间进行逻辑与、或操作。
1)程序计数器PC
程序计数器PC用来存放即将要执行的指令地址,共16位,可对K程序存储器直接寻址。执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出。
2)令寄存器
指令寄存器中存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送入指令寄存器,经译码后由定时与控制电路发出相应的控制信号,完成指令功能。
3)定时与控制部件
①时钟电路
8051片内设有一个由反向放大器所构成的振荡电路,XTAL1和 XTAL2分别为振荡电路的输入和输出端,时钟可以由内部方式产生或外部方式产生。内部方式时钟电路如图2-2所示。在XTAL1和 XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶振可以在1.2MHz到12MHz之间选择,电容值在5-30PF之间选择,电容的大小可起频率微调作用。
电容1
晶振
电容2
图 2-2 内部方式时钟电路
外部方式的时钟很少用,若要用时,只要将XTAL1接地,XTAL2接外部振荡器就行。对外部振荡信号无特殊要求,只要保证脉冲宽度,一般采用频率低于12MHz的方波信号。
时钟发生器把振荡频率两分频,产生一个两相时钟信号P1和P2供单片机使用。P1在每一个状态S的前半部分有效,P2在每个状态的后半部分有效。
② 时序
MCS-51典型的指令周期(执行一条指令的时间称为指令周期)为一个机器周期,一个机器周期由六个状态(十二振荡周期)组成。每个状态又被分成两个时相P1和P2。所以,一个机器周期可以依次表示为S1P1,S1P2……,S6P1,S6P2。通常算术逻辑操作在P1时相进行,而内部寄存器传送在P2时相进行。
图2-3给出了8051单片机的取指和执行指令的定时关系。这些内部时钟信号不能从外部观察到,所用XTAL2振荡信号作参考。在图中可看到,低8位地址的锁存信号ALE在每个机器周期中两次有效:一次在S1P2与S2P1期间,另一次在S4P2与S5P1期间。
图2-3 8051时序
对于单周期指令,当操作码被送入指令寄存器时,便从S1P2开始执行指令。如果是双字节单机器周期指令,则在同一机器周期的S4期间读入第二个字节,若是单字节单机器周期指令,则在S4期间仍进行读,但所读的这个字节操作码被忽略,程序计数器也不加1,在S6P2结束时完成指令操作。图2-3的(a)和(b)给出了单字节单机器周期和双字节单机器周期指令的时序。8051指令大部分在一个机器周期完成。乘(MUL)和除(DIV)指令是仅有的需要两个以上机器周期的指令,占用4个机器周期。对于双字节单机器周期指令,通常是在一个机器周期内从程序存储器中读入两个字节,唯有MOVX指令例外。MOVX是访问外部数据存储器的单字节双机器周期指令。在执行MOVX指令期间,外部数据存储器被访问且被选通时跳过两次取指操作。图2-3中(c)给出了一般单字节双机器周期指令的时序。
2、存储器
MCS-51单片机的程序存储器和数据存储器空间是互相的,物理结构也不同。程序存储器为只读存储器(ROM)。数据存储器为随机存取存储器(RAM)。单片机的存储器编址方式采用与工作寄存器、I/O口锁存器统一编址的方式。有关存储器的内容将在下一节中详述。
3、I/O端口
I/O端口又称为I/O接口,也叫做I/O通道或I/O通路,I/O端口是MCS-51单片机对外部实现控制和信息交换的必经之路,I/O端口有串行和并行之分,串行I/O端口一次只能传送一位二进制信息,并行I/O端口一次能传送一组二进制信息。
⑴、并行I/O端口
MCS-51单片机设有四个8位双向I/O端口(P0、P1、P2、P3),每一条I/O线都能地用作输入或输出。P0口为三态双向口,能带8个LSTTL电路。P1、P2、P3口为准双向口(在用作输入线时,口锁存器必须先写入“1”,故称为准双向口),负载能力为4个LSTTL电路。
1)、P0端口功能(P0.0~P0.7、32~39脚)
图2-4 P0口位结构
图2-4 是 P0口位结构,包括1个输出锁存器,2个三态缓冲器,1个输出驱动电路和1个输出控制端。输出驱动电路由一对场效应管组成,其工作状态受输出端的控制,输出控制端由1个与门、1个反相器和1个转换开关MUX组成。对8051/8751来讲P0口既可作为输入输出口,又可作为地址/数据总线使用,
① P0口作地址/数据复用总线使用
若从P0口输出地址或数据信息,此时控制端应为高电平,转换开关MUX将反相器输出端与输出级场效应管V2接通,同时与门开锁,内部总线上的地址或数据信号通过与门去驱动V1管,又通过反相器去驱动V2管,这时内部总线上的地址或数据信号就传送到P0口的引脚上。工作时低8位地址与数据线分时使用P0口。低8位地址由ALE信号的负跳变使它锁存到外部地址锁存器中,而高8位地址由P2口输出(P0口和P2口的地址/数据总线功能,请阅第八章MCS-51扩展技术)。
② P0口作通用I/O端口使用
对于有内部ROM的单片机,PO口也可以作通用I/O,此时控制端为低电平,转换开关把输出级与锁存器的Q端接通,同时因与门输出为低电平,输出级V1管处于截止状态,输出级为漏极开路电路,在驱动NMOS电路时应外接上拉电阻;作输入口用时,应先将锁存器写“1”,这时输出级两个场效应管均截止,可作高阻抗输入,通过三态输入缓冲器读取引脚信号,从而完成输入操作。
③ PO口线上的“读一修改一写”功能
图2-4上面一个三态缓冲器是为了读取锁存器Q端的数据。Q端与引脚的数据是一致的。结构上这样安排是为了满足:“读一修改一写”指令的需要,这类指令的特点时:先读口锁存器,随之可能对读入的数据进行修改再写入到端口上。例如:ANL PO,A;ORL PO,A;XRL PO,A;…。
这类指令同样适合与P1~P3口,其操作是:先将口字节的全部8位数读入,再通过指令修改某些位,然后将新的数据写回到口锁器中。
2)P1口(P1.0~P1.7、1~8脚)准双向口
① P1口作通用I/O端口使用
P1口是一个有内部上拉电阻的准双向口,位结构入图2-5所示,P1口的每一位口线能用作输入线或输出线。作输出时,如将“0”写入锁存器,场效应管导通,输出线为低电平,即输出为“0”。因此在作输入时,必须先将“1”写入口锁存器,使场效应管截止。该口线由内部上拉电阻提拉成高电平,同时也能被外部输入源拉成低电平,即当外部输入“1”时该口线为高电平,而输入“0”时,该口线为低电平。P1口作输入时,可被任何TTL电路和MOS电路驱动,由于具有内部上拉电阻,也可以直接被集电极度开路和漏极开路电路驱动,不必外加上拉电阻。P1口可驱动4个LSTTL门电路。
图 2-5 P1口位结构
② P1口其他功能
P1口在EPROM编程和验证程序时,它输入低8位地址;在8032/8052系列中P1.0
和P1.1是多功能的,P1.0可作定时器/计数器2的外部计数触发输入端T2,P1.1可作定时器/计数器2的外部控制输入端T2EX。
3) P2口(P2.0~P2.7,21~28脚)准双向口
P2口的位结构如图2-6所示,引脚上拉电阻同P1口。在结构上,P2口比P1口多一个输出控制部分。
图 2-6 P2口位结构
① P2口作通用I/O端口使用
当P2口作通用I/O端口使用时,是一个准双向口,此时转换开关MUX倒向左边,输出级与锁存器接通,引脚可接I/O设备,其输入输出操作与P1口完全相同。
② P2口作地址总线口使用
当系统中接有外部存储器时,P2口用于输出高8位地址A15~A8。这时在CPU的控制下,转换开关MUX倒向右边,接通内部地址总线。P2口的口线状态取决于片内输出的地址信息,这些地址信息来源于PCH、DPH等。在外接程序存储器的系统中,由于访问外部存储器的操作连续不断,P2口不断送出地址高8位。例如,在8031构成的系统中,P2口一般只作地址总线口使用,不再作I/O端口直接连外部设备。
在不接外部程序存储器而接有外部数据存储器的系统中,情况有所不同。若外接数据
存储器容量为256B,则可使用MOVX A,@Ri类指令由PO口送出8位地址,P2口上引脚的信号在整个访问外部数据存储器期间也不会改变,故P2口仍可作通用I/O端口使用。若外接存储器容量较大,则需用MOVX A,@DPTR类指令,由PO口和P2口送出16位地址。在读写周期内,P2口引脚上将保持地址信息,但从结构可知,输出地址时,并不要求P2口锁存器锁存“1”,锁存器内容也不会在送地址信息时改变。故访问外部数据存储器周期结束后,P2口锁存器的内容又会重新出现在引脚上。这样,根据访问外部数据存储器的频繁程度,P2口仍可在一定限度内作一般I/O端口使用。P2口可驱动4个LSTTL门电路。
4) P3口(P3.0~P3.7、10~17脚)双功能口
P3口是一个多用途的端口,也是一个准双向口,作为第一功能使用时,其功能同P1口。P3口的位结构如图 2-7。
当作第二功能使用时,每一位功能定义如表2-1所示。P3口的第二功能实际上就是系统具有控制功能的控制线。此时相应的口线锁存器必须为“1”状态,与非门的输出由第二功能输出线的状态确定,从而P3口线的状态取决于第二功能输出线的电平。在P3口的引脚信号输入通道中有两个三态缓冲器,第二功能的输入信号取自第一个缓冲器的输出端,第二个缓冲器仍是第一功能的读引脚信号缓冲器。P3口可驱动4个LSTTL门电路。
图 2-7 P3口位结构
表 2-1 P3口的第二功能
| 端 口 功 能 | 第 二 功 能 |
| P3.0 | RXD---串行输入(数据接收)口 |
| P3.1 | TXD---串行输出(数据发送)口 |
| P3.2 | ---外部中断0输入线 |
| P3.3 | ---外部中断1输入线 |
| P3.4 | T0 ---定时器0外部输入 |
| P3.5 | T1 ---定时器1外部输入 |
| P3.6 | ---外部数据存储器写选通信号输出 |
| P3.7 | ---外部数据存储器读选通信号输入 |
四个并行I/O端口作为通用I/O口使用时,共有写端口、读端口和读引脚三种操作方式。写端口实际上就是输出数据,是将累加器A或其它寄存器中数据传送到端口锁存器中,然后由端口自动从端口引脚线上输出。读端口不是真正的从外部输入数据,而是将端口锁存器中输出数据读到CPU的累加器。读引脚才是真正的输入外部数据的操作,是从端口引脚线上读入外部的输入数据。端口的上述三种操作实际上是通过指令或程序来实现的,这些将在以后章节中详细介绍。
⑵、串行I/O端口
8051有一个全双工的可编程串行I/O端口。这个串行I/O端口既可以在程序控制下将CPU的八位并行数据变成串行数据一位一位地从发送数据线TXD发送出去,也可以把串行接收到的数据变成八位并行数据送给CPU,而且这种串行发送和串行接收可以单独进行,也可以同时进行。
8051串行发送和串行接收利用了P3口的第二功能,即利用P3.1 引脚作为串行数据的发送线TXD和P3.0引脚作为串行数据的接收线RXD,如表2-1所示。串行I/O口的电路结构还包括串行口控制器SCON、电源及波特率选择寄存器PCON和串行数据缓冲器SBUF等,它们都属于特殊功能寄存器SFR。其中PCON和SCON用于设置串行口工作方式和确定数据的发送和接收波特率,SBUF实际上由两个八位寄存器组成,一个用于存放欲发送的数据,另一个用于存放接收到的数据,起着数据的缓冲作用,这些将在第七章中详细加以介绍。
4、总线
MCS-51单片机属总线型结构,通过地址/数据总线可以与存储器(RAM、EPROM)、并行I/O接口芯片相连接。
在访问外部存储器时,P2口输出高8位地址,P0口输出低8位地址,由ALE(地址锁存允许)信号将P0口(地址/数据总线)上的低8位锁存到外部地址锁存器中,从而为P0口接受数据作准备。
在访问外部程序存储器(即执行MOVX)指令时,PSEN(外部程序存储器选通)信号有效,在访问外部数据存储器(即执行MOVX)指令时,由P3口自动产生读/写(/)信号,通过P0口对外部数据存储器单元进行读/写操作。
MCS-51单片机所产生的地址、数据和控制信号与外部存储器、并行I/O接口芯片连接简单、方便。有关这部分内容将在第8章叙述。
1.2 MCS-51单片机存储器结构
MCS-51存储器结构与常见的微型计算机的配置方式不同,它把程序存储器和数据存储器分开,各有自已的寻址系统,控制信号和功能,程序存储器用来存放程序和始终要保留的常数,例如:所编程序经汇编后的机器码。数据存储器通常用来存放程序运行中所需要的常数或变量。例如:做加法时的加数和被加数、做乘法时的乘数和被乘数、模/数转换时实时记录的数据等等。
从物理地址空间看,MCS-51有四个存储器地址空间,即:片内程序存储器和片外程序存储器以及片内数据存储器和片外数据存储器。
MCS-51系列各芯片的存储器在结构上有些区别,但区别不大,从应用设计的角度可分为如下几种情况:片内有程序存储器和片内无程序存储器、片内有数据存储器且存储单元够用和片内有数据存储器且存储单元不够用。
1、程序存储器
程序存储器用来存放程序和表格常数。程序存储器以程序计数器PC作地址指针,通过16位地址总线,可寻址的地址空间为K字节。片内、片外统一编址。
⑴、片内有程序存储器且存储空间足够
在8051/8751片内,带有4K 字节ROM/EPROM程序存储器(内部程序存储器),4K字节可存储约两千多条指令,对于一个小型的单片机控制系统来说就足够了,不必另加程序存储器,若不够还可选8K或16K内存的单片机芯片,例如:C52等,总之,尽量不要扩展外部程序存储器,这会增加成本、增大产品体积。
⑵、片内有程序储器且存储空间不够
若开发的单片机系统较复杂,片内程序存储器存储空间不够用时,可外扩展程序存储器,具体扩展多大的芯片要计算一下,由两个条件决定:一是看程序容量大小,二是看扩展芯片容量大小,K总容量减去内部4K即为外部能扩展的最大容量,27容量为8K、27128容量为16K、27256容量为32K、27512容量为K。(具体扩展方法见存储器扩展)。若再不够就只能换芯片,选16位芯片或32位芯片都可。定了芯片后就要算好地址,再将引脚接高电平,使程序从内部ROM开始执行,当PC值超出内部ROM的容量时,会自动转向外部程序存储器空间。
对8051/8751而言,外部程序存储器地址空间为1000H –FFFFH。对这类单片机,若把接低电平,可用于调试程序,即把要调试的程序放在与内部ROM空间重叠的外部程序存储器内,进行调试和修改。调试好后再分两段存储,再将接高电平,就可运行整个程序。
⑶、片内无程序存储器
8031芯片无内部程序存储器,需外部扩展EPROM 芯片,地址从0000H-FFFFH都是外部程序存储器空间,在设计时应始终接低电平,使系统只从外部程序储器中取指令。
MCS-51单片机复位后程序计数器PC的内容为0000H ,因此系统从0000H单元开始取指,并执行程序,它是系统执行程序的起始地址,通常在该单元中存放一条跳转指令,而用户程序从跳转地址开始存放程序。
2、数据存储器
⑴、内部数据存储器
MCS-51单片机的数据存储器无论在物理上或逻辑上都分为两个地址空间,一个为内部数据存储器,访问内部数据存储器用MOV指令,另一个为外部数据存储器,访问外部数据存储器用MOVX指令。
MCS-51系列单片机各芯片内部都有数据存储器,是最灵活的地址空间,它分成物理上的且性质不同的几个区:00H - 7FH(0 - 127)单元组成的128字节地址空间的RAM区;80H - FFH(128 - 255)单元组成的高128字节地址空间的特殊功能寄存器(又称SFR)区。注意:8032/8052单片机将这一高128字节作为RAM区。
图
图2-8 MCS-51内部RAM存储器结构
在8051,8751和8031单片机中,只有低128字节的RAM区和128字节的特殊功能寄存器区,两区地址空间是相连的,特殊功能寄存器(SFR)地址空间为80H-FFH。注意:128字节的SFR区中只有26个字节是有定义的,若访问的是这一区中没有定义的单元,则得到的是一个随机数。
内部RAM区中不同的地址区域功能结构如上图2-8所示。其中00H-1FH(0-31)共32个单元是四个通用工作寄存器区,每一个区有八个工作寄存器,编号为R0-R7,每一区中R0-R7,地址见表2-2。
表2-2 寄存器和RAM地址对照表
| 0 区 | 1区 | 2区 | 3区 | ||||
| 地址 | 寄存器 | 地址 | 寄存器 | 地址 | 寄存器 | 地址 | 寄存器 |
| 00H | R0 | 08H | R0 | 10H | R0 | 18H | R0 |
| 01H | R1 | 09H | R1 | 11H | R1 | 19H | R1 |
| 02H | R2 | 0AH | R2 | 12H | R2 | 1AH | R2 |
| 03H | R3 | 0BH | R3 | 13H | R3 | 1BH | R3 |
| 04H | R4 | 0CH | R4 | 14H | R4 | 1CH | R4 |
| 05H | R5 | 0DH | R5 | 15H | R5 | 1DH | R5 |
| 06H | R6 | 0EH | R6 | 16H | R6 | 1EH | R6 |
| 07H | R7 | 0FH | R7 | 17H | R7 | 1FH | R7 |
表2-3 工作寄存器区选择
PSW.4
| (RS1) | PSW.3 (RS0) | 当前使用的工作寄存器区 R0 - R7 |
| 0 | 0 | 0区 (00 - 07H) |
| 0 | 1 | 1区 (08 - 0FH) |
| 1 | 0 | 2区 (10 - 17H) |
| 1 | 1 | 3区 (18 - 1FH) |
例如: SETB PSW.3
CLR PSW.4 ;选定第1区
SETB PSW.4
CLR PSW.3 ;选定第2区
SETB PSW.3
SETB PSW.4 ;选定第3区
不设定为第0区,也叫默认值,这个特点使MCS-51具有快速现场保护功能。特别注意的是,如果不加设定,在同一段程序中R0 - R7只能用一次,若用两次程序会出错。
如果用户程序不需要四个工作寄存器区,则不用的工作寄存器单元可以作一般的RAM使用。
内部RAM的20H -2FH为位寻址区(见表2-4)这16个单元和每一位都有一个位地址,位地址范围为00H - 7FH。位寻址区的每一位都可以视作软件触发器,由程序直接进行位
处理。通常把各种程序状态标志、位控制变量设在位寻址区内。同样,位寻址区的RAM单元也可以作一般的数据缓冲器使用。
在一个实际的程序中,往往需要一个后进先出的RAM区,以保存CPU的现场,这种后进先出的缓冲器区称为堆栈(堆栈的用途详见指令系统和中断的章节),堆栈原则上可以设在内部RAM的任意区域内,但一般设在30H -7FH的范围内。栈顶的位置由栈指针SP指出。
⑵、外部数据存储器
MCS-51具有扩展K字节外部数据存储器和I/O口的能力,这对很多应用领域已足够使用,对外部数据存储器的访问采用MOVX指令,用间接寻址方式,R0,R1和DPTR都可作间址寄存器。有关外部存储存器的扩展和信息传送将在第5章详细介绍。
若系统较小,内部的RAM(30H-7FH)足够的话就不要再扩展外部数据存储器RAM,若确实要扩展就用串行数据存储器24C系列。也可用并行数据存储器。
3、特殊功能寄存器
MCS-51单片机内的锁存器、定时器、串行口数据缓冲器以及各种控制寄存和状态寄存器都是以特殊功能寄存器的形式出现的,它们分散地分布在内部RAM地址空间范围,
表2-4 RAM寻址区位地址映象
字节
| 地址 | 位 地 址 | |||||||
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
| 2FH | 7F | 7E | 7D | 7C | 7B | 7A | 79 | 78 |
| 2EH | 77 | 76 | 75 | 74 | 73 | 72 | 71 | 70 |
| 2DH | 6F | 6E | 6D | 6C | 6B | 6A | 69 | 68 |
| 2CH | 67 | 66 | 65 | 63 | 62 | 61 | 60 | |
| 2BH | 5F | 5E | 5D | 5C | 5B | 5A | 59 | 58 |
| 2AH | 57 | 56 | 55 | 54 | 53 | 52 | 51 | 50 |
| 29H | 4F | 4E | 4D | 4C | 4B | 4A | 49 | 48 |
| 28H | 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 |
| 27H | 3F | 3E | 3D | 3C | 3B3 | 3A | 39 | 38 |
| 26H | 37 | 36 | 35 | 34 | 33 | 32 | 31 | 30 |
| 25H | 2F | 2E | 2D | 2C | 2B | 2A | 29 | 28 |
| 24H | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
| 23H | 1F | 1E | 1D | 1C | 1B | 1A | 19 | 18 |
| 22H | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 |
| 21H | 0F | 0E | 0D | 0C | 0B | 0A | 09 | 08 |
| 20H | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 |
1、累加器A
最常用的特殊功能寄存器,大部分单操作数指令的操作取自累加器,很多双操作数指令的一个操作数取自累加器。加、减、乘、除算术运算指令的运算结果都存放在累加器A或A、 B寄存器对中。指令系统中用A作为累加器的助记符。
⑵ B寄存器
B寄存器是乘除法指令中常用的寄存器。乘法指令的两个操作数分别取自A和B ,其结果存放在A B寄存器对中。除法指令中,被除数取自A,除数取自B,商数存在放于A,余数存放于B。
在其它指令中,B寄存器可作为RAM中的一个单元来使用。
2、程序状态字PSW
程序状态字是一个8位寄存器,它包含了程序状态信息。此寄存器各位的含义参见下图,其中PSW·1未用。其它各位说明如下:
| CY | AC | F0 | RS1 | RS0 | OV | - | P |
表2-5 特殊功能寄存器
| 标 识 符 | 名 称 | 地址 |
| * ACC | 累加器 | E0H |
| * B | B寄存器 | F0H |
| * PSW | 程序状态字 | D0H |
| SP | 堆栈指针 | 81H |
| DPTR | 数据指针(包括DPH和DPL) | 83H和82H |
| * P0 | 口0 | 80H |
| * P1 | 口1 | 90H |
| * P2 | 口2 | A0H |
| * P3 | 口3 | B0H |
| * IP | 中断优先级控制 | B8H |
| * IE | 允许中断控制 | A8H |
| TMOD | 定时器/计数器方式控制 | H |
| TCON | 定时器/计数器控制 | 88H |
| +T2CON | 定时器/计数器2控制 | C8H |
| TH0 | 定时器/计数器0(高位字节) | 8CH |
| TL0 | 定时器/计数器0(低位字节) | 8AH |
| TH1 | 定时器/计数器1(高位字节) | 8DH |
| TL1 | 定时器/计数器1(低位字节) | 8BH |
| +TH2 | 定时器/计数器2(高位字节) | CDH |
| +TL2 | 定时器/计数器2(低位字节) | CCH |
| +RLDH | 定时器/计数器2自动再装载 | CBH |
| +RLDL | 定时器/计数器2自动再装载 | CAH |
| *SCON | 串行控制 | 98H |
| SBUF | 串行数据缓冲器 | 99H |
| PCON | 电源控制 | 87H |
③ F0(PSW·5)用户标志位,F0是用户定义的一个状态标记,用软件来使它置位或清零。该标志位状态一经设定,可由软件测试F0,以控制程序的流向。
④ RS1,RS0(PSW·4,PSW·3)寄存器区选择控制位。可以用软件来置位或清零以确定工作寄存器区。RS1,RS0与寄存器区的对应关系见表2-3。
⑤ OV(PSW·2)溢出标志。当执行算术指令时,由硬件置位或清零,以指示溢出状态。
当执行加法指令ADD时,位6向位7有进位而位7不向CY进位时,或位6不向位7进位而位7向CY进位时,溢出标志OV置位,否则清零。
溢出标志常用于ADD和SUBB指令对带符号数作加减运算时,OV=1表示加减运算的结果超出了目的寄存器A所能表示的带符号数(2的补码)的范围(-128-+127),参见第3章中关于ADD和SUBB指令的说明。
在MCS-51中,无符号数乘法指令MUL的执行结果也会影响溢出标志。若置于累加器A和寄存器B的两个数的乘积超过255时,OV=1,否则OV=0。此积的高8位放在B内,低8位放在A内。因此,OV=0意味着只要从A中取得乘积即可,否则要从B A寄存器对中取得乘积。
除法指令DIV也会影响溢出标志。当除数为0时,OV=1,否则OV=0。
⑥ P(PSW.0)奇偶标志,每个指令周期都由硬件来置位或清“0”,以表示累加器A 中1的位数的奇偶数。若1的位数为奇数,P置“1”,否则P清“0”。
P标志位对串行通信中的数据传输有重要的意义,在串行通信中常用奇偶校验的办法来检验数据传输的可靠性。在发送端可根据P的值对数据的奇偶置位或清零。通信协议中规定采用奇校验的办法,则P=0时,应对数据(假定由A取得)的奇偶位置位,否则就清0。
⑷ 栈指针,栈指针SP是一个8位特殊功能寄存器。它指示出堆栈顶部在内部RAM中的位置。系统复位后,SP初始化为07H,使得堆栈事实上由08H 单元开始。考虑到08H-1FH单元分属于工作寄存器区1-3,若程序设计中要用到这些区,则最好把SP值改置为1FH或更大的值,SP的初始值越小,堆栈深度就可以越深,堆栈指针的值可以由软件改变,因此堆栈在内部RAM中的位置比较灵活。
除用软件直接改变SP值外,在执行PUSH,POP指令,各种子程序调用,中断响应,子程序返回(RET)和中断返回(RETI)等指令时,SP值将自动调整。
⑸ 数据指针,数据指针DPTR是一个16位特殊功能寄存器,其高位字节寄存器用DPH表示,低位字节寄器用DPL表示,既可以作为一个16位寄存器DPTR来处理,也可以作为两个的8位寄存器DPL和DPL来处理。
DPTR主要用来存放16位地址,当对KB外部存储器寻址时,可作为间址寄存器用。可以用下列两条传送指令:MOVX A,@DPTR和MOVX @DPTR,A。在访问程序存储器时,DPTR可用作基址寄存器,有一条采用基址+变址寻址方式的指令MOVC A,@A+DPTR,常用于读取存放在程序存储器内的表格常数。
⑹ 端口P0-P3,特殊功能寄存器P0,P1,P2和P3分别是I/O端口P0-P3的锁存器。P0-P3作为特殊功能寄存器还可用直接寻址方式参与其它操作指令。
⑺ 串行数据缓冲器,串行数据缓冲器SBUF用于存放欲发送或已接收的数据,它实际上由两个的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器。当要发送的数据传送到SBUF时,进的是发送缓冲器。当要从SBUF读数据时,则取自接收缓冲器,取走的是刚接收到的数据。
⑻ 定时器/计数器。MCS-51系列中有两个16位定时器/计数器T0和T1。它们各由两个的8位寄存器组成,共有四个的寄存器:TH0,TL0,TH1,TL1。可以对这四个寄存器寻址,但不能把T0,T1当作一个16位寄存器来寻址。
表2-6 特殊功能寄存器地址表
| SFR | 字节 地址 | 位 地 址 | |||||||
| D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | ||
| P0 | 80 | P0.0 | P0.1 | P0.2 | P0.3 | P0.4 | P0.5 | P0.6 | P0.7 |
| 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | ||
| SP | 81 | ||||||||
| DPL | 82 | ||||||||
| DPH | 83 | ||||||||
| PCON | 87 | ||||||||
| TCON | 88 | IT0 IE0 IT1 IE1 TR0 | TF0 TR1 TF1 | ||||||
| 88 | 8A | 8B | 8C | 8D | 8E | 8F | |||
| TMOD | |||||||||
| TL0 | 8A | ||||||||
| TL1 | 8B | ||||||||
| TH0 | 8C | ||||||||
| TH1 | 8D | ||||||||
| P1 | 90 | P1.0 | P1.1 | P1.2 | P1.3 | P1.4 | P1.5 | P1.6 | P1.7 |
| 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | ||
| SCON | 98 | RI | TI | RB8 | TB8 | REN | SM2 | SM1 | SM0 |
| 98 | 99 | 9A | 9B | 9C | 9D | 9E | 9F | ||
| SBUF | 99 | ||||||||
| P2 | A0 | P2.0 | P2.1 | P2.2 | P2.3 | P2.4 | P2.5 | P2.6 | P2.7 |
| A0 | A1 | A2 | A3 | A4 | A5 | A6 | A7 | ||
| IE | A8 | EX0 | ET0 | EX1 | ET1 | ES | EA | ||
| A8 | A9 | AA | AB | AC | AF | ||||
| P3 | B0 | P3.0 | P3.1 | P3.2 | P3.3 | P3.4 | P3.5 | P3.6 | P3.7 |
| B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 | ||
| IP | B8 | PX0 | PT0 | PX1 | PT1 | PS | |||
| B8 | B9 | BA | BB | BC | |||||
| PSW | D0 | P | — | OV | RS0 | RS1 | F0 | AC | CY |
| D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | ||
| ACC | E0 | ||||||||
| E0 | E1 | E2 | E3 | E4 | E5 | E6 | E7 | ||
| B | F0 | ||||||||
| F0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | ||
⑼ 其它控制寄存器。IP,IE,TMOD,TCON,SCON和PCON寄存器分别包含有中断系统、定时器/计数器、串行口和供电方式的控制和状态位,这些寄存器将在以后有关章节中叙述。
2 单片机的外部结构
2.1 MCS-51单片机引脚功能
MCS单片机都采用40引脚的双列直插封装方式。图2-9为引脚排列图, 40条引脚说明如下:
1、主电源引脚Vss和Vcc
① Vss接地
② Vcc正常操作时为+5伏电源
2、外接晶振引脚XTAL1和XTAL2
① XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。
② XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。
3、控制或与其它电源复用引脚RST/VPD,ALE/,和/Vpp
① RST/VPD 当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位
在Vcc掉电期间,此引脚可接 图2-9 8051引脚排列图
上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。
② ALE/ 正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE 引脚以不变的频率(振荡器频率的)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE 端可以驱动(吸收或输出电流)八个LSTTL电路。 对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲(功能)
③ 外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效。同样可以驱动八LSTTL输入。
④ /Vpp 、 /Vpp为内部程序存储器和外部程序存储器选择端。当/Vpp为高电平时,访问内部程序存储器,当/Vpp 为低电平时,则访问外部程序存储器。
对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(Vpp)。
4、输入/输出引脚P0.0 - P0.7,P1.0 - P1.7,P2.0 - P2.7,P3.0 - P3.7。
① P0口(P0.0 - P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。
② P1口(P1.0 - P1.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。
③ P2口(P2.0 - P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。P2口可以驱动(吸收或输出电流)四个LSTTL负载。
④ P3口(P3.0 - P3.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。P3口还用于第二功能请参看表2-1
2.2、复位和复位电路
MCS-51单片机的复位电路如图2-10所示。在RESET(图中表示为RST )输入端出现高电平时实现复位和初始化。
+5V +5V
10μF 1K 10μF
复
8.2K 按键 5.1K
地 地
(a) (b)
图2-10 复位电路
在振荡运行的情况下,要实现复位操作,必须使RES 引脚至少保持两个机器周期(24个振荡器周期)的高电平。CPU在第二个机器周期内执行内部复位操作,以后每一个机器周期重复一次,直至RES端电平变低。复位期间不产生ALE及PSEN信号。内部复位操作使堆栈指示器SP为07H,各端口都为1(P0-P3口的内容均匀0FFH),特殊功能寄存器都复位为0,但不影响RAM的状态。当RES引脚返回低电平以后,CPU从0地址开始执行程序。复位后,各内部寄存状态下如下:
寄存器 内容
PC 0000H
ACC 00H
B 00H
PSW 00H
SP 07H
DPTR 0000H
P0 -P3 0FFH
IP ×××00000
IE 0××00000
TMOP 00H
TCON 00H
TH0 00H
TL0 00H
TH1 00H
TL1 00H
SCON 00H
SBUF 不定
PCON 0×××××××
图2-10(a)为加电自动复位电路。加电瞬间,RES 端的电位与Vcc相同,随着RC 电路充电电流的减小RES的电位下降,只要RST 端保持10毫秒以上的高电平就能使MCS-51单片机有效地复位,复位电路中的RC 参数通常由实验调整。当振荡频率选用6MHz时,C选22uF,R选1K,便能可靠地实现加电自动复位,若采用RC电路接斯密特电路的输入端,斯密特电路输出端接MCS-51和外围电路的复位端,能使系统可靠地同步复位。图2-10(b)为人工复位电路。
复位电路在实际应用中很重要,不能可靠复位会导致系统不能正常工作,所以现在有专门的复位电路,如810系列,这种类型的器件不断有厂家推出更好的产品,如将复位电路、电源监控电路、看门狗电路、串行E2ROM存储器全部集成在一起的电路,有的可分开单独使用,有的可只用部份功能,让使用者就具体实际情况灵活选用。
