-佛听- 发表于 2016-1-9 12:35:53

问个AVR位操作的问题

大家都知道AVR是不能直接进行位操作 ,所以我们需要编写一个函数使得我们可以去像51单片机一样进行位带操作。
typedefunion {
unsigned char Byte;
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; //为什么这样定义的
} Bits;
} REG;

typedef REG*P_REG;

#define GET_BIT(NAME,B)   (*((REG volatile *)(&NAME))).Bits.BIT ## B    //(什么意思)

-佛听- 发表于 2016-1-9 12:36:13

麻烦大家帮忙看看,想弄懂

rundream 发表于 2016-1-9 15:03:37

图片1,自行体会。
图片2,文不对题,区别体会

rundream 发表于 2016-1-9 15:05:29

ps:
    书的pdf论坛下载,书的作者在论坛。

rundream 发表于 2016-1-9 15:27:27

本帖最后由 rundream 于 2016-1-9 19:34 编辑

Bits.BIT ## B:##是宏连接的意思,例如你要取出bit7 ,那么B==7, BITS.BIT##B==BITS.BITB==BITS.BIT7,就是这么代换的!
C比较渣,所以就贴图了{:sad:}

rundream 发表于 2016-1-9 19:36:13

剩下的就是补充一下联合体的“姿势”了

-佛听- 发表于 2016-1-10 19:17:14

rundream 发表于 2016-1-9 19:36
剩下的就是补充一下联合体的“姿势”了

非常感谢 哈   明白了      

proteldxp 发表于 2016-1-10 21:08:09

typedefunion {
unsigned char Byte;
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; //为什么这样定义的
} Bits;
} REG;

typedef REG*P_REG;

#define GET_BIT(NAME,B)   (*((REG volatile *)(&NAME))).Bits.BIT ## B    //(什么意思)

这个就是C语言的按位与操作和按位或操作

wlksosfytz 发表于 2016-1-10 21:46:15

不错。学习了!!

rundream 发表于 2016-1-14 20:04:14

proteldxp 发表于 2016-1-10 21:08
typedefunion {
unsigned char Byte;
struct {


没看到你说的哈哈{:titter:}
什么意思?
页: [1]
查看完整版本: 问个AVR位操作的问题