c51中的位寻址区是020H~02FH (BYTE)地址,共16字节
位寻址方式:直接位地址、位变量并在定义时给定地址(汇编或sbit)、特殊功能寄存器(sfr)或位寻址区的字节变量可用变量名+位号
sbit 用于定义固定地址的位变量,
与bit不同的地方是bit定义的一般不指定固定地址(但不是不能),由编译器分配
对于特殊功能寄存器(应在使用前由sfr关键字定义,如sfr P0=0x80)可以用 sbit P0_4= P0^4 (这里的^号不是与或符号)
对于定义时定义在位寻址区的变量 如 char bdata a; 也可以用sbit 定义来引用它的特定位,如 sbit bit_a1=a^1
但普通位寻址区的位变量在其它源文件中要使用时的声明形式是 extern bit bit_a1(与下文所述的sfr的位不同);因为没有extern sbit的说法
(可参阅keil C51 的help文件里Cx51 User's Guide——》Language Extensions——》Language Extensions——》bdata文件)
而sfr用sbit定义的位在其它文件中的引用则不同,需要在所有使用的文件中都用sbit进行定义,这个没有地方明确指出,但是可以
在keilC 自带的头文件中得到证明,如“at89x51.h”文件中 对P1_0使用sbit定义而不是声明,而这个头文件将会被包含进同一工程的若干个源文件中,编译时也会多次调入;另外个人曾经测试过对sfr使用和bdata变量在相同的源文件中定义,再在同一头文件中声明,得到的结果是bdata变量编译正常,而sfr提示UNSOLVED 提示。
|