單片機的寄存器類(lèi)型及操作教程
大家都認為計算機可以做任何事,對我們的生活有巨大的作用,尤其是在學(xué)習單片機的過(guò)程中。學(xué)習計算機可以教會(huì )我們分析和解決問(wèn)題,而學(xué)習單片機可以幫助我們更好地理解計算機如何根據我們的想法解決問(wèn)題。本文帶你了解寄存器,它將伴隨學(xué)習單片機的全過(guò)程。寄存器是連接硬件和軟件的重要紐帶。計算機的任何功能都離不開(kāi)寄存器。中央處理器也有寄存器??偩€(xiàn)通信、通過(guò)注冊、內存分頁(yè)等一切都基于寄存器。電子洞和多彩的計算機世界之間有更多的寄存器,如鏈接。它們看起來(lái)很復雜,但它們很清楚。即便所有的計算機一夜之間突然消失,人類(lèi)也可以從電子管和打孔紙帶開(kāi)始,一層一層地構建計算機世界。我們所知道的只是這個(gè)龐大系統中的滄海一粟。
1.什么是寄存器
寄存器是CPU內部的一種存儲器,分為通用寄存器和特殊功能寄存器(8086也細分為特殊功能寄存器)。通用寄存器,顧圖2 單片機寄存器名思義是通用的。它們可以存儲操作數、運算結果、內存地址等數據,在用C語(yǔ)言編程時(shí),編譯器一般負責安排通用寄存器的使用,無(wú)需直接聯(lián)系它們。特殊功能寄存器具有特定功能,其中一些作用于CPU,比如PC存放下一條指令的地址,SP記錄棧頂在內存中的位置,其中一些與IO模塊相連,單片機程序通過(guò)這些寄存器控制各種外設。
圖1 寄存器
我們通常使用的單片機是atmega324pa,它的封裝種類(lèi)很多,管腳數量不同,但通用輸入輸出(GPIO)管腳有32個(gè)。由于A(yíng)VR架構是8位字長(cháng),因此CPU一次處理1位數據和8位數據所需的時(shí)間相同。32個(gè)引腳被組織成4個(gè)端口,即PA、Pb、PC和PD。在微型和微型微控制器的AVR架構中,每個(gè)端口都有三個(gè)寄存器來(lái)控制數字信號IO,分別是portx、ddrx和PINX。這里的X是a、B、C或D。由于四個(gè)端口在數字IO方面是相同的,我們將它們組合起來(lái)。因此,對于每個(gè)引腳Pxn,有3個(gè)位,portxn、ddxn(不帶R)和pinxn,來(lái)控制其數字io。
ddxn控制引腳方向:ddxn為1時(shí),輸出Pxn;當ddxn為0時(shí),輸入Pxn。
當輸入Pxn時(shí),如果portxn為1,則該引腳通過(guò)上拉電阻連接到VCC;否則,引腳懸空。
輸出Pxn時(shí),若portxn為1,引腳輸出高電平;否則,引腳輸出低電平。
pinxn的值是Pxn引腳的電平。如果將1寫(xiě)入pinxn,則portxn的值會(huì )翻轉。
寄存器還有很多細節,比如MCUCR寄存器中PUD位的作用、復位后寄存器的值、輸入/輸出切換的方法、讀取引腳電平的延遲、未連接引腳的處理方法等。
2.什么是單片機寄存器
寄存器是內存階層中的最頂端,也是系統獲得操作資料的最快速途徑。寄存器通常都是以他們可以保存的位元數量來(lái)估量,舉例來(lái)說(shuō),一個(gè)“8位元寄存器”或“32位元寄存器”。寄存器現在都以寄存器檔案的方式來(lái)實(shí)作,但是他們也可能使用單獨的正反器、高速的核心內存、薄膜內存以及在數種機器上的其他方式來(lái)實(shí)作出來(lái)。寄存器通常都用來(lái)意指由一個(gè)指令之輸出或輸入可以直接索引到的暫存器群組。更適當的是稱(chēng)他們?yōu)椤凹軜嫾拇嫫鳌?。例如,x86指令集定義八個(gè)32位元寄存器的集合,但一個(gè)實(shí)作x86指令集的CPU可以包含比八個(gè)更多的寄存器。寄存器是CPU內部的元件,寄存器擁有非常高的讀寫(xiě)速度,所以在寄存器之間的數據傳送非???。
圖2 單片機寄存器
3.單片機寄存器的類(lèi)型
3.1累加器A
累加器A是微處理器中使用最頻繁的寄存器。在算術(shù)和邏輯運算時(shí)它有雙功能:運算前,用于保存一個(gè)操作數;運算后,用于保存所得的和、差或邏輯運算結果。
3.2數據寄存器DR
數據寄存器通過(guò)數據總線(xiàn)向存儲器和輸入/輸出設備送(寫(xiě))或取(讀)數據的暫存單元。它可以保存一條正在譯碼的指令,也可以保存正在送往存儲器中存儲的一個(gè)數據字節等等。
3.3指令寄存器IR和指令譯碼器ID
指令包括操作碼和操作數。指令寄存器是用來(lái)保存當前正在執行的一條指令。當執行一條指令時(shí),先把它從內存中取到數據寄存器中,然后再傳送到指令寄存器。當系統執行給定的指令時(shí),必須對操作碼進(jìn)行譯碼,以確定所要求的操作,指令譯碼器就是負責這項工作的。其中,指令寄存器中操作碼字段的輸出就是指令譯碼器的輸入。
3.4程序計數器PC
PC用于確定下一條指令的地址,以保證程序能夠連續地執行下去,因此通常又被稱(chēng)為指令地址計數器。在程序開(kāi)始執行前必須將程序的第一條指令的內存單元地址(即程序的首地址)送入PC,使它總是指向下一條要執行指令的地址。
3.5地址寄存器AR
用來(lái)保存當前CPU所訪(fǎng)問(wèn)的內存單元的地址。由于在內存和CPU之間存在著(zhù)操作速度上的差別,所以必須使用地址寄存器來(lái)保持地址信息,直到內存的讀/寫(xiě)操作完成為止址寄存器(Address Register,AR)用來(lái)保存當前CPU所訪(fǎng)問(wèn)的內存單元的地址。由于在內存和CPU之間存在著(zhù)操作速度上的差別,所以必須使用地址寄存器來(lái)保持地址信息,直到內存的讀/寫(xiě)操作完成為止。數據寄存器DR用來(lái)暫存微處理器與存儲器或輸人/輸出接口電路之間待傳送的數據。地址寄存器AR和數據寄存器DR在微處理器的內部總線(xiàn)和外部總線(xiàn)之間,還起著(zhù)隔離和緩沖的作用。
4.單片機寄存器的使用教程
要使用寄存器,需要寫(xiě)#include,然后就可以使用PORTA、DDRB、PINC等寄存器。它們是宏定義。不必探索它們是如何擴展的。只需要知道這些宏是可以讀、賦值和位操作的,就像uint8_t類(lèi)型變量一樣。但是像PORTA0SumDDB7宏定義這樣的東西并不代表寄存器上的位。它們實(shí)際上是字面常量,比如PORTAx寄存器表示寄存器PORTA的第x位(0為最低位,7為最高位),其值為X。因此,直接復制這些宏是不正確的(不僅意思不對,編譯也不會(huì )通過(guò))。
在開(kāi)發(fā)板的庫函數中提供包含多個(gè)位操作的宏函數??梢阅贸龃鎯ζ鞯氖謨詠?lái),看看后面是怎么實(shí)現的。
讓我們舉個(gè)例子,點(diǎn)亮一個(gè)LED,首先打開(kāi)紅色LED。原理圖第2頁(yè)左上角紅色LED通過(guò)電阻與網(wǎng)絡(luò )LED0相連,第1頁(yè)LED0與單片機PC4引腳相連,所以我們需要讓PC4腳輸出高電平?;氐饺齻€(gè)寄存器的功能。輸出高電平要求ddxn和portxn同時(shí)為1。我們把X和N分別用C和4取進(jìn)去,也就是我們希望ddc4和portc4為1。
如果寄存器的一個(gè)位置為1,則set_bit實(shí)現。它需要兩個(gè)參數,要操作的整數變量和表示第一個(gè)數字的整數。將ddc4設置為1應該寫(xiě)入set_bit(DDRC,4);4可以用DDC4替換,就是這樣定義的。同理,portc4可以設置為1。點(diǎn)亮紅色LED的整個(gè)過(guò)程如下:
接下來(lái)是存儲器的數字輸入。使用第一個(gè)按鍵相關(guān)的例子,保持LED狀態(tài)與按鍵一致,即按下點(diǎn)亮。
要讀取寄存器中的一位,可以使用read_bit。如果引腳上的電平為高電平,則read_bit的運算結果不為0(但不一定是布爾值1)。注意按鍵時(shí)引腳電平是低的,所以讀取引腳電平的結果是你是否按下該鍵。
原理圖中,key的一端接btn0網(wǎng)絡(luò ),再接單片機的PA4引腳。所以按鍵是否按下應該寫(xiě)成:!read_bit(PINA,4)。
引腳應在讀取前配置為輸入。雖然是reset后默認輸入的,在這個(gè)例子中沒(méi)有必要給dda4寫(xiě)0,但是寫(xiě)清楚是一個(gè)好習慣,讓看這段代碼的人(可能是別人也可能是自己)明白PA4是輸入。對于porta4,由于該引腳外接了上拉電阻,因此無(wú)需使能內部上拉電阻。
結合按鍵動(dòng)作的知識,應該知道如何直接通過(guò)寄存器操作來(lái)判斷按鍵動(dòng)作。值得注意的是,這些程序都不需要在項目屬性中將libee1庫添加到鏈接器。雖然代碼使用,但它們都是宏定義,獨立于鏈接器。
5.關(guān)于單片機寄存器的常見(jiàn)問(wèn)題
5.1什么是單片機寄存器?
簡(jiǎn)單地說(shuō),寄存器是一種內存。通常寄存器位于 CPU 或 MCU(微控制器)內,非??拷阈g(shù)單元或直接連接到各種 I/O 端口。由于這個(gè)位置或特殊設計,與其他類(lèi)型的存儲器相比,寄存器在讀/寫(xiě)速度方面要快得多。
5.2單片機寄存器有什么作用?
寄存器的單片機(計算機)的存儲單元,是存取數據較為方便、快速地方寄存器常用于存放使用比較頻繁的數據,再參與運算,都很容易。
5.3哪些計算機使用單芯片處理器?
單芯片云計算機(SCC) 是英特爾實(shí)驗室開(kāi)發(fā)的一種實(shí)驗性微處理器,SCC 微處理器包括集成在單個(gè)硅芯片上的 48 個(gè)內核,SCC 具有雙核 SCC 磁貼、內存控制器和 24 路由器網(wǎng)狀網(wǎng)絡(luò )。
5.4什么是單芯片CPU?
大部分微機的ALU和控制單元都是在一塊硅片上組合制造的。大多數現代 CPU 都是微處理器,這意味著(zhù)它們包含在單個(gè)集成電路 (IC) 芯片中。
以上就是單片機的寄存器類(lèi)型及操作教程的介紹了,單片機一種集成電路芯片,廣泛用于各大行業(yè)中。單片機寄存器其實(shí)就相當于一個(gè)變量,只不過(guò)這個(gè)變量在固定的地址,有一個(gè)特殊的名稱(chēng)(當然也不強制)。初學(xué)者對寄存器的操作比較困難的原因不是匯編語(yǔ)言或C語(yǔ)言使用的不熟,而是對寄存器的陌生。單片機中存儲器的資源是非常寶貴和有限的,任何產(chǎn)品都有使用說(shuō)明書(shū),要想最好的使用一款產(chǎn)品也是去閱讀說(shuō)明書(shū)。單片機或者芯片的說(shuō)明書(shū)就是數據手冊。數據手冊中往往都是對寄存器如何操作的描述,只不過(guò)要耐下心來(lái)一點(diǎn)一點(diǎn)的去理解去消化手冊所介紹的功能,這樣才能用好。
關(guān)注公眾號“優(yōu)特美爾商城”,獲取更多電子元器件知識、電路講解、型號資料、電子資訊,歡迎留言討論。
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。