如何對某一位置0或者置1?

方法一:
寫成宏,方便移植
#define setbit(x,y) x|=(1<<y) //將X的第Y位置1
#define clrbit(x,y) x&=!(1<<y) //將X的第Y位清0

方法二:
C語言位運算除了可以提高運算效率外,在嵌入式系統的編程中,它的另一個最典型的應用,而且十分廣泛地正在被使用着的是位間的與(&)、或(|)、非(~)操作,這跟嵌入式系統的編程特點有很大關係。我們通常要對硬件寄存器進行位設置

譬如,我們通過將AM186ER型80186處理器的中斷屏蔽控制寄存器的
第低6位設置爲0(開中斷2),最通用的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp &~INT_I2_MASK);

而將該位設置爲1的做法是:

#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp | INT_I2_MASK);

判斷該位是否爲1的做法是:

#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
if(wTemp & INT_I2_MASK)
{
… /* 該位爲1 */
}

方法三:
int a|=(1<<x) //X就是某位需要置1的數字,如第四位置1爲: a|=(1<<4)
int b&=~(1<<x) //把某位置0
x=x|0x0100    //把第三位置1
x=x&0x1011    //把第三位置0
#define BitGet(Number,pos) ((Number) >> (pos)&1)) //用宏得到某數的某位
#define BitGet(Number,pos) ((Number) |= 1<<(pos)) //把某位置1
#define BitGet(Number,pos) ((Number) &= ~(1<<(pos)) //把某位置0
#define BitGet(Number,pos) ((Number) ^= 1<<(pos)) //把Number的POS位取反
典型操作有:
WTCON |= (1 << 5) //WTCON的第五位清1
WTCON &= ~(1 << 5) //WTCON的第五位清0  

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/hongjiujing/archive/2008/03/13/2178593.aspx

置1就讓對應的寄存器和對應的位是1的值按位做或運算。
如 state |=0x0010;   //第5位置1
置0就讓對應的寄存器和對應的位是0的值按位做與運算。
如state &=~(0x0010);   //第5位清0

if( flag == 1 )
        //OUTPUT_BIT( PIN_D5 , 1 );//OUTPUT_D( 0X20 );
        {
            ValveState |= 0X20 ;
            OUTPUT_D( ValveState );
        }
    else if( flag == 0 )
        //OUTPUT_BIT( PIN_D5 , 0 );//OUTPUT_D( 0X00 );//關閉進樣閥,關條碼,關馬達
        {
            ValveState &= ~(0X20) ;
            OUTPUT_D( ValveState );
        }


 

置1就讓對應的寄存器和對應的位是1的值按位做或運算。
如 state |=0x0010;   //第5位置1
置0就讓對應的寄存器和對應的位是0的值按位做與運算。
如state &=~(0x0010);   //第5位清0

if( flag == 1 )
        //OUTPUT_BIT( PIN_D5 , 1 );//OUTPUT_D( 0X20 );
        {
            ValveState |= 0X20 ;
            OUTPUT_D( ValveState );
        }
    else if( flag == 0 )
        //OUTPUT_BIT( PIN_D5 , 0 );//OUTPUT_D( 0X00 );//關閉進樣閥,關條碼,關馬達
        {
            ValveState &= ~(0X20) ;
            OUTPUT_D( ValveState );
        }


最後一個方法有效

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章