如题所述
第1个回答 推荐于2017-10-06
授之以渔吧
你有没有考虑一下便程序的时候为什么要引用? 如果不呢?
去看一下 #include<reg51.h>或者是类似的头文件你就会发现有
例:sfr P1 = 0x90;
这样的一行即定义P1 与地址0x90 对应,P1 口的地址就是0x90.
SFR的定义在头文件reg51.h或reg52.h中。
在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的地址值本回答被提问者和网友采纳
你有没有考虑一下便程序的时候为什么要引用? 如果不呢?
去看一下 #include<reg51.h>或者是类似的头文件你就会发现有
例:sfr P1 = 0x90;
这样的一行即定义P1 与地址0x90 对应,P1 口的地址就是0x90.
SFR的定义在头文件reg51.h或reg52.h中。
在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的地址值本回答被提问者和网友采纳
第2个回答 2014-11-21
规定的啊
看头文件
第3个回答 2014-11-21
人工语言,可以理解为一些规定,哪有为什么呀。