单片机的可位寻址区中,可以将要求可位录址的数据定义为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 = 0x90 ^ 1; //这里分别定义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);
}
|