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~0002H0000H复位后初始化引导程序
0003H~000AH0003H外部中断0中断服务程序
000BH~0012H000BH定时/计数器0中断服务程序
0013H~001AH0013H外部中断1中断服务程序
001BH~0022H001BH定时/计数器1中断服务程序
0023H~002AH0023H串行口中断服务程序
002BH~0032H002BH定时/计数器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组
R000H08H10H18H
R101H09H11H19H
R202H0AH12H1AH
R303H0BH13H1BH
R404H0CH14H1CH
R505H0DH15H1DH
R606H0EH16H1EH
R707H0FH17H1FH

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

RS1RS0组号
113
102
011
000

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

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

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

符号名称字节地址D7D6D5D4D3D2D1D0
TCON定时/计数器状态字88HTF1TR1TF0TR0IE1IT1IE0IT0
8FH8EH8DH8CH8BH8AH89H88H
TMOD定时/计数器方式控制字89HGATEC/TM1M0GATEC/TM1M0
SCON串口控制寄存器98HSM0SM1SM2RENTB8RB8T1R1
9FH9EH9DH9CH9BH9AH99H98H
IE中断允许控制寄存器A8HEA--ESET1EX1ET0EX0
AFHAEHADHACHABHAAHA9HA8H
IP中断优先级控制寄存器B8H---PSPT1PX1PT0PX0
BFHBEHBDHBCHBBHBAHB9HB8H
PSW程序状态字D0HCYACF0RS1RS0OV-P
D7HD6HD5HD4HD3HD2HD1HD0H

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

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

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

PSW程序状态字CYACF0RS1RS0OV-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.0RXD串行数据接受
P3.1TXD串行数据发送
P3.2INT0(非)外部中断0申请
P3.3INT1(非)外部中断1申请
P3.4T0定时/计数器0的计数输入
P3.5T1定时/计数器1的计数输入
P3.6WR(非)外部数据存储器写选通
P3.7RD(非)外部数据存储器读选通

时钟电路和时序

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定时/计数器状态字TF1TR1TF0TR0IE1IT1IE0IT0
TMOD定时/计数器方式控制字GATEC/TM1M0GATEC/TM1M0
SCON串口控制寄存器SM0SM1SM2RENTB8RB8T1R1
IE中断允许控制寄存器EA--ESET1EX1ET0EX0
IP中断优先级控制寄存器---PSPT1PX1PT0PX0

TCON:定时/计数器状态字

TCON定时/计数器状态字TF1TR1TF0TR0IE1IT1IE0IT0

(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定时/计数器方式控制字GATEC/TM1M0GATEC/TM1M0

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

M1 M0 = 00工作方式013位定时/计数器工作方式
M1 M0 = 01工作方式116位定时/计数器工作方式
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--ESET1EX1ET0EX0

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

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

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

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

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

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

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

IP中断优先级控制寄存器---PSPT1PX1PT0PX0

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

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

SCON:串行接口控制寄存器

SCON串口控制寄存器SM0SM1SM2RENTB8RB8T1R1

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

SM0SM1工作方式功能说明波特率
00方式0同步移位寄存器,用于I/O拓展fosc/12
01方式110位异步收发器由定时器T1溢出率控制
10方式211位异步收发器fosc/32或fosc/64
11方式311位异步收发器由定时器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

  • 43
    点赞
  • 396
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值