微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > IAR for AVR 学习笔记(3)--位操作

IAR for AVR 学习笔记(3)--位操作

时间:11-13 来源:互联网 点击:
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;//传递位变量
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top