0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【硬见小百科】单片机的特殊功能寄存器

云创硬见 2019-01-16 13:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。

<特殊功能寄存器地址映象表(一)>

<特殊功能寄存器地址映象表(二)>

<特殊功能寄存器地址映象表(三)>

几个常用的SFR

1、ACC:累加器,常常用A表示。这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后我们将学到指令,能发现,所有的运算类指令都离不开它。

2、B:一个寄存器。在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。

3、PSW:程序状态字。这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们能了解CPU的当前状态,并作出对应的处理。它的各位功能请看下表。

PSW也称为标志寄存器,了解这个对于了解单片机原理非常的重要,存放各有关标志。其结构和定义如下:

sfr各位的用途

(1)CY:进位标志。用于表示Acc.7有否向更高位进位。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。

例:78H+97H(01111000+10010111)

(2)AC:辅助进位标志也叫半进位标志。 用于表示Acc.3有否向Acc.4进位

例:57H+3AH(01010111+00111010)

(3)F0:用户标志位,由我们(编程人员)决定什么时候用,什么时候不用。

(4)RS1、RS0:工作寄存器组选择位。这个我们已知了。
RS1、RS0 = 00 —— 0区(00H~07H)

RS1、RS0 = 01 —— 1区(08H~0FH)

RS1、RS0 = 10 —— 2区(10H~17H)

RS1、RS0 = 11 —— 3区(18H~1FH)

(5)0V:溢出标志位。 表示Acc在有符号数算术运算中的溢出,什么是溢出我们稍后再谈吧。

(6)P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,不然为0。

例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。

4、DPTR(DPH、DPL):数据指针,能用它来访问外部数据存储器中的任一单元,如果不用,也能作为通用寄存器来用,由我们自已决定如何使用。16位,由两个8位寄存器DPH、DPL组成。主要用于存放一个16位地址,作为访问外部存储器(外RAMROM)的地址指针。

5、P0、P1、P2、P3:这个我们已经知道,是四个并行输入/输出口的寄存器。它里面的内容对应着管脚的输出。

6、SP:堆栈指针。(专用于指出堆栈顶部数据的地址。)

【学习建议】其实并不需要把上面的这些东西都死记硬背在脑子里面,这是很难的,我们只需要理解工作原理,一次看不懂就要多看几次,等到要写程序的时候,我们再把这些表格拿出来查阅。

以上所有信息仅作为学习交流使用,不作为任何学习和商业标准。若您对文中任何信息有异议,欢迎随时提出,谢谢!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45335

    浏览量

    663294
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用位操作精准配置单片机寄存器

    int state = READ_BIT(GPIOA_ODR, PIN_5); // 读取状态​3、使用结构体映射寄存器 单片机寄存器通常是地址连续的,可以使用结构体映射寄存器,提高
    发表于 11-24 07:22

    单片机启动&amp;库函数的构成

    多少字节的容量,32位单片机就是4字节,所以地址偏移量基本上就是4字节步进来累加的,某些情况会有多个寄存器一起负责一个功能的情况,这个时候偏移量要酌情理解。 那地址代表了寄存器,地址
    发表于 11-18 08:15

    C语言和单片机C语言有什么差异

    语言的功能特性外,它可以很好的操作底层的硬件接口。在C语言的基础上,如果你把一些单片机的端口或特殊功能寄存器加于定义,使用的时候会更加方便,写语句的时候,直接直观的编写。这样就差不多是
    发表于 11-14 07:55

    单片机的误区

    1.去背寄存器 寄存器不用死记背,,当我们去使用单片机外设的时候就要去配置,千万别去记寄存器,华维单片
    发表于 11-14 07:46

    刷知识也能上瘾,活力百科对年轻人做了什么?

    放下短视频刷起了百科,谁悄悄改写了年轻人的内容消费习惯?
    的头像 发表于 07-09 10:09 857次阅读
    刷知识也能上瘾,活力<b class='flag-5'>百科</b>对年轻人做了什么?

    51单片机笔记(建议收藏!)

    +外设”的结构,外设多,单片机就复杂些,总线位数高,运行就快一些。本质上还逃不出这个架构。对于设计人员编程来说,操作外设实际上就是读写各种特殊功能寄存器,传输数据就是读写总线,相应外设就是处理中断
    发表于 05-21 17:24

    第四章 什么是寄存器

    本篇文章我们讲解了寄存器的概念、地址映射和寄存器操作等内容,内容比较干,大家有个概念即可,不要求全部熟记掌握,有需要时可重复查阅观看。下一篇我们将开始进行实操内容,通过控制单片机的GPIO来点亮一颗LED,敬请期待!
    的头像 发表于 05-21 14:23 1128次阅读
    第四章 什么是<b class='flag-5'>寄存器</b>

    C51单片机及C语言知识点必备秘籍

    单片机关键知识点一览: 系列一 1:单片机简叙 2:单片机引脚介绍 3:单片机存储结构 4:第一个
    发表于 05-15 14:00

    用msp430f247单片机的SPI接口驱动ADS1298芯片,读出的寄存器值不正确,是哪里的问题?

    我用msp430f247单片机的SPI接口驱动ADS1298芯片,CLK选择内部2.048MHZ晶振,SCLK选择16MHZ的spi时钟,DVDD为3V。可以进行有效的寄存器写操作(用示波器观察
    发表于 02-14 06:12

    单片机的SPI控制ADS1191,发送命令写寄存器后读取相应寄存器的值就不一样,而且每次读出来的都不一样,为什么?

    现用单片机的SPI控制ADS1191,使用内置晶振时钟,发送命令写寄存器后,再读取相应寄存器的值就不一样,而且每次读出来的都不一样,设置让CLK脚在起振后输出时钟信号,示波器也测不到相应的时钟信号,请给予提示,已经停在这2天了
    发表于 01-23 08:38

    用51单片机实现与LDC1000的通讯,读取proximity data两个寄存器里面的值都是0x00,为什么?

    大家的帮助。 另外说一下,我们没有改其他寄存器的初始值,因为我们现在只想能读出proximity data 里面的数,精不精确还不重要。另外芯片所需要的TBCLK时钟频率是用51单片机定时实现的。频率大约100kHZ 求大家帮
    发表于 01-13 07:41

    将LDC1000配置了0X0B寄存器,各寄存器的值都变成了相应寄存器的Deffault值,为什么?

    我将LDC1000各寄存器配置后,当不配置0X0B,即传感处于待机状态时,单片机读回来各寄存器的值是正常的,但当配置了0X0B寄存器,即
    发表于 01-02 07:41

    百科启动“繁星计划”

    近日,百科携手中国科协、中国科学院大学共同举办了史记2024·科学百科100词发布会,并在此盛会上正式启动了“繁星计划”。这一计划的核心目标在于利用前沿的AI技术,包括数字人、智能体等,以及
    的头像 发表于 12-31 10:26 1146次阅读

    LDC1314与单片机通信正常,无法读出寄存器0X02的数据,为什么?

    LDC1314与单片机通信正常,可以读出id 但是无法读出寄存器0X02的数据 读出的结果一直是0x00
    发表于 12-27 07:34

    用LDC1000EVM接单片机单片机PWM输出6MHZ的方波给LDCLK,为什么寄存器读不到数据?

    你们好,我用LDC1000EVM的芯片和线圈那部分接飞思卡尔的单片机单片机PWM输出6MHZ的方波给LDCLK,SPI给的SCK是4M及100K都尝试过,写寄存器SDI线上可以量到正确的波形
    发表于 12-11 07:59