|
MCS-51单片机的特殊功能寄存器 |
||
|
符号 |
地址 |
功能介绍 |
|
F0H |
B寄存器 |
|
|
E0H |
累加器 |
|
|
D0H |
程序状态字 |
|
|
TH2* |
CDH |
定时器/计数器2(高8位) |
|
TL2* |
CCH |
定时器/计数器2(低8位) |
|
RCAP2H* |
CBH |
外部输入(P1.1)计数器/自动再装入模式时初值寄存器高八位 |
|
RCAP2L* |
CAH |
外部输入(P1.1)计数器/自动再装入模式时初值寄存器低八位 |
|
C8H |
T2定时器/计数器控制寄存器 |
|
|
B8H |
中断优先级控制寄存器 |
|
|
B0H |
P3口锁存器 |
|
|
A8H |
中断允许控制寄存器 |
|
|
A0H |
P2口锁存器 |
|
|
SBUF |
99H |
串行口锁存器 |
|
98H |
串行口控制寄存器 |
|
|
90H |
P1口锁存器 |
|
|
TH1 |
8DH |
定时器/计数器1(高8位) |
|
TH0 |
8CH |
定时器/计数器1(低8位) |
|
TL1 |
8BH |
定时器/计数器0(高8位) |
|
TL0 |
8AH |
定时器/计数器0(低8位) |
|
89H |
T0、T1定时器/计数器方式控制寄存器 |
|
|
88H |
T0、T1定时器/计数器控制寄存器 |
|
|
DPH |
83H |
数据地址指针(高8位) |
|
DPL |
82H |
数据地址指针(低8位) |
|
SP |
81H |
堆栈指针 |
|
80H |
P0口锁存器 |
|
|
87H |
电源控制寄存器 |
|
寄存器一般使用格式
|
30H~7FH |
一般数据或堆栈使用区 |
|
20H~28H |
针对固定地址的区域 |
|
18H~1FH |
寄存器组3 |
|
10H~17H |
寄存器组2 |
|
08H~0FH |
寄存器组1 |
|
00H~07H |
寄存器组0 |
程序状态字 PSW (D0H)
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
CY |
AC |
F0 |
RS1 |
RS0 |
OV |
— |
P |
P位 :奇偶位;P=0表示A中1的个数是偶数,P=1表示A中1的个数是奇数。
OV位 :益出位;OV=1表示运算时有益出产生。
RS0,RS1:寄存器组选择位。
|
RS1 |
RS0 |
选择的寄存器组 |
|
0 |
0 |
寄存器组0 |
|
0 |
1 |
寄存器组1 |
|
1 |
0 |
寄存器组2 |
|
1 |
1 |
寄存器组3 |
F0位 :用户自行设置位。
AC位 :补助进位位;AC=1表示运算时较低4位有进位产生。
CY位 :进位位;CY=1表示运算时有进位产生。
图 中断系统结构图
3中断允许寄存器 IE (A8H)
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
EA |
— |
ET2 |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
EA :整体中断允许位;EA=1允许中断。
ET2 :T2中断允许位;ET2=1允许中断(S52才有)。
ES :串行中断允许位;ES=1允许中断。
ET1 :T1中断允许位;ET1=1允许中断。
EX1 :INT1中断允许位;EX1=1允许中断。
ET0 :T0中断允许位;ET0=1允许中断。
EX0 :INT0中断允许位;EX0=1允许中断。
入口地址(按优先级): 外中断0—03H,定时器0—0BH,外中断1—13H,定时器1—1BH,串口—23H
中断优先次序寄存器 IP (B8H)
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
— |
— |
PT2 |
PS |
PT1 |
PX1 |
PT0 |
PX0 |
PT2:T2 PS:串行口 PT1:T1 PX1:INT1 PT0:T0 PX0:INT0
4计时器控制寄存器 TCON (88H)
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
→ 用于定时/计数器 ← → 用于中断 ←
TF1 :TF1=1表示T1有中断产生。
TR1 :TR1=1表示T1开始运行。
TF0 :TF0=1表示T0有中断产生。
TR0 :TR0=1表示T0开始运行。
IE1 :IE1=1表示INT1有中断产生。
IT1 :IT1=1表示INT1为下降沿触发,IT1=0表示INT1为低电平触发。
IE0 :IE0=1表示INT0有中断产生。
IT0 :IT0=1表示INT0为下降沿(负跳变)触发,IT0=0表示INT0为低电平触发。
2计时器计数器寄存器 TL0 (8AH),TH0 (8CH),TL1 (8BH),TH1 (8DH)
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
32768 |
16384 |
8192 |
4096 |
2048 |
1024 |
512 |
256 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
→ TH0(1) ← → TL0(1) ←
同过设订两个寄存器中每位代表的数值来决定定时值和计数值。
例:TH=#3CH ,TL=#0B0H 等于15536,它的定时值就为50000。
1计时器模式寄存器 TMOD (89H)
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
GATE |
C/T |
M1 |
M0 |
GATE |
C/T |
M1 |
M0 |
→ 计时器1 ← → 计时器0 ←
GATE :GATE=1时表示T0或T1必须在INT0或INT1是高点位时才会初始化。
C/T :C/T=1由外引脚T0或T1做计数脉冲,C/T=0由TH和TL做定时数。
M1,M0:用来选择计时计数器工作模式
|
M1 |
M0 |
工作模式 |
说明 |
|
0 |
0 |
0 |
13位计时计数器 (8192) |
|
0 |
1 |
1 |
16位计时计数器 (65536) |
|
1 |
0 |
2 |
8位计时计数器,可自动重新载入计数值 (256) |
|
1 |
1 |
3 |
当成两组独立的8位计时器(256,T0和T1不能同时用) |
定时器T2:
状态控制寄存器 T2CON (C8H)
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
TF2 |
EXF2 |
RCLK |
TCLK |
EXEN2 |
TR2 |
C/T2 |
CP/RL2 |
TF2 :T2中断益出标志;方式2,3置TF2,方式3不置。
EXF2 :T2外中断标志;EXF2=1,T2EX(P1.1)发生负跳变时置EXF2。
TCLK :串行口发送时钟选择标志。
RCLK :串行口接收时钟选择标志。
T2方式选择
|
|
RCLK或TCLK |
CP/RL2 |
TR2 |
|
|
1 |
0 |
0 |
1 |
16位常数自动再装入方式 |
|
2 |
0 |
1 |
1 |
16位捕获方式 |
|
3 |
1 |
× |
1 |
串行口波特率发生方式 |
|
4 |
× |
× |
× |
停止 |
EXEN2 :T2外部允许标志;
EXEN2=1,T2为捕获方式,T2EX(P1.1)发生负跳变时,TL2和TH2的当前值自动捕获到RCAP2L和RCAP2H中,同时置中断标志EXF2。
EXEN2=0,T2为自动装入方式,T2EX(P1.1)发生负跳变时,RCAP2L和RCAP2H自动装入TL2和TH2中,同时置中断标志EXF2。
C/T2 :外部计数器/定时器选择位;C/T2=1时为计数器,计数脉冲来自T2(P1.0);
C/T2=0时为定时器,以震荡脉冲的十二分频信号为计数信号。
TR2 :T2计数控制位;TR2=1时允许计数/定时。
CP/RL2 :捕获和常数自动再装入方式选择位;CP/RL2=1工作于捕获方式,CP/RL2=0工作于自动再装入方式,RCLK或TCLK为1时CP/RL2被忽略。
串行口控制寄存器 SCON (98H)
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
SM0 |
SM1 |
SM2 |
REN |
TB8 |
TR8 |
TI |
RI |
工作方式选择位 SM0,SM1
|
SM0 |
SM1 |
工作模式 |
说明 |
波特率 |
|
0 |
0 |
0 |
此时串行口为移位寄存器用 |
震荡频率/12 |
|
0 |
1 |
1 |
8位元UART |
由T1和SMOD位决定 |
|
1 |
0 |
2 |
9位元UART |
震荡频率/64 或 震荡频率/32 |
|
1 |
1 |
3 |
9位元UART |
由T1和SMOD位决定 |
SM2 :对于方式0:SM2=0。
对于方式1:SM2=1,只有接到有效的停止位才**RI。
对于方式2和3为多机通信控制位;SM2=1,则接收的第9位数据为0时不**RI。
REN :REN=1允许接收数据。
TB8 :在模式2、3时为第9个发送位。
RB8 :在模式2、3时为第9个接收位。
对于方式1:如SM2=1,RB8为接收的停止位。
TI :TI=1表示UATR传送完成,产生中断。
RI :RI=1表示UATR接收完成,产生中断。
附:串行口的四种工作方式
1. 模式 0 同步移位寄存器输入输出模式,可外接移位寄存器,以扩展I/O口。
(1) 模式 0 输出状态。
(2) 模式 0 输入状态。
当满足RI=0且REN=0时,就启动一次接收过程。
2. 模式 1
串行口工作于模式 1 时, 为波特率可变的 8 位异步通信接口。数据位由 P3.0 (RXD)端接收, 由P3.1(TXD)端发送。 传送一帧信息为 10 位: 一位起始位(0), 8 位数据位(低位在前)和一位停止位(1)。波特率是可变的, 它取决于定时器 T1 的溢出速率及SMOD的状态。
(1) 模式 1 发送过程。 用软件清除 TI后, CPU执行任何一条以 SBUF为目标寄存器的指令, 就启动发送过程。数据由 TXD引脚输出, 此时的发送移位脉冲是由定时器 /计数器 T1 送来的溢出信号经过 16 或 32 分频而取得的。一帧信号发送完时, 将置位发送中断标志TI=1, 向CPU申请中断, 完成一次发送过程。
(2) 模式 1 接收过程。
用软件清除 RI后, 当允许接收位 REN被置位 1 时, 接收器以选定波特率的 16 倍的速率采样 RXD引脚上的电平, 即在一个数据位期间有 16 个检测脉冲, 并在第 7、 8、9 个脉冲期间采样接收信号, 然后用三中取二的原则确定检测值, 以抑制干扰。 并且采样是在每个数据位的中间, 避免了信号边沿的波形失真造成的采样错误。当检测到有从“1”到“0”的负跳变时, 则启动接收过程, 在接收移位脉冲的控制下, 接收完一帧信息。 当最后一次移位脉冲产生时能满足下列两个条件:
① RI=0;
② 接收到的停止位为 1 或 SM2=0。
则停止位送入RB8,8位数据进入SBUF,并置RI=1,完成一次接收过程。否则,所接收到的一桢信息将丢失,接收器复位,并从新开始检测负跳变,以便接收下一桢信息。
注意:接收中断标志RI应由软件清除。
3. 模式 2 和模式 3
串行口工作于模式 2 和模式 3 时, 被定义为 9 位异步通信接口。 它们的每帧数据结构是 11 位的: 最低位是起始位(0), 其后是 8 位数据位(低位在先), 第 10 位是用户定义位(SCON中的 TB8或 RB8), 最后一位是停止位(1)。模式 2 和模式3 工作原理相似, 唯一的差别是模式 2 的波特率是固定的, 即为 fOSC / 32或 fOSC / 64; 而模式 3的波特率是可变的, 与定时器 T1的溢出率有关。
(1) 模式 2和模式 3的发送过程。
发送过程是由执行任何一条 SBUF为目的寄存器的指令来启动的。 由“写入SBUF”信号把 8位数据装入 SBUF, 同时还把 TB8 装入发送移位寄存器的第 9 位, 并通知发送控制器要求进行一次发送。发送开始, 把一个起始位(0)送到 TXD端。 移位后, 数据由移位寄存器送到TXD端。再过一位, 出现第一个移位脉冲。 第一次移位时, 把一个停止位“1”由控制器的停止位发生端送入移位寄存器的第 9 位。 此后, 每次移位时, 把 0 送入第 9 位。因此, 当 TB8 的内容送到移位寄存器的输出位置时, 其左面一位是停止位“1”, 而再往左的所有位全为“0”。 这种状态由零检测器检测到后, 就通知发送控制器作最后一次移位, 然后置 TI=1, 请求申请中断。第 9 位数据(TB8)由软件置位或清零, 可以作为数据的奇偶校验位, 也可以作为多机通信中的地址、数据标志位。如把 TB8 作为奇偶校验位, 可以在发送程序中, 在数据写入 SBUF之前, 先将数据位写入 TB8。
(2) 模式2和模式3接收过程。
与模式 1类似, 模式 2和模式 3接收过程始于在 RXD端检测到负跳变时,为此, CPU以波特率 16倍的采样速率对 RXD端不断采样。一检测到负跳变, 16分频计数器就立刻复位, 同时把1FFH写入输入移位寄存器。计数器的16个状态把一位时间等分成16份, 在每一位的第7、8、9个状态时, 位检测器对 RXD端的值采样。如果所接收到的起始位无效(为1),则复位接收电路, 等待另一个负跳变的到来。 若起始位有效(为 0)则起始位移入移位寄存器, 并开始接收这一帧的其余位。 当起始位 0 移到最左面时, 通知接收控制器进行最后一次移位。 把 8 位数据装入接收缓冲器 SBUF, 第 9 位数据装入SCON中的 RB8, 并置中断标志RI=1。
装入 SBUF和 RB8以及置位 RI的信号只有在产生最后一个移位脉冲且同满足下列两个条件, 才会产生:
① RI=0;
② SM2 =0 或接收到的第 9 位数据为“1”。
上述两个条件中任一个不满足, 所接收的数据帧就会丢失, 不再恢复。 两者都满足时, 第 9 位数据装入 TB8, 前 8 位数据装入 SBUF。
请注意: 与模式 1 不同, 模式 2 和 3 中装入 RB8 的是第 9 位数据, 而不是停止位。所接收的停止位的值与SBUF、 RB8 和 RI都没有关系, 利用这一特点可用于多机通信中。
常用波特率表 (用11.0592M晶震)
|
波特率 |
TH1 |
SMOD |
|
1200 |
TH1=E8H |
0 |
|
2400 |
TH1=F4H |
0 |
|
4800 |
TH1=FAH |
0 |
|
9600 |
TH1=FDH |
0 |
|
19200 |
TH1=FDH |
1 |
波特率的计算
方式1: SMOD=0, 波特率= 1 × 晶震频率
32 12×(256—TH1)
SMOD=1, 波特率= 1 × 晶震频率
16 12×(256—TH1)
方式2: SMOD=0, 波特率= 1 × 晶震频率
32 12
SMOD=1, 波特率= 1 × 晶震频率
16 12
方式3: 同方式1
波特率与电源管理寄存器 PCON (87H)
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
SMOD |
— |
— |
— |
CF1 |
GF0 |
PD |
IDL |
SMOD :波特率倍增位 SMOD=1为16位,SMOD=0为32位。
CF1,GF0:为一般用途标记。
PD :停止运行控制位,PD=1时进入停止模式(在复位或外中断产生时恢复)。
IDL :闲置模式控制位,IDL=1时进入闲置模式(在复位或重新上电时恢复)。