8051的特殊功能寄存器

版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/80113950

特殊功能寄存器

8051有21个特殊功能寄存器,其中大部分是8位的,还有一些是16位的。我们对51单片机的操作实质是对特殊功能寄存器的操作。SFR是我们操作的对象,对他们进行读和写就是在操作51单片机。

PSW(程序状态字寄存器):保存程序在执行过程中一些状态。

CY:进位位CY是在执行加法(减法)时,如果第7位有进位(借位),则将CY置1。

AC:辅助进位位AC,是指第3位向第4位有进位(借位)时,将AC置1.

F0:是用户标志位,留给我们用的

RS1和RS0是工作寄存器组选择位,由RS1和RS0控制选择哪一组工作寄存器工作。

OV:溢出标志位,在加减法运算的过程中,当第6位或者第7位其中的某一位有进位的时候,OV置1.

即第6位进位和第7位进位的异或(D6⊕D7)。

—:这个是保留位,在一些书中也写作是F1。和F0位差不多

P:奇偶校验位,8051进行的是偶校验。即当累加器ACC的内容中1的个数是奇数个,那么P就被置1,否则清零。

寄存器B:在乘除法运算中与累加器A配合使用。MUL AB把累加器A和寄存器B中的8位无符号数相乘,结果的高8位存在寄存器B中,低8位存在累加器A中。DIV AB用B除以A,把商存在A中,余数存在B中。在不做乘除法运算时,B还可以作为通用寄存器来使用。

累加器A:8051的大多数指令都需要使用累加器A,他是使用频率最高的寄存器。外部存储器的读写必须使用A。

堆栈指针sp:堆栈指针存放当前栈的栈顶指针。数据在进栈之前SP先加1,然后数据进栈;数据在出栈时,先将数据弹出,然后SP减1。51的栈是向上生长的。对于8051来说,栈是被放在内部的RAM中,因此栈的最大地址是7FH。在系统复位后SP的初始值是07H。

数据指针DPTR:数据指针是一个16位的寄存器。可分为DPL和DPH两个8位的寄存器。它是唯一一个直接可以做16位数据操作的寄存器。例如:MOV DPTR ,#1000H。

端口寄存器:即就是P0到P3这四个特殊功能寄存器。所有的端口都可以位寻址(支持位操作)。也就是说引脚的操作本质是对其内存映射以后的特殊功能寄存器进行的操作。

中断允许寄存器:(IE)8051拥有中断系统,他可以触发5个中断源,以及两个中断优先级(即就是最多允许两层的中断嵌套)。

EA:控制中断的总开关,EA置1时中断总允许打开。否则中断关闭。

ET2:启用/禁用定时器2的溢出或捕捉中断(仅对于8052)

ES :启用/禁用串行端口中断

ET1 :启用/禁用定时器1溢出中断

EX1 :启用/禁用外部中断1

ET0 :启用/禁用定时器0溢出中断

EX0 : 启用/禁用外部中断0

中断优先级寄存器:(IP)8051的中断有两个中断优先级,默认的优先级从高到低是:外部中断0,定时/计数器0,外部中断1,定时/计数器1,串行口,(8052有定时/计数器2)。

当把相应的位置1时,优先级变高,置0时,优先级变低。当全为1或者全为0时,优先级按照默认的优先级来执行。

(IP的每个位名字和IE寄存器每个位是相似的)

定时器控制寄存器(TCON):

TF1(TF0):定时/计数器T1(TF0)的溢出标志,T1(T0)计数满后,该位由硬件置1.并向CPU发出中断请求。若CPU开放该中断,则进入中断服务子程序,并由硬件将该位清0.

TR1(TR0):T1(T0)的运行控制位。用软件控制,置1时,启动T1(T0);清0时,停止T1(T0)。

IE1(IE0):外部中断1(0)的中断标志位。置1时,向CPU发出中断请求。

IT1(IT0):外部中断1(0)的中断触发方式选择位。ITx = 1时,设置为边沿触发方式(下降沿);ITx = 0时,设置为电平触发方式(低电平)。在边沿触发方式下,CPU在响应中断请求之后,会由硬件将IEx清0.

定时器方式选择寄存器:(TMOD)该寄存器不能位寻址,只能整个字节操作。

其中高4位是控制定时器T1的,低4位是控制定时器T0的。

GATE:

当GATE = 1

则INT0引脚为高电平时且TR0置位,启动定时器T0;

则INT1引脚为高电平时且TR1置位,启动定时器T1。

当GATE = 0

则TR0置位,启动定时器T0;

则TR1置位,启动定时器T1。

C/T:定时/计数器方式选择位,C/T = 1时,工作在计数器模式下;当C/T = 0时。工作在定时器模式下。

M1和M0:定时/计数器工作方式选择位。

8051系列单片机的定时/计数器加1工作方式,因此需要将定时/计数的初值送到T0(T1)。

T1和T0是两个16位的定时器,但是不能直接进行16位数据的读和写,只能分成两个8位来进行读和写操作。例如想给T1设置初值为0C89H,指令书写应该如下:

MOV TH1,#0CH

MOV TL1,#89H

串行口控制寄存器(SCON):

SM0和SM1是串行口4种工作方式的选择位,它们控制串行口工作在哪种方式之下。

SM2是模式2和模式3的多机通信控制位。

REN :允许串行口接受位,REN = 1允许接受;REN = 0禁止接受,由软件置位或清零。

TB8:在方式2和3,作为第9位数据发送,在双机通信中常作为奇偶校验位,在多机通信中,常作为数据帧或地址帧的标识,TB8 = 1为地址帧,TB8 = 0为数据帧。

RB8:在模式2和3下,为接收到的第9位数据。

TI:发送中断标志位(中断源),硬件置位,软件清零。

RI:接受中断标志位(中断源),硬件置位,软件清零。

串行口作为一个中断源,中断入口地址只有一个(0023H),当用中断方式进行发送和接受时,需要查询是TI还是RI引发的中断请求。

串行数据缓存器(SBUF):实际上SBUF是两个在物理书独立的发送,接受缓冲器,可以同时发送,接收数据。两个缓冲器共用一个字节地址99H。可以通过对SBUF的读和写来进行区分是哪一个寄存器。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券