1.bit位标量 不是0就是1。
2.sbit P1_1 = Ox91; //这样是把位的绝对地址赋给位变量.同sfr 一样sbit 的位地址必须位于80H-FFH 之间.
用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。如先前我们定义了
sfr P1 = 0x90; //因P1端口的寄存器是可位寻址的,所以我们可以定义
sbit P1_1 = P1^1; //P1_1为P1中的P1.1引脚
//同样我们可以用P1.1的地址去写,如sbit P1_1 = 0x91;
3.sfr特殊功能寄存器:是一种扩充数据类型、sfr P1 = 0x90; //定义P1 I/O 口,其地址90H
T2 定时器,可以定义为: sfr16 T2 = 0xCC; //这里定义8052 定时器2,地址为T2L=CCH,T2H=CDH
等号后面是它的低位地址,高位地址一定要位于物理低位地址之上.注意的是不能用于定时器0 和1 的定义.。
4.volatile:变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错
内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。
编译器优化常用的方法有:将内存变量缓存到寄存器;由于访问寄存器的速度快于访内存,所以编译器一般 都会作优化以减少访内存。
如果变量加上volatile修饰,则编译器就不会对此变量的读写操作进行优化,即不通过寄存器缓冲而直接访内存。
该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程,
对于C编译器来说,它并不知道这个值会被其他线程修改。自然就把它cache在寄存器里面。C 编译器是没有线程概念的
volatile 的本意是指:这个值可能会在当前线程外部被改变。