凡事都要腳踏實(shí)地去做,不弛于空想,不騖于虛聲。努力只能做到合格,用心才能做到優(yōu)秀。
這次一起來學(xué)習(xí)一下單片機(jī)開發(fā)時必備技術(shù)——位運(yùn)算和寄存器編程。
(相關(guān)資料圖)
目前已經(jīng)發(fā)布了幾篇文章,文章多為個人觀點(diǎn),可能會有錯誤。歡迎朋友們指正錯誤或提出寶貴建議,必有重謝!
一、位運(yùn)算符號
常用的位運(yùn)算符有:
符號 | 結(jié)合方向 | 功能 |
---|---|---|
& | 向右 | 按位與 |
向右 | ||
^ | 向右 | 按位異或 |
~ | 向左 | 按位取反 |
<< | 向右 | 數(shù)據(jù)左移 |
>> | 向右 | 數(shù)據(jù)右移 |
二、單片機(jī)開發(fā)為什么需要學(xué)習(xí)位運(yùn)算?
單片機(jī)開發(fā)常用的編程方法有:寄存器法 和 庫函數(shù)法。其中基于寄存器編程是一種通用型的方法,即所有的單片機(jī)都可以采用寄存器方法進(jìn)行編程。
那么寄存器又是什么?
初學(xué)者可以這樣理解:
1.寄存器是在單片機(jī)中真實(shí)存在的(有明確的地址)、有明確功能的“開關(guān)”或者“指示器”。
一個單片機(jī)中一般含有大量的、功能各異的寄存器,這些寄存器都有自己獨(dú)立的空間,分別控制著單片機(jī)的不同功能。3.當(dāng)需要控制單片機(jī)實(shí)現(xiàn)某種功能 或者 需要獲取單片機(jī)的工作狀態(tài)時,就必須要操作到對應(yīng)的寄存器。
4.對于不同位數(shù)的單片機(jī),其寄存器的位數(shù)也不同,并且一個寄存器可能通過不同的位來控制不同的功能。
總結(jié):位運(yùn)算在單片機(jī)開發(fā)中主要用途是操作寄存器,是單片機(jī)編程的基礎(chǔ)!其重要性可見一斑。
三、位運(yùn)算的重點(diǎn)內(nèi)容
假設(shè)下表中的X是單片機(jī)中某個寄存器。
功能 | 表達(dá)式 |
---|---|
將寄存器第n位置位 | X |
一共就4行,非常好記。但知識點(diǎn)僅記住是沒用的,得實(shí)踐!現(xiàn)在我們基于一款單片機(jī)的手冊來模擬實(shí)操一下。有條件的朋友建議購買一套單片機(jī)套件,邊學(xué)邊練,效果加倍!
四、實(shí)例演示位運(yùn)算
下方是一款單片機(jī)的一個寄存器表,來源于主流單片機(jī)型號STM32F1xx的參考手冊。圖中這個寄存器的功能是配置IO引腳的方向,比如配置引腳是作為輸入還是輸出。
若需要將單片機(jī)的PB4引腳配置為通用推挽輸出,那應(yīng)該如何配置此寄存器呢?
Step1,結(jié)合引腳正確表示出該寄存器。由于操作的引腳是PB4,屬于GPIOB,故該寄存器寫作GPIOB->CRL。
Step2,閱讀表格中關(guān)于位功能的說明,找出需要操作該寄存器的哪些位。
由于待操作引腳序號為4,所以應(yīng)操作該寄存器的第19~16位(因?yàn)檫@些位對應(yīng)的功能是CNF4和MODE4,匹配該引腳)。
Step3,結(jié)合注釋部分,確定待操作位的值。從圖中可以看出MODE4(即第17、16位)可以配置為“01”以實(shí)現(xiàn)輸出模式;CNF4(即第19、18位)可以配置為“00”以實(shí)現(xiàn)通用推挽輸出模式。
Step4,將位運(yùn)算與上一步結(jié)合,寫出代碼。
GPIOB- >CRL &=~(1< <19);GPIOB- >CRL &=~(1< <18);GPIOB- >CRL &=~(1< <17);GPIOB- >CRL |= (1< <16);化簡上方四行位運(yùn)算,整理得:GPIOB- >CRL &=~(0xF< <16);//清零[19:16]GPIOB- >CRL |= (0x1< <16);
ps: 以上代碼僅是實(shí)現(xiàn)PB4引腳輸出數(shù)據(jù)的部分代碼。
若需要實(shí)現(xiàn)完整功能,還需要配置其他寄存器。
標(biāo)簽: