搜索
bottom↓
回复: 8

C51里,我sfr alarm=0;这样定义一个特殊功能寄存器可以么?

[复制链接]

出0入0汤圆

发表于 2012-9-25 12:53:49 | 显示全部楼层 |阅读模式
C51里,我sfr alarm=0;这样定义一个特殊功能寄存器可以么?会不会影响其他功能

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-9-25 12:53:50 | 显示全部楼层
楼主看来对SFR的理解不正确。
SFR是keil开发环境下自有的关键词。意在告诉编译器一些信息。(其实你写的C语言代码就是为了告诉编译器你想做的事情而已。)
特殊功能寄存器就是一群挂在总线上的可读可写的“变量”。由于这些“变量”上直接连着电路,对应着一些功能,所以被称为特殊功能寄存器。
SFR  XXX=0x69   这样的写法就是告诉编译器,以后碰到对XXX的操作就是对地址0x69这个单元的内容做操作。51的特殊功能寄存器就是以  reg52.h 文件的内容,SFR关键词来告诉编译器进行编译的。
实际上你直接用指针操作也是可以的。只不过是,51单片机对特殊功能寄存器和RAM、ROM的地址编排比较特殊,所以用SFR更好的告诉编译器:“0x69这个地址是指特殊的地址,与ROM是不一样的“。
如果你的51堂握得很好的话,你通篇用绝对地址访问也不会有问题。

不过貌似楼主定义sfr  alrm=0的时候,只是想有个变量罢了。那你就写 unsigned char alrm=0就可以了。编译器会把这个变量按排在RAM里。与寄存器无关。

出0入0汤圆

发表于 2012-9-25 13:22:46 | 显示全部楼层
能否这样定义,跟C51没关系,跟你用的编译器有直接关系。  看看你用的编译器的帮助文件吧。

出0入0汤圆

发表于 2012-9-25 13:39:19 | 显示全部楼层
特殊功能寄存器的地址必须是单片机支持的应该才可以吧 。

出0入0汤圆

发表于 2012-9-25 17:02:24 | 显示全部楼层
报错。无效的基地址,一个sfr或sbit声明的基地址是错误的,有效的基地址范围在0x80到0xFF之间。

地址0在RAM范围,并且还是用得很频繁的R0,C51中是不需要编程者干预的。
非要干预(只读),用_at_来定位变量地址,或者用指针。

出0入0汤圆

发表于 2012-9-25 23:38:13 来自手机 | 显示全部楼层
SFR怎么可以定义成这样?
地址无效 0x80到FF才可以用SFR定义

出0入0汤圆

发表于 2012-9-26 11:59:21 | 显示全部楼层
jswd0810 发表于 2012-9-26 09:23
同意楼上,一般这个都是在
#include
里没有包含进去而单片机功能有所扩展时用的,不能随便加的 ...

是啊 SFR通常不要自己定义 要在程序里做一个标志位的话 用一个BYTE的变量就可以了

出0入0汤圆

发表于 2012-9-26 12:31:33 | 显示全部楼层
用过一些51单片机的增强版,增加了一些寄存器,由于reg52.h里边没有这些寄存器的描述,所以需要手动添加。无论把SFR指令放在.c里,还是改造reg52.h里,效果是一样的,告诉编译器:”爷要求你把XXX当成0x69这个寄存器构域的地址来用,读他写他都去找0x69这个地址去访问去!“
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表