51微控制器內部有256個位元組的ram空間,低128個位元組為工作暫存器組區(0x00h-0x1fh)、位定址區(0x02h-0x2fh)、通用ram區(0x30h-0x70h),sfr寄存區(0x80-0xff)這段空間定義51微控制器所有的控制暫存器和狀態暫存器。下面我們就以上圖中自底向上的順序逐一介紹一下各區的功能以及訪問方法。
工作暫存器區
add函式接收了三個引數a、b、c而沒有d,是不是不能傳遞引數d呢?先來看看官方文件的解釋:
cx51編譯器最多在mcu暫存器中傳遞三個函式引數。由於不將引數寫入記憶體或從記憶體讀取引數,因此該機制顯著提高了系統效能。引數或引數傳遞可以由regparms和noregparms指令控制:
原來51的確最多只能傳遞三個引數,可是現在超過了三個該怎麼辦呢?是不是只能算三個數的加減呢?如下圖所示,add函式傳遞的引數分別是1、2、3、4,我們執行的結果是a,也就是十進位制的10,那麼第四個引數去**了呢?
經過**我們知道第四個引數是入棧了。(看來棧是可以在工作暫存器區的,但最好不要這樣做,而是應該在.s檔案中讓sp指向0x60之後)
注意:51微控制器中的int是2個位元組! 51微控制器sp上電預設值是0x07,i、j、t入棧0x07+2*3=0x13,51微控制器棧是正增長的,所以第四個引數的位置就是0x14與0x15所在的位置。
2、位定址區
0x20-0x2f一共16個位元組、128位,所以定址範圍是0-0x7f,記憶體對映關係如下圖所示:
使用方法就是c51特有的關鍵字,sbit關鍵字對應的彙編指令就是bit。(注意: sfr暫存器也可以位定址哦!)
關鍵字 sbit 修飾後指向的是p2.1所在的位置。p2^1是在sfr暫存器區通過位定址的,之所以為1是因為還沒對它進行賦值,因此其預設值為1。位定址區是非常有用的,比如對p2.1進行位操作,不會影響到p2.0、p2.2等其他一些i/o口,所以是一種非常方便的操作方式。其實stm32也可以達到這樣的效果!
3、通用ram區
通用ram區可以執行函式的區域性變數,因為sp指標是保護呼叫函式和中斷函式現場的。具體表現為:
1.保護斷點:將pc壓入棧,執行完中斷函式後,彈出pc之前的值,恢復到中斷前程式執行的點。
2.保護現場:對暫存器組的值進行保護。
4、sfr暫存器區
特殊功能暫存器區定義了控制和監視51微控制器執行的控制暫存器和狀態暫存器,定時器、i/o口、串列埠、中斷等相關暫存器都在這裡定義。同時這個區域是離散的,是為生產商而留的,但52微控制器是可以訪問這裡的,只不過需要間接定址,對於c語言程式設計而言則不需要關注這個,c語言自身可以將其轉化。那麼,52微控制器的堆疊又增長了128個位元組供我們使用。
好了,讓我們再來回顧總結一下以上內容吧!
全篇主要通過keil以及程式介紹了51微控制器ram區各模組的作用。第一方面,通用暫存器組所佔據的位址空間以及程式執行時該區產生的作用。第二方面,位定址區的重要意義與作用,若不用位定址就只能用讀-寫-改的形式,這樣不僅用起來不方便,而且還會增加**量。第三方面,通用ram區和sfr區的重要性。
51微控制器
數碼管顯示幾乎是每次藍橋杯微控制器設計與開發組競賽的必考部分,相對於使用lcd1602作為顯示裝置,使用數碼管來顯示能夠更好的考察參賽選手的微控制器基本功,因為ct107d開發平台的設計使得數碼管的顯示不僅牽扯到數碼管顯示的 基本內容,還涉及到74hc573鎖存器,74hc02異或門,74hc138...
51微控制器
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 1.供電電源 一般開發板上提供兩種供電方式,usb供電和專用電源供電。使用usb供電你只要用一根usb線將開發板usb電源介面與電腦的usb...
51微控制器
設計包含乙個矩陣式鍵盤電路和動態顯示電路的微控制器應用系統,通過根據按下不同的數字按鍵 0 9 在數碼管上顯示出自己學號的後8位。各位大神幫忙挑挑錯,或者問題太大了可以幫忙寫乙個新的麼!萬分感謝!好著急 a 8255 equ 7cffh a口 b 8255 equ 7dffh b口 c 8255 e...