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
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
#i nclude
bool y=0;//界说位变量
void main(void)
{
y=!y;//取反位变量
PORTB_Bit3=y;//传递位变量
}