当前位置:
首页 >
单片机技术文章 >
MSP430单片机 > 详细内容
- MSP430中用位段定义自己的标志
- 发布时间:2009/7/31 阅读次数:1077 字体大小: 【小】 【中】【大】
在编写程序中,经常需要自己定义标志(位)。如果每个标志占用一个字节,会占用很大空间,可以用位段来实现,把若干个标志集中在一个存储单元中。
1.位段的定义
关于位段的定义,就不多说了,去查阅任何一本C语言的书都可以查到
2.微处理器中标志位的定义
对于MSP430,是16位处理器,可以一次读取16位的数据,标志位也可定义为16位的。
下面的定义将位段和共用体结合在一起用,因为共用体的长度取决于最长成员的长度,因此,可以在共用体中声明一个int成员,对它清0则可以清除整个标志字(覆盖)。
union FLAG
{
unsigned int BYTE;
struct
{
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
unsigned b3:1;
unsigned b4:1;
unsigned b5:1;
unsigned b6:1;
unsigned b7:1;
unsigned b8:1;
unsigned b9:1;
unsigned b10:1;
unsigned b11:1;
unsigned :4;
}bool;
}myFlag;
2.标志字的引用举例
#define change_bit myFlag.bool.b0
#define sov_bit myFlag.bool.b1
#define tb0_bit myFlag.bool.b4
#define tb1_bit myFlag.bool.b5
#define tb2_bit myFlag.bool.b6
#define tb3_bit myFlag.bool.b7
#define tv0_bit myFlag.bool.b8
#define tv1_bit myFlag.bool.b9
#define tv2_bit myFlag.bool.b10
#define tv3_bit myFlag.bool.b11
/************************************************
void mode_task(union FLAG *in_mode)//注意:共用体不能作为函数参数,也不能作为返回值,但是可以使用指向共用体变量的指针
{
in_mode -> bool.b0=1;
in_mode -> bool.b5=1;
/*也可这样写
in_mode -> BYTE|=0x21;*/
}
/********************************************/
void main(void)
{
my_Flag.BYTE=0X00;//整个标志字清0
while(1)
{
mode_task(&my_Flag);
}
}