在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。
下面我们用上一课的电路来实践一下这一课的知识。同样是做一下简单的跑马灯实验,项目名为RunLED2。程序如下:
- sfr P1 = 0x90; //这里没有使用预定义文件,
- sbit P1_0 = P1 ^ 0; //而是自己定义特殊寄存器
- sbit P1_7 = 0x90 ^ 7; //之前我们使用的预定义文件其实就是这个作用
- sbit P1_1 = 0x91; //这里分别定义P1端口和P10,P11,P17引脚
- void main(void)
- {
- unsigned int a;
- unsigned char b;
- do{
- for (a=0;a<50000;a++)
- P1_0 = 0; //点亮P1_0
- for (a=0;a<50000;a++)
- P1_7 = 0; //点亮P1_7
- for (b=0;b<255;b++)
- {
- for (a=0;a<10000;a++)
- P1 = b; //用b的值来做跑马灯的花样
- }
- P1 = 255; //熄灭P1上的LED
- for (b=0;b<255;b++)
- {
- for (a=0;a<10000;a++) //P1_1闪烁
- P1_1 = 0;
- for (a=0;a<10000;a++)
- P1_1 = 1;
- }
- }while(1);
- }
|