51单片机寄存器详解

51子系统单片机的存储器配置

1、程序存储器 ROM

1、程序存储器的ROM的最大空间是64KB因为地址线是16根,2^16 = 64 KB。80C51单片机,其内部有4KB ROM,外部ROM的最大容量是60KB

2、80C51片内4 KB ROM 的地址为:0000H~0FFFH (2^12 = 4 KB),片外60 KB ROM的地址为:1000H~FFFFH(2^16 - 2^12 = 60 KB)

3、80C51单片机,正常运行时:EA(非)端接高电平,CPU从内部ROM中读取程序;当PC值超过内部ROM,才会转向外部ROM

4、片内ROM的保留单元:

保留单元地址 入口地址 用途
0000H~0002H 0000H 复位后初始化引导程序
0003H~000AH 0003H 外部中断0中断服务程序
000BH~0012H 000BH 定时/计数器0中断服务程序
0013H~001AH 0013H 外部中断1中断服务程序
001BH~0022H 001BH 定时/计数器1中断服务程序
0023H~002AH 0023H 串行口中断服务程序
002BH~0032H 002BH 定时/计数器2中断服务程序

2、数据存储器 RAM

1、数据存储器用于存放运算的中间结果、暂存和缓冲数据及标志位等;

2、51系列单片机内部RAM有256B,地址为:00H~0FFH(2^8 = 256 B);可拓展的外部RAM最大空间为64KB,地址为:0000H~0FFFFH(2^16 = 64 KB);

3、片内256B的RAM又分为:低128单元(00H~7FH)(2^7 = 128 B)RAM区高128单元(80H~0FFH)(2^8 - 2^7 = 128B)的特殊功能寄存器区(SFR区)

4、低128单元分为:①通用寄存器区(00H~1FH)(2^5 = 32 B):从第0组到第3组,共计有4组通用寄存器区;②位寻址区(20H~2FH)(16B = 128位);③用户RAM区(30H~7FH)(4FH = 80B);

5、通用寄存器区/工作寄存器区:常用于存放操作数及中间结果。32个寄存器分为4组,每组8个,每个寄存器都是8位,每组都以R0~R7作为寄存器单元编号。

寄存器名称 地址
第0组 第1组 第2组 第3组
R0 00H 08H 10H 18H
R1 01H 09H 11H 19H
R2 02H 0AH 12H 1AH
R3 03H 0BH 13H 1BH
R4 04H 0CH 14H 1CH
R5 05H 0DH 15H 1DH
R6 06H 0EH 16H 1EH
R7 07H 0FH 17H 1FH

6、第0组寄存器被默认为通用寄存器组,其他需要设置PSW中的RS1、RS0两位,没被选中的寄存器可作为一般的数据缓冲器使用。

RS1 RS0 组号
1 1 3
1 0 2
0 1 1
0 0 0

7、位寻址区16个字节**(16B = 128位)**中的每一位都有一个特定的位地址

8、用户RAM区(30H~7FH)(80个单元),这些单元可以用作:数据缓冲器使用,也可作为堆栈以保存子程序调用或响应中断时的断点和现场

9、特殊功能寄存器区(SFR区)(字节地址能被8和0整除)

符号 名称 字节地址 D7 D6 D5 D4 D3 D2 D1 D0
TCON 定时/计数器状态字 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
TMOD 定时/计数器方式控制字 89H GATE C/T M1 M0 GATE C/T M1 M0
SCON 串口控制寄存器 98H SM0 SM1 SM2 REN TB8 RB8 T1 R1
9FH 9EH 9DH 9CH 9BH 9AH 99H 98H
IE 中断允许控制寄存器 A8H EA - - ES ET1 EX1 ET0 EX0
AFH AEH ADH ACH ABH AAH A9H A8H
IP 中断优先级控制寄存器 B8H - - - PS PT1 PX1 PT0 PX0
BFH BEH BDH BCH BBH BAH B9H B8H
PSW 程序状态字 D0H CY AC F0 RS1 RS0 OV - P
D7H D6H D5H D4H D3H D2H D1H D0H

(1)累加器(A/ACC);

(2)B寄存器:主要与累加器配合完成乘法和除法运算;

(3)程序状态字(PSW):8位的寄存器,用于存放程序运行的状态信息及运算结果的标志

PSW 程序状态字 CY AC F0 RS1 RS0 OV - P

①CY:进位标志位,最高位有进位或借位时,CY置1;无进位或错位时,CY清0;

②AC:辅助进位标志位,低4位向高4位有进位或借位时,CY置1;无进位或错位时,CY清0;

​ ③F0:用户标志位

④RS1和RS0:通用寄存器组选择位

⑤OV:溢出标志位,溢出OV置1,没溢出OV清0

​ ⑥P:奇偶校验位,如果A中有奇数个“1”,则P为1;否则P为0;

(4)数据指针(DPTR):唯一一个可寻址的16位寄存器。在访问外部RAM时,DPTR作为地址指针使用;

(5)堆栈指针(SP):堆栈的操作方式有两种:

​ ①自动方式:在调用子程序或者产生中断时,CPU自动将断点压入堆栈;程序返回时,断点自动弹回给PC指针;

​ ②指令方式:入栈指令PUSH,出栈指令POP;

PS:SP的复位值为07H,堆栈数据从08H开始存放,这样会导致通用寄存器无法使用,所以程序一开始就需要将SP设置为30H,这样堆栈就会开辟在用户RAM区(30H~7FH)。

(6)程序计数器(PC):PC是一个16位计数器,专门用于存放CPU将要执行的指令地址(即下一条指令的地址)。

I/O口

1、51单片机用4个8位并行I/O口(P0~P3)和一个串行I/O口。并行I/O口一次可传送8位二进制数据,串行I/O一次仅能传送1位二进制数据。

2、P0口:

第一功能:准双向三态I/O口

特别注意:P0作为输入口时,必须先向锁存器写入高电平,使输出驱动电路中的T1截止,P0口处于高阻态,具有高阻抗输入特性。

第二功能:CPU在访问存储器时,可以作为地址/数据分时复用的端口,地址单向输出,数据双向传输。

PS:拓展外部RAM或者ROM时,P0口只能作为第二功能,输出低八位地址。

3、P1口:

第一功能:准双向I/O口

特别注意:P1作为输入口时,必须先向锁存器写入高电平,使输出驱动电路中的T截止。

第二功能:①P1.0:定时/计数器2的外部触发计数脉冲输入端

​ ②P1.1:定时/计数器2的捕获、重装触发控制输入端

4、P2口:

第一功能:准双向I/O口

特别注意:P2作为输入口时,必须先向锁存器写入高电平,使输出驱动电路中的T截止。

第二功能:拓展外部存储器时,输出高8位地址,与P0口组成16位地址。

5、P3口:

第一功能:准双向I/O口

特别注意:P3作为输入口时,必须先向锁存器写入高电平,使输出驱动电路中的T截止

第二功能:①中断信号,②外部RAM的读写控制口

引脚 第二功能符号 第二功能名称
P3.0 RXD 串行数据接受
P3.1 TXD 串行数据发送
P3.2 INT0(非) 外部中断0申请
P3.3 INT1(非) 外部中断1申请
P3.4 T0 定时/计数器0的计数输入
P3.5 T1 定时/计数器1的计数输入
P3.6 WR(非) 外部数据存储器写选通
P3.7 RD(非) 外部数据存储器读选通

时钟电路和时序

1、晶振周期/振荡周期/拍节: P = 1/Fosc;

2、时钟周期/状态:S = 2P;

3、机器周期/扫描周期 = 6S = 12P;

eg:Fosc = 12 MHz P = 1/12us 机器周期 = 1us

指令系统

1、七种寻址方式

1.立即寻址

MOV			A,#70H		;将立即数70H传送到累加器A

2.寄存器寻址:给出寄存器名字,将寄存器的内容取出来

MOV			A,R0		;将寄存器R0中的内容传送到累加器A

累加器ACC、B寄存器、数据指针DPTA和进位C也可以用于寄存器寻址方式访问,只是对它们寻址,具体寄存器名称隐含在操作码中。

3.直接寻址:给出某一存储单元地址,对该单元的内容进行操作

MOV			A,70H		;将片内RAM地址为70H的单元的内容送到A中。

直接寻址方式用于访问以下存储空间:
①SFR

eg:
MOV			A,80H
可以写成
MOV			A,P0
(P0口的地址为80H)

②片内数据存储器低于128字节

③位地址空间

4.寄存器间接寻址:给出寄存器名字,以该寄存器的内容为地址,将地址的数据取出。

MOV			A,@R1		;将以寄存器R1的内容为地址的片内RAM单元的数据传送到A

可用作寄存器间接寻址的寄存器:R0,R1,DPTR

5.变址寻址(基寄存器加变址寄存器间接寻址):给出基寄存器(DPTR或PC)和变址寄存器(累加器A),将基寄存器和变址寄存器的内容之和为地址,将该地址的数据取出。

MOVC			A,@A+DPTR

6.相对寻址:以当前程序计数器PC值加上指令中给出的偏移量rel,构成实际操作数地址。

PC值:相对转移指令的存储地址+该指令字节数
eg:

JZ			rel		 ;它是一条若累加器A为0就转移的双字节指令
                      ;该指令的存储地址为2050H
                      ;则当前PC值为2052H

偏移量rel:有符号,单字节,补码表示,负数表示从当前地址向前转移,正数表示向后。

目标地址=指令存储地址+指令字节数+rel

7.位寻址:在位操作指令中直接给出操作数的地址。

适用范围:①内部RAM 20H2FH单元中的位(007FH)或者SFR中具有位地址的。

MOV C,20H              ;将20H位的值送给进位位CY,20H为位地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-goVlLGHw-1656075156497)(C:\Users\26449\AppData\Roaming\Typora\typora-user-images\image-20220622220132294.png)]

定时/计数器的特殊功能寄存器

TCON 定时/计数器状态字 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TMOD 定时/计数器方式控制字 GATE C/T M1 M0 GATE C/T M1 M0
SCON 串口控制寄存器 SM0 SM1 SM2 REN TB8 RB8 T1 R1
IE 中断允许控制寄存器 EA - - ES ET1 EX1 ET0 EX0
IP 中断优先级控制寄存器 - - - PS PT1 PX1 PT0 PX0

TCON:定时/计数器状态字

TCON 定时/计数器状态字 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

(1)IT0:外部中断0信号方式控制位

IT0 = 0时,外部中断0为电平触发,INT0(非)为低电平时有效

IT0 = 1时,外部中断0为边沿触发,INT0(非)为负跳变时有效

(2)IE0:外部中断0中断请求标志位

检测到中断信号时,该位由硬件置位,请求中断

边沿触发方式下,IE0由硬件清零;在电平触发模式下只能由软件清零

(3)(4)IT1和IE1同理

(5)TR0是T0的运行控制位

由软件置1和清0,当TR0 = 0时,停止计数;当TR0 = 1时,启动计数。

(6)TF0溢出标志位

T0产生溢出信号,TF0置1;如果溢出,TF0需用软件清0。

(7)(8)TR1和TF1同理

TMOD:定时/计数器工作方式寄存器

TMOD 定时/计数器方式控制字 GATE C/T M1 M0 GATE C/T M1 M0

(1)M1 M0:定时器四种工作方式选择位

M1 M0 = 00 工作方式0 13位定时/计数器工作方式
M1 M0 = 01 工作方式1 16位定时/计数器工作方式
M1 M0 = 10 工作方式2 自动重装载8位定时/计数器工作方式
M1 M0 = 11 工作方式3 两个独立8位定时/计数器(仅T0可用,T1停止工作)

(2)C/T(非):功能选择位

C/T(非)=0时为定时功能: 加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出

C/T(非)=1时为计数功能: 加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外信号脉冲进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出

(3)GATE:门控位

GATE = 0时仅由TCON中的TR0(TR1)位启动/停止T0(T1)

GATE = 1时,T0(T1)的启动或停止受外部中断信号INT0(非)(P3.2)或 INT1(非)(P3.3)的控制此时TR0(TR1)需置位

IE:中断允许控制寄存器

以下各位都是为0禁止,置1允许

IE 中断允许控制寄存器 EA - - ES ET1 EX1 ET0 EX0

(1)EX0:外部中断0允许位

(1)ET1:定时/计数器0中断允许位

(1)EX1:外部中断1允许位

(1)ET1:定时/计数器1中断允许位

(1)ES:串行口中断允许位

(1)EA:中断允许总控制位

IP:中断优先级控制寄存器

IP 中断优先级控制寄存器 - - - PS PT1 PX1 PT0 PX0

中断自然优先级(由高到低):外部中断0、定时/计数器0、外部中断1、定时/计数器1、串行口中断

若某一位置1,则相应的中断源为高优先级;若某一位为0,则则相应的中断源为低优先级

SCON:串行接口控制寄存器

SCON 串口控制寄存器 SM0 SM1 SM2 REN TB8 RB8 T1 R1

(1)SM0和SM1:串行接口工作方式设置位

SM0 SM1 工作方式 功能说明 波特率
0 0 方式0 同步移位寄存器,用于I/O拓展 fosc/12
0 1 方式1 10位异步收发器 由定时器T1溢出率控制
1 0 方式2 11位异步收发器 fosc/32或fosc/64
1 1 方式3 11位异步收发器 由定时器T1溢出率控制

方式0:波特率 = fosc/12

方式1和方式3:
波 特 率 = 2 S 32 ∗ f o s c 12 ( 256 − X ) 波特率 = \frac{2^S}{32}*\frac{fosc}{12(256-X)} =322S12(256X)fosc
其中:S = SMOD

方式2:
波 特 率 = 2 S 64 ∗ f o s c 波特率 = \frac{2^S}{64}*fosc =642Sfosc
其中:S = SMOD

(2)SM2:方式2和方式3主要用于多机通信控制

当串行接口工作在方式2或方式3时,若SM2=1,则允许多机通信

多机通信规定:第9位数据位为1 (即TB8=1),说明本帧数据为地址帧:第9位数据为0(即TB8=0),则本帧数据为数据帧

当从机接收到的第9位数据(在RB8中)为1时,数据才装入接收缓冲器SBUF,并置RI=1向CPU申请中断;如果接收到的第9位数据(在RB8中)为0,则不置位中断标志RI且信息丢失

SM2=0时,则不管接收到第9位数据是否为1,都产生中断标志RI,并将接收到的数据装入SBUF。应用这一特点可以实现多机通信。

串行口工作在方式0时,SM2必须设置为0;工作在方式1时,如SM2=1,则只有接收到有效的停止位时才会激活RI。

(3)REN:允许接收控制位

当REN=1时,允许接收;当REN=0时,禁止接收。此位由软件置1或清零。

(4)TB8:发送数据的第9位

在方式2和方式3中,在多机通信中作为发送地址帧或数据帧的标志

TB8=1,说明该发送帧为地址帧;TB8=0,说明该发送帧为数据帧

在许多通信协议中,它可作为奇偶校验位。此位由软件置1或清零。在方式0和方式1中,此位未使用。

(5)RB8: 接收数据的第9位

在方式2和方式3中,接收到的第9位数据放在RB8中。它或是约定的奇/偶校验位,或是约定的地址/数据标志位

在方式2和方式3多机通信中,RB8=1,说明该接收帧为地址帧;RB8=0,说明该接收帧为数据帧

(6)TI: 发送中断标志位

在一帧数据发送完时,由硬件置位。

TI=1,可申请中断,说明发送缓冲器SBUF已空,CPU可以发送下一帧数据。中断被响应后,TI不能自动清零,必须由软件清零。

(7)RI: 接收中断标志位

在接收到一帧有效数据后,由硬件置位。

RI=1,可申请中断,表示一帧数据接收结束,并已装入接收缓冲器SBUF中。CPU响应中断,取走数据后,RI不能自动清零,必须由软件

清零。

串行口发送中断标志TI和接收中断标志RI共为一个中断源。因此,CPU接收到中断请求后不知道是发送中断TI还是接收中断RI必须用软件来判别单片机复位后,控制寄存器SCON的各位均清零

PCON:电源控制寄存器控制字

最高位D7:SMOD:串行接口波特率的倍率控制位。

在方式1、方式2和方式3下,当SMOD = 1时,波特率加倍当SMOD = 0时,波特率不加倍,即波特率和2^SMOD成正比。

1、单片机复位时,SMOD = 0

2、PCON没有位地址,要操作SMOD,需要对整个寄存器进行操作

中断计数初值的设定

晶振频率为fosc, 晶振周期:P = 1/fosc, 机器周期 = 12P = 12/fosc;

设定计数初始值为X,定时时间Tc

(1)在工作方式0的情况下,13位定时/计数器,溢出值为2^13 = 8192

① 计数值 = 溢出值 - 计数初值 = 8192 - X;

② 定时时间Tc = 机器 * 计数值 =
T c = 12 ∗ ( 8192 − X ) f o s c Tc = \frac{12*(8192 - X)}{fosc} Tc=fosc12(8192X)
③计数值计算公式:
X = 8192 − T c ∗ f o s c 12 X = 8192 - \frac{Tc*fosc}{12} X=819212Tcfosc
(2)在工作方式1的情况下,16位定时/计数器,溢出值为2^16 = 65536

① 计数值 = 溢出值 - 计数初值 = 65536 - X;

② 定时时间Tc = 机器 * 计数值 =
T c = 12 ∗ ( 65536 − X ) f o s c Tc = \frac{12*(65536 - X)}{fosc} Tc=fosc12(65536X)
③计数值计算公式:
X = 65536 − T c ∗ f o s c 12 X = 65536 - \frac{Tc*fosc}{12} X=6553612Tcfosc

你可能感兴趣的:(51单片机,单片机,嵌入式硬件)