问个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 //(什么意思)
麻烦大家帮忙看看,想弄懂 图片1,自行体会。
图片2,文不对题,区别体会 ps:
书的pdf论坛下载,书的作者在论坛。 本帖最后由 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
剩下的就是补充一下联合体的“姿势”了
非常感谢 哈 明白了 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语言的按位与操作和按位或操作 不错。学习了!! proteldxp 发表于 2016-1-10 21:08
typedefunion {
unsigned char Byte;
struct {
没看到你说的哈哈{:titter:}
什么意思?
页:
[1]