博客專欄

EEPW首頁 > 博客 > 單片機(jī)的寄存器類型及操作教程

單片機(jī)的寄存器類型及操作教程

發(fā)布人:utmel 時間:2023-05-24 來源:工程師 發(fā)布文章

  大家都認(rèn)為計算機(jī)可以做任何事,對我們的生活有巨大的作用,尤其是在學(xué)習(xí)單片機(jī)的過程中。學(xué)習(xí)計算機(jī)可以教會我們分析和解決問題,而學(xué)習(xí)單片機(jī)可以幫助我們更好地理解計算機(jī)如何根據(jù)我們的想法解決問題。本文帶你了解寄存器,它將伴隨學(xué)習(xí)單片機(jī)的全過程。寄存器是連接硬件和軟件的重要紐帶。計算機(jī)的任何功能都離不開寄存器。中央處理器也有寄存器??偩€通信、通過注冊、內(nèi)存分頁等一切都基于寄存器。電子洞和多彩的計算機(jī)世界之間有更多的寄存器,如鏈接。它們看起來很復(fù)雜,但它們很清楚。即便所有的計算機(jī)一夜之間突然消失,人類也可以從電子管和打孔紙帶開始,一層一層地構(gòu)建計算機(jī)世界。我們所知道的只是這個龐大系統(tǒng)中的滄海一粟。

  1.什么是寄存器

  寄存器是CPU內(nèi)部的一種存儲器,分為通用寄存器和特殊功能寄存器(8086也細(xì)分為特殊功能寄存器)。通用寄存器,顧圖2 單片機(jī)寄存器名思義是通用的。它們可以存儲操作數(shù)、運算結(jié)果、內(nèi)存地址等數(shù)據(jù),在用C語言編程時,編譯器一般負(fù)責(zé)安排通用寄存器的使用,無需直接聯(lián)系它們。特殊功能寄存器具有特定功能,其中一些作用于CPU,比如PC存放下一條指令的地址,SP記錄棧頂在內(nèi)存中的位置,其中一些與IO模塊相連,單片機(jī)程序通過這些寄存器控制各種外設(shè)。

寄存器.jpg

圖1 寄存器

  我們通常使用的單片機(jī)是atmega324pa,它的封裝種類很多,管腳數(shù)量不同,但通用輸入輸出(GPIO)管腳有32個。由于AVR架構(gòu)是8位字長,因此CPU一次處理1位數(shù)據(jù)和8位數(shù)據(jù)所需的時間相同。32個引腳被組織成4個端口,即PA、Pb、PC和PD。在微型和微型微控制器的AVR架構(gòu)中,每個端口都有三個寄存器來控制數(shù)字信號IO,分別是portx、ddrx和PINX。這里的X是a、B、C或D。由于四個端口在數(shù)字IO方面是相同的,我們將它們組合起來。因此,對于每個引腳Pxn,有3個位,portxn、ddxn(不帶R)和pinxn,來控制其數(shù)字io。

  ddxn控制引腳方向:ddxn為1時,輸出Pxn;當(dāng)ddxn為0時,輸入Pxn。

  當(dāng)輸入Pxn時,如果portxn為1,則該引腳通過上拉電阻連接到VCC;否則,引腳懸空。

  輸出Pxn時,若portxn為1,引腳輸出高電平;否則,引腳輸出低電平。

  pinxn的值是Pxn引腳的電平。如果將1寫入pinxn,則portxn的值會翻轉(zhuǎn)。

  寄存器還有很多細(xì)節(jié),比如MCUCR寄存器中PUD位的作用、復(fù)位后寄存器的值、輸入/輸出切換的方法、讀取引腳電平的延遲、未連接引腳的處理方法等。

  2.什么是單片機(jī)寄存器

  寄存器是內(nèi)存階層中的最頂端,也是系統(tǒng)獲得操作資料的最快速途徑。寄存器通常都是以他們可以保存的位元數(shù)量來估量,舉例來說,一個“8位元寄存器”或“32位元寄存器”。寄存器現(xiàn)在都以寄存器檔案的方式來實作,但是他們也可能使用單獨的正反器、高速的核心內(nèi)存、薄膜內(nèi)存以及在數(shù)種機(jī)器上的其他方式來實作出來。寄存器通常都用來意指由一個指令之輸出或輸入可以直接索引到的暫存器群組。更適當(dāng)?shù)氖欠Q他們?yōu)椤凹軜?gòu)寄存器”。例如,x86指令集定義八個32位元寄存器的集合,但一個實作x86指令集的CPU可以包含比八個更多的寄存器。寄存器是CPU內(nèi)部的元件,寄存器擁有非常高的讀寫速度,所以在寄存器之間的數(shù)據(jù)傳送非???。

單片機(jī)寄存器.jpg

圖2 單片機(jī)寄存器

  3.單片機(jī)寄存器的類型

  3.1累加器A

  累加器A是微處理器中使用最頻繁的寄存器。在算術(shù)和邏輯運算時它有雙功能:運算前,用于保存一個操作數(shù);運算后,用于保存所得的和、差或邏輯運算結(jié)果。

  3.2數(shù)據(jù)寄存器DR

  數(shù)據(jù)寄存器通過數(shù)據(jù)總線向存儲器和輸入/輸出設(shè)備送(寫)或取(讀)數(shù)據(jù)的暫存單元。它可以保存一條正在譯碼的指令,也可以保存正在送往存儲器中存儲的一個數(shù)據(jù)字節(jié)等等。

  3.3指令寄存器IR和指令譯碼器ID

  指令包括操作碼和操作數(shù)。指令寄存器是用來保存當(dāng)前正在執(zhí)行的一條指令。當(dāng)執(zhí)行一條指令時,先把它從內(nèi)存中取到數(shù)據(jù)寄存器中,然后再傳送到指令寄存器。當(dāng)系統(tǒng)執(zhí)行給定的指令時,必須對操作碼進(jìn)行譯碼,以確定所要求的操作,指令譯碼器就是負(fù)責(zé)這項工作的。其中,指令寄存器中操作碼字段的輸出就是指令譯碼器的輸入。

  3.4程序計數(shù)器PC

  PC用于確定下一條指令的地址,以保證程序能夠連續(xù)地執(zhí)行下去,因此通常又被稱為指令地址計數(shù)器。在程序開始執(zhí)行前必須將程序的第一條指令的內(nèi)存單元地址(即程序的首地址)送入PC,使它總是指向下一條要執(zhí)行指令的地址。

  3.5地址寄存器AR

  用來保存當(dāng)前CPU所訪問的內(nèi)存單元的地址。由于在內(nèi)存和CPU之間存在著操作速度上的差別,所以必須使用地址寄存器來保持地址信息,直到內(nèi)存的讀/寫操作完成為止址寄存器(Address Register,AR)用來保存當(dāng)前CPU所訪問的內(nèi)存單元的地址。由于在內(nèi)存和CPU之間存在著操作速度上的差別,所以必須使用地址寄存器來保持地址信息,直到內(nèi)存的讀/寫操作完成為止。數(shù)據(jù)寄存器DR用來暫存微處理器與存儲器或輸人/輸出接口電路之間待傳送的數(shù)據(jù)。地址寄存器AR和數(shù)據(jù)寄存器DR在微處理器的內(nèi)部總線和外部總線之間,還起著隔離和緩沖的作用。

  4.單片機(jī)寄存器的使用教程

  要使用寄存器,需要寫#include,然后就可以使用PORTA、DDRB、PINC等寄存器。它們是宏定義。不必探索它們是如何擴(kuò)展的。只需要知道這些宏是可以讀、賦值和位操作的,就像uint8_t類型變量一樣。但是像PORTA0SumDDB7宏定義這樣的東西并不代表寄存器上的位。它們實際上是字面常量,比如PORTAx寄存器表示寄存器PORTA的第x位(0為最低位,7為最高位),其值為X。因此,直接復(fù)制這些宏是不正確的(不僅意思不對,編譯也不會通過)。

  在開發(fā)板的庫函數(shù)中提供包含多個位操作的宏函數(shù)。可以拿出存儲器的手冊來,看看后面是怎么實現(xiàn)的。

  讓我們舉個例子,點亮一個LED,首先打開紅色LED。原理圖第2頁左上角紅色LED通過電阻與網(wǎng)絡(luò)LED0相連,第1頁LED0與單片機(jī)PC4引腳相連,所以我們需要讓PC4腳輸出高電平。回到三個寄存器的功能。輸出高電平要求ddxn和portxn同時為1。我們把X和N分別用C和4取進(jìn)去,也就是我們希望ddc4和portc4為1。

  如果寄存器的一個位置為1,則set_bit實現(xiàn)。它需要兩個參數(shù),要操作的整數(shù)變量和表示第一個數(shù)字的整數(shù)。將ddc4設(shè)置為1應(yīng)該寫入set_bit(DDRC,4);4可以用DDC4替換,就是這樣定義的。同理,portc4可以設(shè)置為1。點亮紅色LED的整個過程如下:

紅色LED.jpg

  接下來是存儲器的數(shù)字輸入。使用第一個按鍵相關(guān)的例子,保持LED狀態(tài)與按鍵一致,即按下點亮。

  要讀取寄存器中的一位,可以使用read_bit。如果引腳上的電平為高電平,則read_bit的運算結(jié)果不為0(但不一定是布爾值1)。注意按鍵時引腳電平是低的,所以讀取引腳電平的結(jié)果是你是否按下該鍵。

  原理圖中,key的一端接btn0網(wǎng)絡(luò),再接單片機(jī)的PA4引腳。所以按鍵是否按下應(yīng)該寫成:!read_bit(PINA,4)。

  引腳應(yīng)在讀取前配置為輸入。雖然是reset后默認(rèn)輸入的,在這個例子中沒有必要給dda4寫0,但是寫清楚是一個好習(xí)慣,讓看這段代碼的人(可能是別人也可能是自己)明白PA4是輸入。對于porta4,由于該引腳外接了上拉電阻,因此無需使能內(nèi)部上拉電阻。

寄存器代碼操作.jpg

  結(jié)合按鍵動作的知識,應(yīng)該知道如何直接通過寄存器操作來判斷按鍵動作。值得注意的是,這些程序都不需要在項目屬性中將libee1庫添加到鏈接器。雖然代碼使用,但它們都是宏定義,獨立于鏈接器。

  5.關(guān)于單片機(jī)寄存器的常見問題

  5.1什么是單片機(jī)寄存器?

  簡單地說,寄存器是一種內(nèi)存。通常寄存器位于 CPU 或 MCU(微控制器)內(nèi),非常靠近算術(shù)單元或直接連接到各種 I/O 端口。由于這個位置或特殊設(shè)計,與其他類型的存儲器相比,寄存器在讀/寫速度方面要快得多。

  5.2單片機(jī)寄存器有什么作用?

  寄存器的單片機(jī)(計算機(jī))的存儲單元,是存取數(shù)據(jù)較為方便、快速地方寄存器常用于存放使用比較頻繁的數(shù)據(jù),再參與運算,都很容易。

  5.3哪些計算機(jī)使用單芯片處理器?

  單芯片云計算機(jī)(SCC) 是英特爾實驗室開發(fā)的一種實驗性微處理器,SCC 微處理器包括集成在單個硅芯片上的 48 個內(nèi)核,SCC 具有雙核 SCC 磁貼、內(nèi)存控制器和 24 路由器網(wǎng)狀網(wǎng)絡(luò)。

  5.4什么是單芯片CPU?

  大部分微機(jī)的ALU和控制單元都是在一塊硅片上組合制造的。大多數(shù)現(xiàn)代 CPU 都是微處理器,這意味著它們包含在單個集成電路 (IC) 芯片中。

  以上就是單片機(jī)的寄存器類型及操作教程的介紹了,單片機(jī)一種集成電路芯片,廣泛用于各大行業(yè)中。單片機(jī)寄存器其實就相當(dāng)于一個變量,只不過這個變量在固定的地址,有一個特殊的名稱(當(dāng)然也不強(qiáng)制)。初學(xué)者對寄存器的操作比較困難的原因不是匯編語言或C語言使用的不熟,而是對寄存器的陌生。單片機(jī)中存儲器的資源是非常寶貴和有限的,任何產(chǎn)品都有使用說明書,要想最好的使用一款產(chǎn)品也是去閱讀說明書。單片機(jī)或者芯片的說明書就是數(shù)據(jù)手冊。數(shù)據(jù)手冊中往往都是對寄存器如何操作的描述,只不過要耐下心來一點一點的去理解去消化手冊所介紹的功能,這樣才能用好。


關(guān)注公眾號“優(yōu)特美爾商城”,獲取更多電子元器件知識、電路講解、型號資料、電子資訊,歡迎留言討論。




*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。




相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉