中科因仑“3+1”工程特种兵精英论坛
标题:
IAR C 的位操作
[打印本页]
作者:
张衍波
时间:
2014-8-7 15:07
标题:
IAR C 的位操作
看着某大神做的不错,分享一下;在IAR的iomacro.h里面有这样一段说明:
#define SFR_B_N(_ADDR, _NAME, _B7, _B6, _B5, _B4, _B3, _B2, _B1, _B0) \
SFR_B_BITS_N(_NAME, _ADDR, \
Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7, \
_B0,_B1,_B2,_B3,_B4,_B5,_B6,_B7)
/*
SFR_B_N(0x3F,SREG,I,T,H,S,V,N,Z,C) Expands to:
__io union {
unsigned char SREG; // The sfrb as 1 byte
struct { // The sfrb as 8 bits
unsigned char SREG_Bit0:1,
SREG_Bit1:1,
SREG_Bit2:1,
SREG_Bit3:1,
SREG_Bit4:1,
SREG_Bit5:1,
SREG_Bit6:1,
SREG_Bit7:1;
};
struct { // The sfrb as 8 bits
unsigned char SREG_C:1,
SREG_Z:1,
SREG_N:1,
SREG_V:1,
SREG_S:1,
SREG_H:1,
SREG_T:1,
SREG_I:1;
};
} @ 0x3F;
*/
然后在iom162.h里面引用这个定义:(我用的是M162)
。。。
SFR_B_N(0x07,PORTE,Dummy7,Dummy6,Dummy5,Dummy4,Dummy3,PORTE2,PORTE1,PORTE0)
SFR_B_N(0x06,DDRE,Dummy7,Dummy6,Dummy5,Dummy4,Dummy3,DDE2,DDE1,DDE0)
SFR_B_N(0x05,PINE,Dummy7,Dummy6,Dummy5,Dummy4,Dummy3,PINE2,PINE1,PINE0)
。。。
在程序里面的用法是:
。。。
if(PINE_PINE2)
{
PORTE_PORTE2 = 0;
}
else
{
PORTE_PORTE2 = 1;
}
。。。
或者:
。。。
if(PINE_Bit2)
{
PORTE_Bit2 = 0;
}
else
{
PORTE_Bit2 = 1;
}
。。。
作者:
lxe
时间:
2014-8-7 16:16
如此高大上..有点不好理解
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/)
Powered by Discuz! X3.4