前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >8051的特殊功能寄存器

8051的特殊功能寄存器

作者头像
zy010101
发布2019-05-25 19:59:58
1.4K0
发布2019-05-25 19:59:58
举报
文章被收录于专栏:程序员

版权声明:本文为博主原创文章,转载请注明博客地址: https://cloud.tencent.com/developer/article/1433389

特殊功能寄存器

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

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

代码语言:txt
复制
    CY:进位位CY是在执行加法(减法)时,如果第7位有进位(借位),则将CY置1。
代码语言:txt
复制
    AC:辅助进位位AC,是指第3位向第4位有进位(借位)时,将AC置1.
代码语言:txt
复制
    F0:是用户标志位,留给我们用的
代码语言:txt
复制
    RS1和RS0是工作寄存器组选择位,由RS1和RS0控制选择哪一组工作寄存器工作。
代码语言:txt
复制
   OV:溢出标志位,在加减法运算的过程中,当第6位或者第7位其中的某一位有进位的时候,OV置1.
代码语言:txt
复制
       即第6位进位和第7位进位的异或(D6⊕D7)。
代码语言:txt
复制
   —:这个是保留位,在一些书中也写作是F1。和F0位差不多
代码语言:txt
复制
    P:奇偶校验位,8051进行的是偶校验。即当累加器ACC的内容中1的个数是奇数个,那么P就被置1,否则清零。

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

代码语言:txt
复制
累加器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个中断源,以及两个中断优先级(即就是最多允许两层的中断嵌套)。

代码语言:txt
复制
    EA:控制中断的总开关,EA置1时中断总允许打开。否则中断关闭。
代码语言:txt
复制
    ET2:启用/禁用定时器2的溢出或捕捉中断(仅对于8052)
代码语言:txt
复制
    ES :启用/禁用串行端口中断
代码语言:txt
复制
    ET1 :启用/禁用定时器1溢出中断
代码语言:txt
复制
    EX1 :启用/禁用外部中断1
代码语言:txt
复制
    ET0 :启用/禁用定时器0溢出中断
代码语言:txt
复制
    EX0 : 启用/禁用外部中断0

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

代码语言:txt
复制
    当把相应的位置1时,优先级变高,置0时,优先级变低。当全为1或者全为0时,优先级按照默认的优先级来执行。
代码语言:txt
复制
    (IP的每个位名字和IE寄存器每个位是相似的)

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

代码语言:txt
复制
       TF1(TF0):定时/计数器T1(TF0)的溢出标志,T1(T0)计数满后,该位由硬件置1.并向CPU发出中断请求。若CPU开放该中断,则进入中断服务子程序,并由硬件将该位清0.
代码语言:txt
复制
       TR1(TR0):T1(T0)的运行控制位。用软件控制,置1时,启动T1(T0);清0时,停止T1(T0)。
代码语言:txt
复制
       IE1(IE0):外部中断1(0)的中断标志位。置1时,向CPU发出中断请求。
代码语言:txt
复制
       IT1(IT0):外部中断1(0)的中断触发方式选择位。ITx = 1时,设置为边沿触发方式(下降沿);ITx = 0时,设置为电平触发方式(低电平)。在边沿触发方式下,CPU在响应中断请求之后,会由硬件将IEx清0.
代码语言:txt
复制
    定时器方式选择寄存器:(TMOD)该寄存器不能位寻址,只能整个字节操作。
代码语言:txt
复制
    其中高4位是控制定时器T1的,低4位是控制定时器T0的。
代码语言:txt
复制
    GATE:
代码语言:txt
复制
       当GATE = 1
代码语言:txt
复制
                则INT0引脚为高电平时且TR0置位,启动定时器T0;
代码语言:txt
复制
                则INT1引脚为高电平时且TR1置位,启动定时器T1。

当GATE = 0

代码语言:txt
复制
                        则TR0置位,启动定时器T0;
代码语言:txt
复制
                        则TR1置位,启动定时器T1。
代码语言:txt
复制
    C/T:定时/计数器方式选择位,C/T = 1时,工作在计数器模式下;当C/T = 0时。工作在定时器模式下。
代码语言:txt
复制
    M1和M0:定时/计数器工作方式选择位。
代码语言:txt
复制
    8051系列单片机的定时/计数器加1工作方式,因此需要将定时/计数的初值送到T0(T1)。

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

代码语言:txt
复制
                                        MOV    TH1,#0CH
代码语言:txt
复制
                                        MOV    TL1,#89H
代码语言:txt
复制
 串行口控制寄存器(SCON):
代码语言:txt
复制
    SM0和SM1是串行口4种工作方式的选择位,它们控制串行口工作在哪种方式之下。
代码语言:txt
复制
    SM2是模式2和模式3的多机通信控制位。
代码语言:txt
复制
    REN :允许串行口接受位,REN = 1允许接受;REN = 0禁止接受,由软件置位或清零。
代码语言:txt
复制
    TB8:在方式2和3,作为第9位数据发送,在双机通信中常作为奇偶校验位,在多机通信中,常作为数据帧或地址帧的标识,TB8 = 1为地址帧,TB8 = 0为数据帧。
代码语言:txt
复制
    RB8:在模式2和3下,为接收到的第9位数据。
代码语言:txt
复制
    TI:发送中断标志位(中断源),硬件置位,软件清零。
代码语言:txt
复制
    RI:接受中断标志位(中断源),硬件置位,软件清零。

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年04月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特殊功能寄存器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档