keil c 中的sfr定义和defne的定义有什么区别

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-27
C语言中的sfr表示什么意思

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

Fr是法郎(franc),有很多国家使用,一般会在Fr前加国家识别字符,如比利时法郎BFr、法国法郎FFr或FF、瑞士法郎SFr、卢森堡法郎LFr。如果未特别声明,一般也可以认为是法国法郎。

sfr 是KEIL中用来定义硬件寄存器地址的关键字,具有定义硬件特性。举个例子:
sfr P0 =0x80
(C语言,这样就定义了51系列MCU中0x80地址,在编程时可以用P0符号代替地址0x80,具有定义硬件特性)
在汇编中和DATA相似,举例子:
P0 DATA 80H
(汇编语言,说明和上面一样)

define 是KEIL中预处理命令,作为define后面字串的文本代替,一般没有定义硬件的特性,,在使用时,前面必须加上 # 号,编译器在编译时,先查找代码中的宏定义自串,然后在用在宏后面的数据去替代,例子:
#define pi 3.1415926
(以后使用中,可以用pi来代替3.1415926)
在使用define定义宏的时候,是没有数据类型指定的,而在调用的时候被相关数据类型转换。

Good Luck.

sfr是定义单片机固有的的寄存器,接口.像P1,TCON这样的.define是定义外部接口 并用字符代替

我理解为SFR用来直接描述硬件地址,而define是文字替换。
SFR不是ANSI C 里规定的,只有在keil里看到过,codeworrior里没看到过。

sfr 说明被定义的是且只能是特殊功能寄存器,special function register!
define 定义的是则比较宽泛咯!可以指令·空间·常量等

define 是KEIL中预处理命令,作为define后面字串的文本代替,一般没有定义硬件的特性,,在使用时,前面必须加上 # 号,编译器在编译时,先查找代码中的宏定义自串,然后在用在宏后面的数据去替代,例子