单片机 sfr定义

寄存器的定义,后面的地址是固定的吗?就是说你要定义的时候要知道它的地址是吗?

sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;

比如这些,后面的地址是怎么来的?

我是一名单片机工程师,对于什么是sfr,下面的讲解你参考一下。
sfr全称为:special function register(翻译为:特殊功能寄存器)

先了解什么是寄存器。
打个比喻。
单片机里面,共有两种寄存器,第一种是ROM,第二种是RAM。
1 ROM的功能:ROM的数据在程序运行的时候是不容改变的,除非你再次烧写程序,他就会改变,就像我们的书本,印上去就改不了了,除非再次印刷,这个就是ROM的原理。
2 RAM的功能:RAM就是在程序运行中,数据会随时改变的,就像我们的黑板,写上了可以擦,擦完再写上去,相当于程序运行的时候,调用ROM里面的数据进行各种运算。

再来了解如何为特殊功能

这个sfr是在RAM(动态寄存器)里面的,如何为特殊功能呢?
举一个非常简单的例子区别一下,比如:sfr P0 = 0x80;,把单片机地址0x80改名字为P0,因为0x80这个地址是连接着单片机外面的P0口的,为什么要改名字呢?就是方便我们记忆运用。
那如何为不特殊呢?就是除了sfr或者我们没有刻意定义名字的,就归为不特殊。

一个弄明白之后,
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;

上面这些你就懂了,简单来了就是为RAM里面的地址改名字方便我们用。

其实这些东西你不用过于研究的,你了解一下就可以,因为我们在写程序中肯定有一个reg52.h的头文件,因为定义名字这个事情就在这个头文件里面了,你会调用就行,不用过于研究。
如果你想学习更多单片机和程序的知识,可以看看我整理好的“17个实验学会单片机”,百度一下“17个实验学会单片机”就可以看到在首页了。

关于尾声
学单片机靠的是坚持,不能三天打鱼两天晒网,只要坚持就会看到希望。如果不坚持,一辈子(100年)都学不会,如果坚持,一个月后你就会感觉到单片机迷人的一面了。加油,祝你成功!
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-06
对于SFR是固定的,这些地址是单片机设计时定义的。
这些不需要自己去定义,加入相应的头文件如reg51.h就可以了。在使用中可以直接使用。
也不用管这些地址是怎么来的。追问

我看到一些程序代码,他们自己定义了一些其它的寄存器。这是怎么回事?

sfr CLK_DIV = 0x97; //为STC单片机定义,系统时钟分频
//为STC单片机的IO口设置地址定义
sfr P0M1 = 0X93;
sfr P0M0 = 0X94;
sfr P1M1 = 0X91;
sfr P1M0 = 0X92;
sfrP2M1 = 0X95;
sfrP2M0 = 0X96;
//************************

这是在别人程序里面的,超声波测距的

追答

查了一下头文件,他使用的这些都是没有经过定义的。
我认为这些语句相当于定义了固定地址的寄存器,相当于C语句
unsigned char code 变量名 _at_ 0x97;
是我这样认为,不一定准确。

本回答被提问者和网友采纳
第2个回答  推荐于2018-03-30
P0~P3、PSW、ACC等这些寄存器在sfr中的地址,是intel设计MCS-51单片机时就定下的。后来许多厂家生产51单片机时都沿用了这定义,以保证程序的兼容性。
至于如下的寄存器
sfr CLK_DIV = 0x97; //为STC单片机定义,系统时钟分频
sfr P0M1 = 0X93;
sfr P0M0 = 0X94;
sfr P1M1 = 0X91;
sfr P1M0 = 0X92;
sfrP2M1 = 0X95;
sfrP2M0 = 0X96;
是STC生产的单片机,因为加入了自己设计的功能选项,所以就增加了这些寄存器。本回答被网友采纳
第3个回答  2012-06-30
地址是由单片机硬件(芯片设计)决定的,前面的P0、P1等只是定义的名称,代表该地址的寄存器,也可以用其他字符串代替。追问

sfr CLK_DIV = 0x97; //为STC单片机定义,系统时钟分频
//为STC单片机的IO口设置地址定义
sfr P0M1 = 0X93;
sfr P0M0 = 0X94;
sfr P1M1 = 0X91;
sfr P1M0 = 0X92;
sfrP2M1 = 0X95;
sfrP2M0 = 0X96;
//************************

这是超声波测距的一部分程序代码,他们为什么需要定义呢?

追答

51单片机关键字SFR用于定义特定功能专用寄存器,编译器会把SFR定义的寄存器使用直接访问方式访问,如果不定义后定义为普通变量,51编译器访问的是通用寄存器,应为51单片机的专用寄存器与部分通用寄存器地址空间重叠(80H-FFH)。

第4个回答  2017-03-02
我是一名单片机工程师,很多人都有类似的问题发生,其实弄懂一个sfr,其它的也就懂了,我已经用通俗易懂的方法把它写在了一个贴子上,感兴趣的可以浏览一下。
SFR到底是什么:http://tieba.baidu.com/p/5004194830

单片机中的SFR是什么?
SFR是Special Function Register特殊功能寄存器。SFR是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据。它是80C51单片机中最具有特殊的部分。现在所有80C51系列功能的增加和扩展几乎都是通过增加特殊功能寄存器SFR来达到目的的。对于80C51系列中的80C51,共定义了21个特殊功能寄存...

“单片机FSR是什么意
SFR(Special Function Register,特殊功能寄存器)是单片机中用于存储控制命令、状态或数据的寄存器,它们对微控制器的各个功能部件至关重要。在80C51单片机中,SFR占据了从80H到FFH的地址空间,具体大小取决于型号,通常包括21个或26个字节。这些寄存器专门用于管理和访问单片机的端口、定时器、串行通信口等硬件...

SFR是什么意思,指代什么
1. SFR代表特殊功能寄存器(Special Function Register)。在80C51单片机中,SFR是各个功能模块对应的寄存器,它们负责存储相应模块的控制指令、状态信息或数据。SFR是80C51单片机中非常特殊且重要的部分。随着80C51系列单片机功能的增强和扩展,几乎所有的改进都是通过增加特殊功能寄存器SFR来实现的。80C51定义了26个...

单片机 sfr定义
1. SFR是Special Function Register(特殊功能寄存器)的缩写。2. 在80C51单片机中,SFR是与各个功能部件相对应的寄存器,用于存储相应部件的控制命令、状态或数据。3. SFR是80C51单片机中最为特殊的部分,几乎所有80C51系列单片机功能的增加和扩展都是通过增加特殊功能寄存器SFR来实现的。4. 对于80C51系列单片...

单片机sfr定义
单片机SFR定义 单片机SFR是特殊功能寄存器的简称。它存在于单片机的内部存储空间中,用于存储控制单片机各种硬件模块工作的数据。详细解释如下:一、SFR概述 特殊功能寄存器是单片机内部的重要组成部分。这些寄存器具有特定的功能,控制着单片机的各种操作,如输入输出、定时器、中断等。通过对这些寄存器的配置和操作...

单片机sfr定义
1. 特殊功能寄存器(SFR)是单片机中用于特定控制和状态管理的寄存器。2. SFR位于单片机的RAM部分,它们被赋予特殊的名称以便于程序员识别和使用。3. 例如,将地址0x80的寄存器命名为P0,是为了方便控制与单片机端口P0相关的硬件。4. SFR的命名规则通常与单片机的端口和内部模块相对应,如P1、P2、P3等,...

“单片机FSR是什么意
在单片机编程中,SFR与一般的int、char类型变量不同,它们不是变量本身,而是对特殊功能寄存器的引用。这种引用方式简化了硬件控制的复杂性,允许开发者通过熟悉的变量名来操作硬件。例如,在80C51系列单片机中,定义了如下几个重要的SFR:- P0:并行I\/O口0的起始地址。- PSW:程序状态字,包含标志位和...

单片机sfr是什么意思?
SFR是Special Function Register(特殊功能寄存器)的缩写。这些寄存器位于单片机的RAM部分,它们赋予了单片机特定的功能。特殊功能寄存器与普通寄存器有何不同?普通寄存器通常用于存储数据,而特殊功能寄存器则用于控制单片机的各种操作,如输入输出、中断、时钟等。SFR如何简化编程过程?通过将RAM中的地址分配给...

单片机 sfr定义
单片机中,特殊功能寄存器(Special Function Register,简称SFR)扮演着重要的角色。SFR可以理解为RAM(随机存取存储器)中的特定地址,这些地址通常与单片机外部的硬件功能相关联。它们的作用类似于给硬件接口取个易记的名字,如P0、P1、P2等,使得编程时更加直观和方便。SFR不同于常规的ROM(只读存储器)...

单片机sfr定义
1. 在单片机sfr中,P0至P3寄存器、PSW(程序状态字)和ACC(累加器)等寄存器的地址是由Intel在设计MCS-51单片机时预设的。这一标准后来被多家厂商在生产51系列单片机时遵循,以确保不同设备间的程序兼容性。2. 以STC单片机为例,它具有独特的寄存器定义,例如:CLK_DIV被定义为0x97,用于系统时钟的...

相似回答