SFR 不是标准C 语言的关键字,而是Keil 为能直接访问80C51而提供了一个新的关键词。
功能:
用来定义硬件寄存器地址的关键字,具有定义硬件特性。
举个例子:
sfr P0 =0x80;
sfr P1 = 0x90;
(C语言,这样就定义了51系列MCU中0x80地址,在编程时可以用P0符号代替地址0x80,具有定义硬件特性,一般在SFR的定义在头文件reg51.h或reg52.h或者stc8g.h内。
经过定义之后,编程的时候可以直接使用p0=0xff p1=0xff来实现控制端口IO。
===============================================================================================================================
在C51里,利用sbit可访问RAM中可寻址位或SFR中可寻址位。
如果直接写P1.0,C 编译器并不能识别,而且P1.0也不是一个合法的C语言变量名,所以得给它另起一个名字,比如P1_0,可是P1_0 是不是就是P1.0呢?
C编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C的关键字sbit 来定义,sbit 的用法有三种:
第一种方法:sbit 位变量名=地址值
第二种方法:sbit 位变量名=SFR 名称^变量位地址值
第三种方法:sbit 位变量名=SFR 地址值^变量位地址值
例如,
定义P1 中的P1.1脚可以用以下三种方法:
sbit P1_1=0x92 //(1)说明:0x92是P1.1的位地址值
sbit P1_1=P1^1 //(2)说明:其中P1必须先用sfr定义好
sbit P1_1=0x90^2 //(3)说明:0x90就是P1的地址值
因此这里用sfr P1_0=P1^0;就是定义用符号P1_0 来表示P1.0引脚。