中科因仑“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