微控制器位運算操作

2021-07-25 21:30:07 字數 2230 閱讀 9018

學習微控制器軟體的時候難免會設計修改某一位,例如給a暫存器的第3位置1,或者清零。在寫位時,要注意不能修改其他位,因為每一位都有自己的作用。下面就說一下具體怎麼操作:

先說一下口訣:清零 & (與)零, 置位 |(或)一 , 取反用 ~ ;

下面通過具體的栗子來學習一下:(以32為例)

1. 給定乙個整數a , 設定a的bit3 , 保證其他位不變。

a = a | (0b1000) ;

更好的形式是 a |= (1 << 3) ;

2. 給定乙個整數a , 設定a的bit3~bit7 , 保證其他位不變。

a = a | (0b1111 1000) ;

更好的形式是 a |= (0b11111 << 3) ; 或 a |= (0x1f << 3)

3. 給定乙個整數a , 清除a的bit3 , 保證其他位不變。

a = a & (0b0111) ;

更好的形式是 a &= (~(1 << 3)) ;

4. 給定乙個整數a , 清除a的bit3~bit7 , 保證其他位不變。

a = a &(0b0000 0111) ;

更好的形式是 a &= (~(0b11111 << 3)) 或 a &= (~(0x1f << 3))

5. 給定乙個整數a , 取出a的bit3~bit7 。

思想:

(1)將其他位清零

(2)右移3位

**:

a = (a & (0x1f << 3)) >> 3 ;

6. 給暫存器a的bit3~bit7賦值12

思想:

(1)將bit3~bit7清零

(2)將12左移3位 ,寫入a

**:

a = (a & ~(0x1f << 3)) | (12 << 3) ;

7. 給暫存器a的bit3~bit7加上12

思想:

(1)先取出bit3~bit7

(2)將取出的數加上12

(3)將a的bit3~bit7 清零

(4)將取出的數寫入a

**:

tmp = a | (0x1f << 3) >> 3 ;

tmp += 12 ;

a = a & ~(0x1f << 3) ;

a |= tmp << 3 ;

8. 給暫存器a的bit3~bit7 賦值4和 bit 8 ~ bit 12 賦值7

寫法一:(只是簡單的重複賦值運算)

a = (a & (~0x1f << 3)) | (4 << 3) ;

a = (a & (~0x1f << 8)) | (7 << 8) ;

寫法二:

a &= ~((0x1f << 3) | (0x1f << 8)) ;

公升級:用巨集定義來完成位運算

(從bit0開始算)

1、置位

置位特定位n:

#define set_nth_bit(x, n) ( x | ((1u)<<(n)) )

置位n到m位:

#define set_bit_n_to_m(x,n,m)(x | (~((~0u)<<(m-n

+1)))<<(n))

分析:第一步:((~0u)<<(m-n

+1) ) 產生(m-n)到31 位為 1 的數

第二步:(~((~0u)<<(m-n

+1)))產生0~m-n位為1的數

第三步:(~((~0u)<<(m-n

+1)))<<(n) 產生

第四步:採用位或,將特定位置為1

2、復位

復位特定位:

#define clear_nth_bit(x, n) ( x & ~((1u)<<(n)) )

復位n到m位:

#define clear_bit_n_to_m(x,n,m) (x & ((~0u)<<(m-n

+1))<<(n))

3、擷取變數的部分連續位

#define getbits(x, n, m) ((x & ~(~(0u)<<(m-n

+1))<<(n)) >> (n) )

微控制器位數

微控制器位數 指cpu處理的資料的寬度,參與運算的暫存器的資料長度?如果匯流排寬度與cpu一次處理的資料寬度相同,則這個寬度就是所說的微控制器位數。如果匯流排寬度與cpu一次處理的資料寬度不同 1 匯流排寬度小於cpu一次處理的資料寬度,則以cpu的資料寬度定義微控制器的位數,但稱為準多少位。比如著...

STM32微控制器位操作技巧 C語言

主要是位操作的一些技巧,在文章最後,還補充了幾點其他的,比如ifdef的使用 1.把變數的某位清零。定義乙個變數 a 1001 1111 unsigned char a 0x9f a 1 2 括號中的 1 左移兩位,1 2 得二進位制數 0000 0100 按位取反,1 2 得 1111 1011 ...

單片微控制器

微控制器又稱單片微控制器,它不是完成某乙個邏輯功能的晶元,而是把乙個計算機系統整合到乙個晶元上。相當於乙個微型的計算機,和計算機相比,微控制器只缺少了i o裝置。概括的講 一塊晶元就成了一台計算機。它的體積小 質量輕 便宜 為學習 應用和開發提供了便利條件。同時,學習使用微控制器是了解計算機原理與結...