单片机 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;

比如这些,后面的地址是怎么来的?
展开
 我来答
意法半导体(中国)投资有限公司 2023-06-12
展开全部
单片机其实就是一种可以由人对它进行编程从而通过它控制一些与它相连的器件的微型处理器。通俗地说就是你用某种特定的语言在特定的软件里(如keil)编写好一段程序后通过一定的方法转到一个芯片里(这个芯片就是单片机),给芯片上电后它就可以根据你编的程序控制它所连接的其他器件了。希望能帮到你了… 更专业的解答可联系意法半导体,产品服务:意法半导体单片机产品线拥有业界宽广、极具创新力的32位产品系列 – STM32,覆盖超低功耗、超高性能方向.目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB),超…
一天入门51单片机
2017-07-19 · 单片机工程师,带你玩转奇妙的单片机
一天入门51单片机
采纳数:69 获赞数:7312

向TA提问 私信TA
展开全部
我是一名单片机工程师,对于什么是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年)都学不会,如果坚持,一个月后你就会感觉到单片机迷人的一面了。加油,祝你成功!
意法半导体(中国)投资有限公司
2023-06-12 广告
说得通俗点就是sfr就像杯子,杯子里可以有水也可以没水,但是他还是个杯子呀,ram掉电会丢数据,但丢的只是里面的数据(水)但ram还是真实存在的(杯子),ram掉电都里面的数据会还原成初始值而已,就像你的杯子原来没有水(初始值)后来有水了(... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
沁芳萧然
推荐于2017-10-06 · TA获得超过839个赞
知道小有建树答主
回答量:185
采纳率:0%
帮助的人:251万
展开全部
对于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;
是我这样认为,不一定准确。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ATF144X
推荐于2018-03-30 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5344
采纳率:77%
帮助的人:5034万
展开全部
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生产的单片机,因为加入了自己设计的功能选项,所以就增加了这些寄存器。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
学传古今h
2012-06-30
知道答主
回答量:28
采纳率:0%
帮助的人:23.5万
展开全部
地址是由单片机硬件(芯片设计)决定的,前面的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)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老友记爱学习
2017-03-02 · 说的都是干货,欢迎关注
老友记爱学习
采纳数:159 获赞数:4671

向TA提问 私信TA
展开全部
我是一名单片机工程师,很多人都有类似的问题发生,其实弄懂一个sfr,其它的也就懂了,我已经用通俗易懂的方法把它写在了一个贴子上,感兴趣的可以浏览一下。
SFR到底是什么:http://tieba.baidu.com/p/5004194830
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式