單片機的寄存器編程與位運算-焦點熱訊

2023-06-21 11:10:08 來源:學嵌入式的釘子君

凡事都要腳踏實地去做,不弛于空想,不騖于虛聲。努力只能做到合格,用心才能做到優秀。

這次一起來學習一下單片機開發時必備技術——位運算和寄存器編程


(相關資料圖)

目前已經發布了幾篇文章,文章多為個人觀點,可能會有錯誤。歡迎朋友們指正錯誤或提出寶貴建議,必有重謝!

一、位運算符號

常用的位運算符有:

符號結合方向功能
&向右按位與
向右
^向右按位異或
~向左按位取反
<<向右數據左移
>>向右數據右移

二、單片機開發為什么需要學習位運算?

單片機開發常用的編程方法有:寄存器法 和 庫函數法。其中基于寄存器編程是一種通用型的方法,即所有的單片機都可以采用寄存器方法進行編程。

那么寄存器又是什么?

初學者可以這樣理解:

1.寄存器是在單片機中真實存在的(有明確的地址)、有明確功能的“開關”或者“指示器”。

一個單片機中一般含有大量的、功能各異的寄存器,這些寄存器都有自己獨立的空間,分別控制著單片機的不同功能。

3.當需要控制單片機實現某種功能 或者 需要獲取單片機的工作狀態時,就必須要操作到對應的寄存器。

4.對于不同位數的單片機,其寄存器的位數也不同,并且一個寄存器可能通過不同的位來控制不同的功能。

總結:位運算在單片機開發中主要用途是操作寄存器,是單片機編程的基礎!其重要性可見一斑。

三、位運算的重點內容

假設下表中的X是單片機中某個寄存器。

功能表達式
將寄存器第n位置位X

一共就4行,非常好記。但知識點僅記住是沒用的,得實踐!現在我們基于一款單片機的手冊來模擬實操一下。有條件的朋友建議購買一套單片機套件,邊學邊練,效果加倍!

四、實例演示位運算

下方是一款單片機的一個寄存器表,來源于主流單片機型號STM32F1xx的參考手冊。圖中這個寄存器的功能是配置IO引腳的方向,比如配置引腳是作為輸入還是輸出。

若需要將單片機的PB4引腳配置為通用推挽輸出,那應該如何配置此寄存器呢?

Step1,結合引腳正確表示出該寄存器。由于操作的引腳是PB4,屬于GPIOB,故該寄存器寫作GPIOB->CRL。

Step2,閱讀表格中關于位功能的說明,找出需要操作該寄存器的哪些位。

由于待操作引腳序號為4,所以應操作該寄存器的第19~16位(因為這些位對應的功能是CNF4和MODE4,匹配該引腳)。

Step3,結合注釋部分,確定待操作位的值。從圖中可以看出MODE4(即第17、16位)可以配置為“01”以實現輸出模式;CNF4(即第19、18位)可以配置為“00”以實現通用推挽輸出模式。

Step4,將位運算與上一步結合,寫出代碼。

GPIOB- >CRL &=~(1< <19);GPIOB- >CRL &=~(1< <18);GPIOB- >CRL &=~(1< <17);GPIOB- >CRL |= (1< <16);化簡上方四行位運算,整理得:GPIOB- >CRL &=~(0xF< <16);//清零[19:16]GPIOB- >CRL |= (0x1< <16);

ps: 以上代碼僅是實現PB4引腳輸出數據的部分代碼。

若需要實現完整功能,還需要配置其他寄存器。

標簽:

上一篇:環球報道:MCU的時鐘樹講解
下一篇:最后一頁