3.1.在c语言里对位的操作如一般如下:
PORTB|=(1<<2);//置PORTB的第2位=1
PORTB&=~(1<<2);//置PORTB的第2位=0
PORTB^|=(1<<2);//取反PORTB的第2位
While(PORTB&(1<<2));//判断1
While(!(PORTB&(1<<2)));//判断为0
3.2.IAR编译器对位的支持更强大,除了上面的方法外还有以下更简单的操作方法:
PORTB_ Bit2=1; //置PORTB的第2位=1
PORTB_ Bit2=0; //置PORTB的第2位=0
PORTB_ Bit2=~ PORTB_ Bit2;//取反PORTB的第2位
While(PORTB_ Bit2);或者while(PORTB_Bit2==1);//判断1
while(PORTB_ Bit2==0);//判断0
PORTC_Bit4=PORTB_Bit2;//把PORTB的第2位传送到PORTC的第4位
3.3.位变量定义:
由于iar使用了扩展语言,它对位域的支持变为最小为char类型,我们可以很方便地用来定义位变量。
采用结构体来定义位变量:
struct
{
unsigned char bit0:1;
unsigned char bit1:1;
unsigned char bit2:1;
unsigned char bit3:1;
unsigned char bit4:1;
unsigned char bit5:1;
unsigned char bit6:1;
unsigned char bit7:1;
}t;
然后就可以用以下位变量了。
t.bit0=1;
t.bit0=~t.bit0;
但是采用以上结构体做出来的位变量只可以访问t的位,不能够直接访问变量t,和标准的IAR位操作也不一样。采用联合体来定义效果更佳。
#i nclude<iom8.h>
union
{
unsigned char t;
struct
{unsigned char t_bit0:1,
t_bit1:1,
t_bit2:1,
t_bit3:1,
t_bit4:1,
t_bit5:1,
t_bit6:1,
t_bit7:1;
};
};
void main(void)
{
t_bit0=1;//访问变量t的位
t_bit0=~t_bit0;
PORTB=t;//直接访问变量t
}
位变量也可以直接定义在工作寄存器里。
3.4 bool 数据类型在C++语言里是默认支持的。
如果你在C代码的头文件里包含stdbool.h, bool数据类型也可以使用在C语言里。也可以使用布尔值 false和 true。不过是占用8位1个字节。
#i nclude<iom8.h>
#i nclude<stdbool.h>
bool y=0;//定义位变量
void main(void)
{
y=!y;//取反位变量
PORTB_Bit3=y;//传递位变量
|
|