
单片机 sfr定义
寄存器的定义,后面的地址是固定的吗?就是说你要定义的时候要知道它的地址是吗?sfrP0=0x80;sfrP1=0x90;sfrP2=0xA0;sfrP3=0xB0;sfr...
寄存器的定义,后面的地址是固定的吗?就是说你要定义的时候要知道它的地址是吗?
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
比如这些,后面的地址是怎么来的? 展开
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
比如这些,后面的地址是怎么来的? 展开
意法半导体(中国)投资有限公司
2023-06-12
展开全部
展开全部
我是一名单片机工程师,对于什么是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年)都学不会,如果坚持,一个月后你就会感觉到单片机迷人的一面了。加油,祝你成功!
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年)都学不会,如果坚持,一个月后你就会感觉到单片机迷人的一面了。加油,祝你成功!

2023-06-12 广告
说得通俗点就是sfr就像杯子,杯子里可以有水也可以没水,但是他还是个杯子呀,ram掉电会丢数据,但丢的只是里面的数据(水)但ram还是真实存在的(杯子),ram掉电都里面的数据会还原成初始值而已,就像你的杯子原来没有水(初始值)后来有水了(...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
对于SFR是固定的,这些地址是单片机设计时定义的。
这些不需要自己去定义,加入相应的头文件如reg51.h就可以了。在使用中可以直接使用。
也不用管这些地址是怎么来的。
这些不需要自己去定义,加入相应的头文件如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;
是我这样认为,不一定准确。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
地址是由单片机硬件(芯片设计)决定的,前面的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)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我是一名单片机工程师,很多人都有类似的问题发生,其实弄懂一个sfr,其它的也就懂了,我已经用通俗易懂的方法把它写在了一个贴子上,感兴趣的可以浏览一下。
SFR到底是什么:http://tieba.baidu.com/p/5004194830
SFR到底是什么:http://tieba.baidu.com/p/5004194830
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询