1.bit和sbit都是C51扩展的变量类型。
bit和int char之类的差不多,只不过char=8位, bit=1位罢了。都是变量,编译器在编译过程中分配地址。除非你指定,不然这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只需0和1两种值,意义有点像Windows下VC中的BOOL。
sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi xxx = REGE^6这样的界说,这个sbit量就确认地址了。sbit大部分是用在寄存器中的,便利对寄存器的某位进行操作的。
2.bit位标量
bit位标量是C51编译器的一种扩大数据类型,运用它可界说一个位标量,但不能界说位指针,也不能界说位数组。它的值是一个二进制位,不是0便是1,相似一些高档言语中的Boolean类型中的True和False。
3.sfr特别功用寄存器
sfr也是一种扩大数据类型,点用一个内存单元,值域为0~255。运用它能够拜访51单片机内部的一切特别功用寄存器。如用sfr P1 = 0x90这一句定P1为P1端口在片内的寄存器,在后边的句子中咱们用以用P1 = 255(对P1端口的一切引脚置高电平)之类的句子来操作特别功用寄存器。
sfr P1 = 0x90; //界说P1 I/O 口,其地址90H
sfr 要害定后边是一个要界说的姓名,可任意选取,但要契合标识符的命名规矩,姓名最好有必定的意义如P1 口能够用P1 为名,这样程序会变的好读很多.等号后边有必要是常数,不允许有带运算符的表达式,并且该常数有必要在特别功用寄存器的地址规模之内(80H-FFH),详细可检查附录中的相关表.
sfr 是界说8 位的特别功用寄存器而sfr16 则是用来界说16 位特别功用寄存器,
如8052 的T2 定时器,能够界说为:
sfr16 T2 = 0xCC; //这儿界说8052 定时器2,地址为T2L=CCH,T2H=CDH
用sfr16 界说16 位特别功用寄存器时,等号后边是它的低位地址,高位地址必定要坐落物
理低位地址之上.留意的是不能用于定时器0 和1 的界说.
sbit 可界说可位寻址目标.如拜访特别功用寄存器中的某位.其实这样应用是常常要
用的如要拜访P1 口中的第2 个引脚P1.1.咱们能够照以下的办法去界说:
(1) sbit 位变量名=位地址
sbit P1_1 = Ox91;
这样是把位的肯定地址赋给位变量.同sfr 相同sbit 的位地址有必要坐落80H-FFH 之间.
(2) sbit 位变量名=特别功用寄存器名^位方位
sft P1 = 0x90;
sbit P1_1 = P1 ^ 1; //先界说一个特别功用寄存器名再指定位变量名地点的方位,当可
寻址位坐落特别功用寄存器中时可采用这种办法
(3) sbit 位变量名=字节地址^位方位
sbit P1_1 = 0x90 ^ 1;
这种办法其实和2 是相同的,仅仅把特别功用寄存器的位址直接用常数表明.
在C51
存储器类型中供给有一个bdata 的存储器类型,这个是指可位寻址的数据存储器,坐落单
片机的可位寻址区中,能够将要求可位录址的数据界说为bdata
unsigned char bdata ib; //在可位录址区界说ucsigned char 类型的变量ib
int bdata ab[2]; //在可位寻址区界说数组ab[2],这些也称为可寻址位目标
sbit ib7=ib^7 //用要害字sbit 界说位变量来独立拜访可寻址位目标的其间一位
sbit ab12=ab[1]^12;
操作符”^”后边的位方位的最大值取决于指定的基址类型,char0-7,int0-15,long0-31.
sfr 并规范C 言语的要害字,而是Keil 为能直接拜访80C51 中的SFR 而供给了一个新
的要害词,其用法是:
sfrt 变量名=地址值。
2)符号P1_0 来表明P1.0 引脚。
在C 言语里,假如直接写P1.0,C 编译器并不能辨认,并且P1.0 也不是一个合法的C
言语变量名,所以得给它另起一个姓名,这儿起的名为P1_0,但是P1_0 是不是便是P1.0
呢?你这么以为,C 编译器可不这么以为,所以有必要给它们树立联络,这儿运用了Keil C
的要害字sbit 来界说,sbit 的用法有三种:
榜首种办法:sbit 位变量名=地址值
第二种办法:sbit 位变量名=SFR 称号^变量位地址值
第三种办法:sbit 位变量名=SFR 地址值^变量位地址值
如界说PSW 中的OV 能够用以下三种办法:
sbit OV=0xd2 (1)阐明:0xd2 是OV 的位地址值
sbit OV=PSW^2 (2)阐明:其间PSW 有必要先用sfr 界说好
sbit OV=0xD0^2 (3)阐明:0xD0 便是PSW 的地址值
因而这儿用sfr P1_0=P1^0;便是界说用符号P1_0 来表明P1.0 引脚,假如你乐意也能够
起P10 一类的姓名,只需下面程序中也随之更改就行了。
4.sfr16 16位特别功用寄存器
sfr16占用两个内存单元,值域为0~65535。sfr16和sfr相同用于操作特别功用寄存器,所不同的是它用于操作占两个字节的寄存器,好定时器T0和T1。
5.sbit可录址位
sbit同位是C51中的一种扩大数据类型,运用它能够拜访芯片内部的RAM中的可寻址位或特别功用寄存器中的可寻址位。如从前咱们界说了
sfr P1 = 0x90; //因P1端口的寄存器是可位寻址的,所以咱们能够界说
sbit P1_1 = P1^1; //P1_1为P1中的P1.1引脚
//相同咱们能够用P1.1的地址去写,如sbit P1_1 = 0x91;
这样咱们在今后的程序句子中就能够用P1_1来对P1.1引脚进行读写操作了。一般这些能够直接运用体系供给的预处理文件,里边已界说好各特别功用寄存器的简略姓名,直接引证能够省去一点时刻,我自己是一向用的。当然您也能够自己写自己的界说文件,用您以为好记的姓名。