C語言位掩碼


在嵌入式編程的時候,比如對芯片的某個寄存器的某一位置位或清零,可以使用位掩碼

比如 REG是某個8位寄存器

1 /* 將REG第5位置位 */
2 REG  |= (1<<5); 3 
4 /* 將REG第2和6位置位 */
5 REG  |= (1<<2) |(1<<6); 
 /* 將REG第5位清零 */ REG &=  ~(1<<5); /* 將REG第2和6位清零 */ REG &=  ~( (1<<2) | (1<<6) ) ; 

其實上面的 1<< 5 就是0b000100000,,1<< 2 就是0b00000100 ,1<< 6 就是0b01000000

從而進一步使用宏定義

#define BIT2_MASK 0b00000100
#define BIT5_MASK 0b00100000
#define BIT6_MASK 0b01000000

從而程序變為

 /* 將REG第5位置位 */ REG |= BIT5_MASK; /* 將REG第2和6位置位,兩段代碼效果一樣 */ REG |= BIT2_MASK | BIT6_MASK; REG |= BIT2_MASK + BIT6_MASK; /* 將REG第5位清零 */ REG &=  ~BIT5_MASK; /* 將REG第2和6位清零,兩段代碼效果一樣*/ REG &= ~(BIT2_MASK | BIT6_MASK) ; REG &= ~(BIT2_MASK + BIT6_MASK) ;

其中的BITx_MASK就稱為位掩碼

掩碼還可以用於:

1.取出一個變量/寄存器中特定位數的值(高位/低位)

/* 一般寫法 */
/* 取出變量的高位和低位 */ uchar_var = 0x34; uchar_var >>= 4;/* 取出變量的高位 */ uchar_var <<= 4;/* 取出變量的低位 */
/* 使用位掩碼 */
/* 取出變量的高位和低位 */
#define H4_MASK 0b11110000 
#define L4_MASK 0b00001111  uchar_var = 0x34; uchar_var_l = uchar_var & L4_MASK;/*取出變量高位 */ uchar_var_h = (uchar_var & H4_MASK) >> 4;/* 取出變量低位 */

 

2.作為判斷條件

#define BIT3_MASK 0b00001000
#define BIT2_MASK 0b00000100
#define BIT1_MASK 0b00000010 If( (uchar_var & BIT3_MASK) != 0 )/* bit3是否置位*/ { … } If( (uchar_var & BIT2_MASK) == 0 )/* bit2是否清零*/ { … }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM