工作後才理解的那些51單片機存儲原理

2021-01-12 電子產品世界

對於電子設計類的學生來說,其實在學校很難通過實例來理解51單片機的存儲原理。因為學校的課程很少用到外擴ROM/RAM,大多會採用C語言來進行語言編程。很多人是在工作後才實際接觸到51單片機的IP核,才對存儲原理以及數據空間有了較為清晰的認識。在本文當中,小編就將為大家介紹51單片機是如何實現存儲數據的。

本文引用地址:http://www.eepw.com.cn/article/201808/386142.htm

MCS-51使用哈弗結構,它的程序空間和數據空間是分開編址的,即各自有各自的地址空間,互不重疊。所以即使地址一樣,但因為分開編址,所以依然要說哪一個空間內的某地址。而ARM(甚至是x86)這種馮諾依曼結構的MCU/CPU,它的地址空間是統一併且連續的,代碼存儲器/RAM/CPU寄存器,甚至PC機的顯存,都是統一編址的,只是不同功能的存儲器佔據不同的地址塊,各自為政。

對於51單片機的程序存儲器,有片內和片外兩部分。而且無論片內程序存儲器,還是片外程序存儲器,他們的地址是共享的。如果片內為4kROM,地址就是0x0000-0x0FFF,從0x1000-0xFFFF就是外部ROM的地址空間。可外部ROM的0x0000-0x0FFF的這一部分是否被使用呢?這取決於單片機EA引腳的電平值。EA=1時就是使用內部ROM的這一部分,外部ROM的這一部分浪費不用;EA=0時就是使用外部ROM的這一部分,內部ROM浪費不用。從CODE段讀取數據要使用彙編的MOVC指令,單片機會根據MOVC指令、EA狀態、要讀取的地址值,來自動地判斷從什麼存儲器裡取數據。

對於數據存儲器,則分為內部數據存儲器(IDATA/RAM)和外部數據存儲器(XDATA)兩個部分,但這兩個存儲器就不像code存儲器那樣共享地址空間的了。一般的8051晶片,內部RAM只有128B,從0x00-0x7F,而從0x80-0xFF則是SFR(CPU工作寄存器和各種外設寄存器都在此)的區域。對於8052來說,內部RAM有256B,所以0x80-0xFF是高128B的RAM在使用。可這部分不是SFR專用的嗎?是SFR專用,但注意,SFR的訪問只能使用「直接尋址方式」(使用特定的彙編指令來實現),區別就在這裡。只有通過直接尋址訪問的地址才是SFR,否則就是普通的RAM。至於外擴的RAM(XDATA),地址也是從0x0000-0xFFFF的,而且這裡的0x0000和內部RAM的0x00是不同的,是完全獨立的兩個空間。他們的訪問方法也是不同的。MCS-51使用MOVX指令,來讀寫XDATA區。而且,訪問XDATA區,是需要DPTR寄存器來輔助的。因為只有DPTR才能裝得下十六位的XDATA地址。

所以MCS-51讀寫IDATA區的速度是最快的,而且訪問方法也是最多的。訪問XDATA區的速度相對就要慢很多。MCS-51的堆棧要優先開闢在IDATA區中,並且在IDATA區中開闢的堆棧,可以使用棧指針寄存器SP來控制。如果棧實在太大,只能開闢在XDATA區中,那麼CPU的SP寄存器就很難借力,只能由開發者來構造堆棧結構和堆棧指針。既然外部程序空間和數據空間都是0-64K(0x0000-0xFFFF),那麼實際上可以為了省事/方便改寫程序等原因,外部的CODE和DATA就可以共用一個可擦寫存儲器了(比如各種RAM什麼可擦可寫的)。

比如系統有64K的外擴MEMORY,低32K我用作保存CODE,並讓單片機在這32K之中讀取程序運行,高32K時作為用戶數據的保存處是完全可以的。只是此時本來完全獨立的CODE和DATA空間,因為在硬體晶片上共用了一個MEMORY,所以他們之間可能互相影響,程序就能自己改寫程序。比如0x0020處是一個指令,通過MOVX把0x0020處改寫,那麼再利用MOVC把0x0020處讀取出來,數據就和原來不一樣了。

容易混淆的癥結在於,單片機存儲空間是一個邏輯上的概念,是人為劃分出來的兩個相互獨立的空間。而硬體電路上的MEMORY晶片則是現實中的概念,單片機的存儲空間最終會落實在電路層面的晶片上,所以邏輯上的存儲空間會因為物理上的電路連接而發生重疊。但是在邏輯層面上,這兩個空間還是完全獨立的。

各類存儲空間名稱的定義:

data:固定指前面0x00-0x7f的128個RAM,可以用a寄存器直接讀寫的,速度最快,生成的代碼也最小。

idata:固定指前面0x00-0xff的256個RAM,其中前128和data的128完全相同,只是因為訪問的方式不同。idata是用類似C中的指針方式訪問的。

xdata:外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。

pdata:外部擴展RAM的低256個字節,地址出現在A0-A7的上時讀寫,用movxACC,@Rx讀寫。這個比較特殊,而且C51好象有對此BUG,建議少用。

通過以上的介紹,可以看到51單片機雖然結構簡單,但是其存儲方式還是十分值得開發者深入研究的。需要注意的是,單片機的存儲空間是相對於邏輯而言的,是由人們開發出的獨立空間,而硬體電路上的MEMORY晶片則是現實中的概念,兩者在某些時候容易出現混淆,需要大家特別注意。


相關焦點

  • MCS-51單片機的結構和工作原理
    在每條指令執行完後,單片機根據ACC的內容對P位自動置位或復位。3.4 MCS-51單片機時鐘電路及CPU的工作時序:3.4.1 時鐘電路1、NMOS型單 推薦閱讀 簡述MCS-51系列單片機主從結構多機通信原理 簡述MCS-51系列單片機主從結構多機通信原理,設有一臺主機與三臺從機通信,其中一臺從機通信地址號為01H,請敘述主機呼叫從機並向其傳送一個字節數據的過程。
  • 51單片機 P0口工作原理詳細講解
    一、P0埠的結構及工作原理P0埠8位中的一位結構圖見下圖:數據傳送過來後,當CP時序控制端的時序信號消失了,這時,輸出端還會保持著上次輸入端D的數據(即把上次的數據鎖存起來了)。如果下一個時序控制脈衝信號來了,這時D端的數據才再次傳送到Q端,從而改變Q端的狀態。
  • 51單片機還有沒有必要學?
    二、51單片機入門學習首先根據個人基礎,如果是完全沒有基礎的,應該還是從51單片機入手,目前51單片機的應用還有很多,很多設備還能見到51晶片,尤其成本低的項目,出貨量特別大,51單片機入門簡單,上手快,項目開發進度快。低端產品大量使用,也是教學入門的晶片。
  • 基於MCS-51系列單片機實現遙測數據存儲系統的設計
    基於MCS-51系列單片機實現遙測數據存儲系統的設計 吳芝路,任廣輝,王 發表於 2020-11-27 10:12:25   作者:吳芝路,任廣輝,王桂玲
  • 51單片機的特殊功能寄存器(SFR)
    在51單片機內部有一個CPU用來運算、控制,有四個並行I/O口,分別是P0、P1、P2、P3,有ROM,用來存放程序,有RAM,用來存放中間結果,此外還有定時/計數器,串行I/O口,中斷系統,以及一個內部的時鐘電路。
  • 一款基於51單片機的簡易示波器設計
    它由前向控制部分,數據採集和存儲部分,51單片機控制部分以及按鍵和MS12864R顯示部分組成。本文引用地址:http://www.eepw.com.cn/article/248283.htm1 簡易數字示波器的工作原理以及總體框架本設計硬體電路部分由單片機控制系統電路,前向輸入調理電路,模數轉換和存儲電路,以及按鍵顯示電路組成。
  • 51單片機基礎(5)
    1、對程式設計師來講,最基本的51單片機具有如下3個存儲空間:(1)內部數據空間,地址範圍0~255,使用MOV指令和8位地址進行直接和間接訪問,當然也有更多的操作類指令如ANL、ADD等可以直接或間接地訪問該空間
  • 51單片機擴展外部RAM
    1)由於51單片機採用不同的控制信號指令,儘管RAM和ROM地址是重疊的,也不會發送混亂。2)51單片機對片內和片外ROM的訪問使用相同的指令,兩者的選擇是由硬體實現的(就是不用咱們關心的,還有他們的存儲也是硬體自動實現的,你只要連接好引線就哦了~~~剩下的就是寫點指令控制控制了)3)晶片選擇現在多採用線選法,地址解碼法用的漸少。
  • 單片機作業系統RTX51原理分析與移植
    一.課題要求:仔細分析單片機作業系統RTX51的原理,將其移植到單片機實驗平臺上,並要求編寫一個簡短的程序來驗證其運行的正確性(比如,編寫兩個具有顯示不一樣內容的任務)。 二.RTX51原理注釋:由於英文原文會比較好,所以我沒有翻譯過來(不過也寫了部分的翻譯),直接提取出來一些英文,總結在一起。1.
  • 51單片機指令快速記憶方法總結
    學習單片機,除了搞清單片機內部功能、存儲空間分配及I/O接口外,還應掌握其指令系統。MCS-51共有111條指令,現介紹我們總結出的快速記憶MCS-51指令的方法,供大家參考。大家都知道,彙編語言指令由操作碼、操作數兩部分組成。MCS-51使用彙編語言指令,它共有44個操作碼助記符,33種功能,其操作數有#data、direct、Rn、@Ri等。
  • 基於KEIL 51的單片機開發系統設計
    以其性能優越、使用方便,受到眾多單片機愛好者的歡迎。KEIL 51以軟體包的形式向用戶提供包括C51交叉編譯器、A51宏彙編、BL連接定位器等一系列工具和μVision2軟體仿真器dScope51等開發平臺。但是目前支持高版本KEIL 51編程的仿真器價格較高。為此提供了基於KEIL 51開發系統的設計方案。2.硬體電路設計基於KEIL 51開發環境設計開發系統電路原理如圖1所示。
  • 學習單片機,為什麼我建議你從51單片機開始
    32位單片機複雜的庫文件,大量的資源,即使使用項目驅動的學習方法,立完Flag後,很快就放棄了,很難堅持學習。這就和我們小時候學習數學都是從1+1開始學習加法的,簡單+堅持我們就能學習下去,就能更好的理解。下面介紹學習51單片機的準備工作。
  • 單片機復位電路原理是腫麼樣的呢???
    對於單片機而言,復位功能是必須存在的,因為單片機的每一次啟動都需要復位,以使CPU及系統各個部件都處於初始狀態,並從初始狀態開始進行工作。  單片機復位電路主要有手動按鈕復位、上電復位、積分型上電復位、比較器型復位、看門狗型復位等幾種,下面就對這些單片機復位電路的原理分別進行介紹。
  • 單片機原理|定時器/計數器的工作原理及應用作業
    A、M=213 =8192B、M=28 =256C、M=24 =16D、M=216 =65536我的答案:D 得分: 2.3分 2MCS-51單片機定時器T0的溢出標誌TF0,若計滿數產生溢出時
  • 51單片機、STM32單片機、PIC單片機性能對比
    雖然I/O腳使用簡單,但高電平時無輸出能力,這也是51系列單片機的最大軟肋 3.由TI推出的8位CMOS單片機,具有多種存儲模式、多種外圍接口模式,適用於複雜的實時控制場合。雖然沒STM32那麼優秀,也沒MSP430那麼張揚,但是TMS370C系列單片機提供了通過整合先進的外圍功能模塊及各種晶片的內存配置,具有高性價比的實時系統控制。同時採用高性能矽柵CMOS EPROM和EEPROM技術實現。
  • 51單片機訪問大容量存儲器的實現
    1 引言  MCS-51系列單片機有著優越的性價比,因此應用面寬,使用量也非常大;然而它只有16位地址線,最大能訪問的存儲空間為64K,且擴展接口與存儲器統一編址,擴展接口會佔用大量的地址空間,致使該系列單片機在數據量大的數據採集系統中,存儲空間明顯不足
  • 《電子發燒友網51單片機設計方案TOP10》
    主機硬體系統由AT89C51單片機、數碼顯示、RS 232數據通信等電路組成。其主機系統電路原理圖如圖2所示。這裡的顯示電路為2位,如果呼叫方大於100個,可進行擴展,顯示方式採用軟體控制。   對目前所有兼容lntel 8031指令系統的單片機,統l稱為51單片機。Intel的8031單片機是51單片機的始祖。8031單片機是目前應用最廣泛的8位單片機之一。
  • 51單片機的P1、P2、P3口的工作原理
    1、P1口某一位的內部電路結構如下圖所示,在51單片機的P0,P1,P2,P3口中,P1口的結構最簡單,用途也最單一。僅僅只作為普通的數據輸入/輸出(I/O)埠使用。1)P1口用作輸入埠如果P1口用作輸入埠,即Q=0,/Q=1;則場效應管導通,引腳被直接連到電源的地GND上,即使引腳輸入的是高電平,被直接拉低為「0「,所以,與P0埠一樣,在將數據輸入P1埠之前,先要通過內部總線向鎖存器寫」1「,這樣/Q=0,場效應管截止,P1埠輸入的「1」才可以送到三態緩衝器的輸入端
  • 單片機定時器工作原理_單片機定時器工作方式_單片機定時器作用
    定時器使相當多需要人控制時間的工作變得簡單了許多。人們甚至將定時器用在了軍事方面,製成了定時炸彈,定時雷管。現在的不少家用電器都安裝了定時器來控制開關或工作時間。   定時器在單片機中是一個重點,今天我們來介紹一下關於單片機定時器的工作原理、工作方式以及單片機定時器的作用。
  • 51單片機C語言延時函數
    以某晶振為12MHz的單片機為例,晶振為12MHz即一個機器周期為1us。{unsigned char i,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k--);} 51