89C51具有如下特性:
(1)面向控制的8位CPU;
(2)一个片内振荡器和时钟产生的电路;
(3)片内4 KB Flash ROM 程序存储器;
(4)128B的片内数据存储器;
(5)可寻址64 KB的片外程序存储器和片外数据存储器控制电路;
(6)2个16位定时/计数器;
(7)4个并行I/O口,共32条可单独编程的的I/O线;
(8)5个中断源,2个中断优先级;
(9)一个全双工的异步串行口;
(10)21个特殊功能寄存器(SFR);
(11)具有节点工作方式
有8个部件组成,CPU、片内数据存储器、片内程序存储器、输入/输出接口、可编程串行口、定时/计数器、中断系统和特殊功能寄存器。见书P8 图2-1。
CPU:单片机的最核心部分,它是整个单片机的控制和指挥中心,完成所有的计算和控制任务。
程序存储器:用于存放单片机的程序。
数据存储器:用于存放内部待处理的数据和处理后的结果。
并口和串口:数据传输通道,方便CPU从芯片外部取得待处理的对象及将处理结果送到芯片外部。
中断控制逻辑:处理临时到达的突发事件。
定时器/计数器:完成对外部输入脉冲的计数或者根据内部的时钟及定时设置,周期性的产生定时信号。
内部总线:内部CPU与程序存储器、数据存储器、并行I/O接口、串行I/O接口和定时器/计数器之间都是通过内部总线联系在一起。
本书讨论的是40脚双列直插封装。
如图是89C51单片机的引脚图(导出自Proteus,DIP40) 。
电源引脚 VSS 和 VCC
VSS(20脚):接地端;
VCC(40脚):电源端;
时钟振荡电路引脚
XTAL1(19脚)和XTAL2(18脚)的内部是一个振荡电路。
当使用内部振荡电路时在这两个管脚上外接石英晶体和微调电容;
当使用外部时钟时,用于接外部时钟脉冲信号,此时XTAL1接外部时钟脉冲,XTAL2悬空。
输入/输出引脚
P0,P1,P2,P3共四个8位并行I/O口。
口 线 | 第二功能 | 名称 |
---|---|---|
P3.0 | RXD | 串行数据接收端 |
P3.1 | TXD | 串行数据发送端 |
P3.2 | I N T 0 ‾ \rm \overline {INT0} INT0 | 外部中断 0 申请输入端 |
P3.3 | I N T 1 ‾ \rm \overline {INT1} INT1 | 外部中断 1 申请输入端 |
P3.4 | T0 | 定时器 0 计数输入端 |
P3.5 | T1 | 定时器 1 计数输入端 |
P3.6 | W R ‾ \rm \overline {WR} WR | 外部 RAM 写选通 |
P3.7 | R D ‾ \rm \overline {RD} RD | 外部 RAM 读选通 |
控制信号引脚 RESET、 A L E / P R O G ‾ \rm {ALE/}\overline {PROG} ALE/PROG 、 P S E N ‾ \rm \overline{PSEN} PSEN和 E A ‾ / V P P \rm \overline{EA}/VPP EA/VPP
A L E \rm ALE ALE :地址锁存允许信号输出端;
P S E N ‾ \rm \overline{PSEN} PSEN:外部程序存储器读选通信号输出端,低电平有效;
E A ‾ \rm \overline{EA} EA:访问内部/外部程序存储器选择控制信号;
R E S E T \rm RESET RESET:复位信号输入端。
单片机的引脚除了电源、复位、时钟接入和用户I/O外,扩展出的其他引脚构成了三总线,如下图。
地址总线:16位,可寻址64K,由P0口(A0~A7), P2口(A8~A15)组成;
数据总线:8位,由P0口提供;
控制总线:由P3口的部分引脚实现( R D ‾ , W R ‾ \rm \overline{RD},\overline{WR} RD,WR)及 R E S E T \rm RESET RESET, E A ‾ , P S E N ‾ \rm \overline{EA},\overline{PSEN} EA,PSEN, A L E \rm ALE ALE 4根独立控制线。
单片机在电路连接无误后,将程序下载到单片机的程序存储器中,单片机系统就可以上电工作了。
上电复位后,从存储器的0000H单元开始取指令,并执行指令。
按图连线,上电工作后,点亮一个发光二极管。
由仿真结果可见,当P2.0引脚输出低电平时,PN结导通,发光二极管LED-GREEN上有电流流过,发光二极管发光。
代码部分如下
ORG 0000H
MOV P2,#11111110H ;P2.0引脚输出低电平
END
89C51单片机的主要组成:CPU、存储器和I/O接口。
CPU是单片机的核心部分,89C51单片机内部有一个8位的CPU,由运算器和控制器组成。
运算器:主要用来实现数据的传送,数据的 算术和逻辑运算,位变量处理等。
存储器:统一指挥和控制计算机工作的部件。
89C51可寻址范围64KB(16位地址线);
89C51单片机在物理上有4个独立的存储空间:
64K字节程序存储器空间;
128字节内部RAM;
128字节内部特殊功能寄存器空间;
64K外部数据存储器空间
64KB的程序存储器中,有4KB的地址对片内ROM(程序存储器)和片外ROM是公共的,地址为0000H~0FFFH, 从1000H~FFFFH为外部ROM的地址, 即内部ROM地址为0000H~0FFFH, 外部ROM地址为0000H~FFFFH;
128B的内部RAM(数据存储器)地址从00H~7FH(8位地址); 64KB外部RAM地址从0000H~FFFFH.
89C51内部有 4KB Flash ROM,片外最多可扩展 64 KB ROM,两者统一编址,CPU的控制器专门提供 一个控制信号 E A ‾ \rm \overline{EA} EA 来区分内部ROM和外部ROM的公共地址区0000H~0FFFH;当 E A ‾ \rm \overline{EA} EA接高电平,单片机从片内4KB的ROM取指令,指令地址超过0FFFH后,自动转向片外ROM。当 E A ‾ \rm \overline{EA} EA接低电平时,CPU只从片外ROM取指令。
89C51复位后,CPU总是从0000H开始执行程序。
RAM分为内外两部分,89C51内部有128B RAM,地址为00H~7FH;片外最多可扩展64KB RAM,地址为0000H~FFFFH。
内部128B RAM 从功能和用途可以划分为三个区域:
工作寄存器区:00H~1FH, 4组工作寄存器,由PSW中的RS0和RS1选择。每组有R0~R7共8个工作寄存器;
位寻址区:20H~2FH,不仅可以字节寻址,8个字节的每一位都可以位寻址 ;
位地址范围 00H~7FH, 地址范围 20H~2FH
位地址表示方法:位地址,字节地址.位
位地址与字节地址的转换关系 : 位地址=(字节地址-20H)*8+Di的 i 值
用户RAM区:30H~7FH,可用作堆栈或数据缓冲器。
若用作堆栈,后进先出。可用于保护现场和断点地址。
堆栈指针sp,指示栈顶的位置。
堆栈操作指令:
%进栈指令%
PUSH ; (sp)+1→sp,数据进栈
%出栈指令%
POP ; (sp)-1→sp,数据出栈
离散地分布在80H~FFH中,共21个 :
(1)是MCS-51单片机中各个功能部件所对应的寄存器
(2)用以存放相应功能部件的控制命令、状态或数据的区域。
与片内RAM统一编址(未占用的地址单元无定义)。
(1)部分可以位寻址,也可以字节寻址。其中带*号的(能被8整除)寄存器即可字节寻址又可位寻址。
(2)编程中,可使用符号,也可使用地址。
(3)可位寻址的可用位符号,可用位地址,也可用“字节 地址.位”,还可用“寄存器名.位”
寄存器符号 | 地 址 | 寄存器名称 |
---|---|---|
* ACC | E0H | 累加器 |
* B | F0H | 乘法寄存器 |
* PSW | D0H | 程序状态字 |
SP | 81H | 堆栈指针 |
DPL | 82H | 数据存储器指针(低8位) |
DPH | 83H | 数据存储器指针(高8位) |
* IE | A8H | 中断允许控制器 |
* IP | D8H | 中断优先级控制器 |
* P0 | 80H | 通道0 |
* P1 | 90H | 通道1 |
* P2 | A0H | 通道2 |
* P3 | B0H | 通道3 |
PCON | 87H | 电源控制和波特率选择 |
* SCON | 98H | 串行口控制器 |
SBUF | 99H | 串行数据缓冲器 |
* TCON | 88H | 定时控制器 |
TMOD | 89H | 定时方式选择 |
TL0 | 8AH | 定时器0 低8位 |
TL1 | 8BH | 定时器1 低8位 |
TH0 | 8CH | 定时器0 高8位 |
TH1 | 8DH | 定时器1高8位 |
CPU中使用的特殊功能寄存器:
16位,存放下一条将要从程序存储器中 取出的指令的地址。 用户无法对其进行读写,只能通过转移、调用和返回等指令来改变其内容。
基本工作方式:每取出1字节机器码后,自动加1 ;
执行转移指令时,被置入新的数值。
最常用的8位特殊功能寄存器,它既可用于存放操作数,也可用来存放中间结果。
一个8位寄存器,主要用于乘除法运算。也可作一般寄存器使用。
8位,用于存放程序运行的状态信息。
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
CY | AC | FO | RS1 | RS0 | OV | — | P |
CY(PSW.7):进位标志,是累加器 A的溢出位,如果操作结果在最高位有进位或借位时,置1;
AC(PSW.6):辅助进位标志,低半字节进位位,加减法运算中低4位向高4位有进位或借位时,置1;
FO(PSW.5):用户标志位;
RS1(PSW.4)、RS0(PSW.3):工作寄存器组选择位;
RS1 | RS0 | 当前寄存器组 | 对应的RAM地址 |
---|---|---|---|
0 | 0 | 第0组 | 00H~07H |
0 | 1 | 第1组 | 08H~0FH |
1 | 0 | 第2组 | 10H~17H |
1 | 1 | 第3组 | 18H~1FH |
OV(PSW.2):溢出标志位;
P(PSW.0):奇偶标志位,跟踪累加器A内容的奇偶性。如果有奇数个“1”,则P置1,反之为0.
堆栈式在内存中专门开辟出来按照 “先进后出、后进先出” 的原则进行存取的RAM区域。
堆栈可设置在内部 RAM 的任意区,堆栈共有两种操作:进栈和出栈,都是对栈顶单元进行的。
89C51单片机复位后,堆栈指针SP总是初始化到内部 RAM 地址07H。
DPTR是要给16位寄存器,用来存放16位的存储器地址,以实现对外部RAM的访问。可以分为两个8位寄存器:DPH、DPL。
相同点:都是与地址有关的16位寄存器。
作为地址寄存器时,PC与DPTR都通过P0,P2口(作为16为地址总线)输出。
不同点:PC与程序存储器有关,DPTR与数据存储器有关;
PC的输出与ALE及/PSEN引脚有关,DPTR与 A L E \rm ALE ALE、 R D ‾ \rm \overline{RD} RD和 W R ‾ \rm \overline{WR} WR引脚有关。
PC只能作为16位寄存器;
PC不可访问,其内容变化与程序流程有关。
基本功能:
P0:I/O口(系统扩展时作为地址/数据总线口,分时复用)。
P1: I/O口
P2: I/O口(系统扩展时作为高8位地址总线口)
P3: I/O口(特殊输入/输出线)
P0口字节地址为80H,位地址为80H~87H
如图,当控制线C=0时,MUX开关向下,P0口作为普通 I/O口使用;当C=1时,MUX开关向上,P0口作为地址/数据总线使用。由于P0内部没有上拉电阻,每根口线必须 外接上拉电阻。P1~P3口内部有上拉电阻,不用外接。
P1口的字节地址为90H,位地址为90H~97H,只能作为普通I/O口使用,没有转换开关MUX。
当P1口输出高电平时,可以向外提供拉电流负载,所以不必再接上拉电阻;
当输入时,与P0口一样,必须先向锁存器写 “1” ,使场效应管截止
通过一条指令将数据写入P1的数据锁存器,然后通过输出驱动器送到端口引脚。
MOV P1, A ;累加器A中内容送P1口
读端口,为适应对口进行“读-修改-写”类指令的需要。
ANL P1,#0FH ;读P1锁存器中数据,与立 即数 0FH进行逻辑与操作后,将结果写回P1口。
P2口的字节地址为0A0H,位地址为0A0H~0A7H, 可以作为普通I/O口或高8位地址线。
P2口作第二功能时:作为系统扩展的地址总线口,输出高8位地址A8~A15。
P2口高8位地址来源:CPU访问外部程序存贮器时,来源于PC 的高8位。 CPU访问外部数据存贮器时,来源于DPH。
P3口的字节地址为0B0H,位地址为0B0H~0B7H, 可以作为普通I/O口或特殊输入/输出线。