51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > 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);
   }
  }
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号