1、定时器/计数器控制寄存器TCON
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|
TCON | TF1 | TR1 | TF1 | TR0 | IE1 | IT1 | IE0 | IT0 |
位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H |
TCON寄存器中各标志位功能如下:
- (1)
TF1、TF0
计数溢出标志位。
当计数器计数溢出时,该位置 1。使用 查询方式 时,此位作为状态位供 CPU 查询,但应注意查询有效后,应使用 软件及时将该位清 0。使用 中断方式 时,此位作为中断请求标志位,进人中断服务程序后由硬件自动清 0。- (2)
TR1、TR0
计数运行控制位。
TR1 位(或 TR0 位)= 1 ,为启动定时器/计数器工作的必要条件。当 TMOD 寄存器中的 GATE = 0 时,仅由运行控制位 T R x ( x = 0 , 1 ) TRx ( x = 0 , 1 ) TRx(x=0,1)来控制定时器/计数器的运行;当 GATE= 1 时,定时器/计数器的运行要由外中断引脚 ( I N T 0 ‾ \overline{INT0} INT0或 I N T 1 ‾ \overline{INT1} INT1) 的电平与运行控制位 T R x TRx TRx共同来控制。
TR1 位(或 TR0 位)= 0 ,则停止定时器/计数器工作。
该位可由软件置 1 或清 0。- (3)
IE1
外部中断请求 1 的中断请求标志位。- (4)
IE0
外部中断请求 0 的中断请求标志位。- (5)
IT1
选择外部中断请求 1 为跳沿触发方式还是电平触发方式。
IT1 = 0 ,为电平触发方式,加到引脚 I N T 1 ‾ \overline{INT1} INT1 上的外部中断请求输人信号为低电平有效,并把 IE1 置 1 。转向中断服务程序时,则由硬件自动把 IE1 清 0 。
ITI = 1 ,为跳沿触发方式,加到引脚 I N T 1 ‾ \overline{INT1} INT1 上的外部中断清求输人信号电平从高到低的负跳变有效,并把 IE1 置 1 。转向中断服务程序时,则由硬件自动把 IE 1 清 0 。- (6)
IT0
选择外部中断请求 0 为跳沿触发方式还是电平触发方式。
当 AT89s52 单片机复位后, TCON 被清0,6个中断源的中断请求标志均为 0 。
2、工作方式控制寄存器TMOD
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|
TMOD | GATE | C / T ‾ C/\overline{T} C/T | M1 | M0 | GATE | C / T ‾ C/\overline{T} C/T | M1 | M0 |
TMOD | <----------T1方式字段----------> | <----------T0方式字段----------> |
---|
TMOD寄存器8位分为两组,高4位控制 T1 ,低4位控制T0:
- (1)
GATE
门控位
GATE=0 时 ,仅由运行控制位 T R x ( x = 0 , 1 ) TRx (x=0,1) TRx(x=0,1) 来控制定时器/计数器运行 。
GATE=1 时 ,用外中断引脚 ( I N T 0 ‾ (\overline{INT0} (INT0或 I N T 1 ‾ ) \overline{INT1}) INT1) 上的电平与运行控制位 T R x TRx TRx 共同来控制定时器/计数器运行 。- (2)
M1、M0
工作方式选择位
M1 M0 方式 功能说明 0 0 0 为13位定时器/计数器 0 1 1 为16位定时器/计数器 1 0 2 8位的常数自动重新装入的定时器/计数器 1 1 3 仅适用于T0, 此时T0分成两个8位计数器,T1停止计数
- (3)
$C/\overline{T}$
计数器模式和定时器模式选择位
C / T ‾ C/\overline{T} C/T = 0 为定时器工作模式,对单片机的时钟振荡器12分频后的脉冲进行计数。
C / T ‾ C/\overline{T} C/T = 1 为计数器工作模式,计数器对外部输入引脚 T0 (P3.4) 或 T1(P3.5) 上的外部脉冲 (负跳变) 计数
3、串行口控制寄存器SCON
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|
SCON | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
位地址 | 9FH | 9EH | 9DH | 9CH | 9BH | 9AH | 99H | 98H |
SCON寄存器中各标志位功能如下:
- (1)
SM0、SM1
串行口4种工作方式选择位
SM0 SM1 方式 功能说明 0 0 0 同步移位寄存器方式 (用于扩展I/O口) 0 1 1 8位异步收发,波特率可变 (由定时器控制) 1 0 2 9位异步收发,波特率为 f O S C / 64 f_{OSC}/64 fOSC/64 或 f O S C / 32 f_{OSC}/32 fOSC/32 1 1 3 9位异步收发,波特率可变 (由定时器控制) 。
- (2)
SM2
多机通信控制位
因为多机通信必须是工作在方式2或 方式3,因此当串行口工作于方式2 或方式3 时:
如果SM2=1, 则只有当接收到的第9位 数据 (RB8) 为1 时,才使 RI 置 1,产生中断请求,并将接收到的前 8 位数据送入 SBUF; 当接收到的第 9位数据 (RB8) 为 0时 ,则将接收到的前8 位数据丢弃。
如果SM2=0,则不论接收到的第9位 数据是1 还是0, 都将前8位数据送入SBUF 中,并使RI 置 1, 产生中断请求。
在方式1 时 ,如果 SM2=1,则只有收到有效的停止位时才会激活RI。
在方式 0时 ,SM2 必须为0 。- (3)
REN
允许串行接收位
由软件置1或 清0。
REN=1, 允许串行口接收数据。
REN=0, 禁止串行口接收数据。- (4)
TB8
发送的第9 位数据
在方式2 或方式3 时 ,TB8 是要发送的第9 位数据,其值由软件置1 或清0。 在双机串行通信时,TB8 一般作为奇偶校验位使用; 在多机串行通信中用来表示主机发送的是地址帧还是数据帧 , TB8 =1为地址帧,TB8 =0 为数据帧- (5)
RB8
接收的第9位数据
工作在方式2 或方式3 时,RB8 存放串行口接收到的第9 位数据。在方式 1 , 如果SM2 =0,RB8是接收到的停止位。 在方式0, 不使用RB8。- (6)
TI
发送中断标志位
TI =1,表示一帧数据发送结束。串行口工作在方式 0 时,串行发送的第8 位数据结束时TI 由硬件置1; 在其他工作方式中,串行口发送停止位的开始时置 TI 为 1。TI =1,则可申请中断,CPU响应中断后,在中断服务程序中向“发送SBUF” 写入要发送的下一帧数据。TI位的状态可供软件查询,且 必须由软件清0。- (7)
RI
接收中断标志位
RI=1, 表示一帧数据接收完毕。串行口工作在方式0 时,接收完第 8 位数据时, RI 由硬件置1; 在其他工作方式中,串行接收到停止位时,该位置1。RI=1,则可申请中断,要求CPU从 “接收SBUF” 取走数据。 RI 位的状态也可供软件查询,且必须由软件清0。
SCON的所有位都可使用位操作指令清 0或 置1。
4、特殊功能寄存器PCON
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|
PCON | SMOD | —— | —— | —— | GF1 | GF0 | PD | IDL |
PCON寄存器中各标志位功能如下:
- (1)
SMOD
波特率选择位
例如,方式1的波特率计算公式为
方式一波特率 = ( 2 S M O D / 32 ) × (2^{SMOD}/32) \times (2SMOD/32)×定时器T1的溢出率
当SMOD=1 时 ,要比SMOD =0时的波特率加倍,所以也称SMOD位为波特率倍增位。- (2)
——
保留位,未定义- (3)
GF1、GF0
通用标志位,供用户使用,应充分利用- (4)
PD
掉电模式控制位,若PD=1,则进入掉电模式。- (5)
IDL
空闲模式控制位,若IDL=1,则进入空闲运行模式
5、程序状态字寄存器PSW
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|
PSW | Cy | Ac | F0 | RS1 | RS0 | OV | —— | P |
PSW寄存器中各标志位功能如下:
- (1)
Cy
进位标志位
也可写为C
。在执行算术运算和逻辑运算指令时,若最高位有进位或借位,则 Cy=1; 否则,Cy=0。在位处理器中,它又是位累加器。- (2)
Ac
辅助进位标志位
Ac标志位用于在BCD码运算时进行十进位调整。即在运算时,当D3位向D4位产生进位或借位时,Ac=1;否则,Ac=0。- (3)
F0
用户使用的标志位
可用指令来使它置1 或清0, 也可用指令来测试该标志位,根据测试结果控制程序的流向。编程时用户应充分利用该标志位。- (4)
RS1、RS0
4组工作寄存器区选择控制位 1 和位 0
RS1 RS0 所选的4组寄存器 0 0 0 区 (片内RAM地址00H~07H) 0 1 1 区 (片内RAM地址08H~0FH) 1 0 2 区 (片内RAM地址10H~17H) 1 1 3 区 (片内RAM地址18H~1FH)
- (5)
OV
溢出标志位
当执行算术指令时,OV用来指示运算结果是否产生溢出。如果结果产生溢出,OV=1; 否则,OV=0。- (6)
——
保留位,未定义- (7)
P
奇偶标志位
该标志位表示指令执行后,累加器 A 中 1 的个数是奇数还是偶数。
P=1, 表示累加器A 中1 的个数为奇数。
P=0, 表示累加器A 中1 的个数为偶数。
该标志位对串行口通信中的数据传输有重要的意义。在串行通信中,常用奇偶检验的方法来检验数据串行传输的可靠性。
6、中断允许寄存器IE
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|
IE | EA | —— | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
位地址 | AFH | —— | ADH | ACH | ABH | AAH | A9H | A8H |
中断允许寄存器IE对中断的开放和关闭实现两级控制。所谓两级控制,就是 有一个总的开关中断控制位EA(IE.7位), 当 EA=0 时,所有的中断请求被屏蔽,CPU对任何中断请求都不接受,因此称EA为系统中断允许总开关控制位;当 EA=1 时,CPU开放中断,但5个中断源的中断请求是否允许,还要由上图中IE的低6位所对应的6个中断请求允许控制位的状态来决定。
IE寄存器中各标志位功能如下:
- (1)
EA
中断允许总开关控制位
EA = 0,所有的中断请求被屏蔽。
EA = 1,所有的中断请求被开放。- (2)
ET2
定时器/计数器T2的中断允许位
ET2 = 0,禁止 T2 中断。
ET2 = 1,允许 T2 中断。- (3)
ES
串行口中断允许位
ES = 0,禁止串行口中断。
ES = 1,允许串行口中断。- (4)
ET1
定时器/计数器T1的溢出中断允许位
ET1 = 0,禁止 T1 溢出的中断。
ET1 = 1,允许 T1 溢出的中断。- (5)
EX1
外部中断1中断允许位
EX1 = 0,禁止外部中断1 中断。
EX1 = 1,允许外部中断1 中断。- (6)
ET0
定时器/计数器T0的溢出中断允许位
ET0 = 0,禁止 T0 溢出的中断。
ET0 = 1,允许 T0 溢出的中断。- (7)
EX0
外部中断0中断允许位
EXO = 0,禁止外部中断0 中断。
EXO = 1,允许外部中断0 中断。
AT89S52单片机复位以后,IE 被清0,所有的中断请求被禁止。IE 中与各个中断源相应的位可用指令置1或清0,即可允许或禁止各中断源的中断申请。若使某一个中断源被允许中断,除了IE相应的位被置1外,还必须使 EA 位置1, 即 EA位置1 为中断请求的 必要条件。
改变 IE 的内容,可由位操作指令来实现(即SETB bit
; CLR bit
),也可用字节操作指令实现。
7、中断优先级寄存器IP
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|
IP | —— | —— | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
位地址 | —— | —— | BDH | BCH | BBH | BAH | B9H | B8H |
IP寄存器中各标志位功能如下:
- (1)
PT2
定时器T2中断优先级控制位
PT2 = 1,定时器T2 中断为高优先级。
PT2 = 0,定时器T2 中断为低优先级。- (2)
PS
串行口中断优先级控制位
PS = 1,串行口中断为高优先级。
PS = 0,串行口中断为低优先级。- (3)
PT1
串行口中断允许位
PT1 = 1,定时器T1 中断为高优先级。
PT1 = 0,定时器T1 中断为低优先级。- (4)
PX1
外部中断 1 中断优先级控制
PX1 = 1,外部中断1 中断为高优先级。
PX1 = 0,外部中断1 中断为低优先级。- (5)
PT0
外部中断1中断允许位
PT0 = 1,定时器T0 中断为高优先级。
PT0 = 0,定时器T0 中断为低优先级。- (6)
PX0
定时器/计数器T0的溢出中断允许位
PX0 = 1,外部中断0 中断为高优先级。
PX0 = 0,外部中断0 中断为低优先级。
中断优先级控制寄存器IP的各位都可由用户程序置1 和清0,用位操作指令或字节操作指令可更新IP的内容, 以改变各中断源的中断优先级。
AT89S52单片机复位以后,IP的内容为 0,各个中断源均为低优先级中断
在所有的中断源为同一中断优先级时,在所有的中断源同时发出中断请求时, 哪一个中断请求能优先得到响应,取决于内部的硬件查询顺序。这相当于在同一个优先级内,还同时存在另一个辅助优先级结构,其查询顺序如下表
中断源 中断级别 外部中断 0 最高 T0 溢出中断 | 外部中断 1 | T2 溢出中断 | 串行口中断 V T2 中断 最低
8、T2CON
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|
T2CON | TF2 | EXF2 | RCLK | TCLK | EXEN2 | TR2 | C / T 2 ‾ C/\overline{T2} C/T2 | C P / R L 2 ‾ CP/\overline{RL2} CP/RL2 |
CFH | CEH | CDH | CCH | CBH | CAH | C9H | C8H |
T2CON寄存器中各标志位功能如下:
- (1)
TF2
T2计 数计满溢出回0 中断请求标志位
当T2计数计满溢出回0时,由内部硬件置 1 TF2, 向CPU发出中断请求。但是当RCLK位或TCLK位为 1 时将不予置位。本标志位必须由软件清0。- (2)
EXF2
T2外部中断请求标志位
当由引脚 T2EX上的负跳变引起、“捕捉”或“重新装载”且EXEN2位为 1,则置 1 EXF2标志位,向CPU发出中断请求。本标志位必须由软件清0。- (3)
RCLK
串行口接收时钟标志位
当 RCLK位为 1 时,串行通信端使用定时器/计数器T2的溢出回0信号作为串行通信方式1 和方式3 的接收时钟;当 RCLK位为0时, 使用定时器/计数器1 的溢出回 0 信号作为串行通信方式1 和方式3 的接收时钟。- (4)
TCLK
串行发送时钟标志位
当TCLK位为1时,串行通信端使用定时器/计数器2的溢出回0信号作为串行通信方式1和方式3的发送时钟;当TCLK位为0时,串行通信端使用定时器/计数器 1 的溢出回 0 信号作为串行通信方式 1 和 方式3 的发送时钟。- (5)
EXEN2
T2外部采样允许标志位
当 EXEN2位为1时,如果 T2 不是正工作在串行口的时钟,则在 T2EX 引脚 (P1.1) 上的负跳变将触发“捕捉”或“重新装载”操作;当EXEN2位为0时,在T2EX引脚(P1.1)上的负跳变对T2不起作用 。- (6)
TR2
T2启动/停止控制位
当软件置 1 TR2 时,即 TR2 = 1,则启动 T2 开始计数,当软件清0TR2时,即TR2 = 0, 则停止计数 。- (6)
$C/\overline{T2}$
T2的定时或计数模式选择位
当设置 C / T 2 ‾ C/\overline{T2} C/T2 = 1 时,选择对外部事件计数模式; C / T 2 ‾ C/\overline{T2} C/T2 = 0 时,则选择内部定时模式。- (6)
$CP/\overline{RL2}$
T2捕捉/重新装载选择位
当设置 C P / R L 2 ‾ CP/\overline{RL2} CP/RL2 =1 时,如果EXEN2为1, 则在T2EX引脚(P1.1)上的负跳变将触发“捕捉”操作;当设置 C P / R L 2 ‾ CP/\overline{RL2} CP/RL2 = 0时 ,如果EXEN2 为 1,则T2计数计满回 0 溢出或T2EX引脚上的负跳变都将引起重新装载操作;当RCLK位为1 或 TCLK位为1, C P / R L 2 ‾ CP/\overline{RL2} CP/RL2标志位不起作用。T2 的计满回 0 溢出时,将迫使T2进行重新装载操作
定时器 T2 有 3 种工作方式:捕捉、重新装载(增计数或减计数)和波特率发生器 3种工作方式,可对寄存器 T2CON 中的相关位进行软件设置来选择,具体见下表。
RCLK+TCLK CP/RL2 TR2 MODE 0 0 1 16位自重载 0 1 1 16位捕捉 1 x 1 波特率发生器 x x 0 停止工作并关闭
9、T2MOD
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|
T2MOD | —— | —— | —— | —— | —— | —— | T2OE | DCEN |
TCON寄存器中各标志位功能如下:
- (1)
T2OE
输出允许位。
T2OE = 1,允许定时时钟从 P1.0 输出;T2OE = 0,禁止定时时钟从 P1.0 输出。- (2)
DCEN
计数方式选择。
DCEN =1,T2 的计数方式由 P1.1 引脚状态决定。P1.1 = 1, T2减计数, P1.1 = 0, T2 加计数; DCEN = 0,计数方式与P1.1 无关,同T1 和T0一样,采用增1 计数。