
| 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时进入闲置模式(在复位或重新上电时恢复)。
520



被折叠的 条评论
为什么被折叠?



