• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機基礎學習(一):存儲結構

    單片機基礎學習(一):存儲結構

    作者: 時間:2012-03-28 來源:網絡 收藏

    51器有數據器,程序器。數據存儲器是為正在運行的程序提供空間,即RAM,程序存儲器為程序的存儲提供空間,即ROM,剛開始的一旦寫入程序就不能修改,后來出現了紫外線擦除(EPROM)、電擦除(EEPROM)和FlashROM。

    本文引用地址:http://www.czjhyjcfj.com/article/171761.htm

      數據存儲器又分片內數據存儲器和片外數據存儲器,標準的51的片內數據存儲器容量是256字節,地址編碼00H~FFH,其中高128字節(80H~FFH)是SFR區(特殊功能寄存器),低128字節(00H~7FH)用戶數據存儲器,在這個128字節中,00H~1FH這32個字節分給了4組工作寄存器(R0~R7),20H~2FH這16字節是位尋址區,30H~7FH這80字節是用戶RAM區,可以隨意使用。通過51單片機內部的并行擴展總線,51單片機可以訪問最多64K范圍的外部數據存儲器(注:這個說法是有問題的,看后面),由于內部的AB寬度是16位,所以內部數據存儲器尋址能力是64K。

      程序存儲器也分為片內和片外,由于片內外的AB寬度是16位,所以尋址能力都是64K。

      但是由于I/O端口和外圍設備與數據存儲器統一編址,暫用了片外數據存儲器的地址空間,所以片外數據存儲器尋址范圍不足64K。

      前面我們分析了存儲,發現無論是數據存儲器和程序存儲器,它們片內外的尋址能力都是64K。那他們是如何編址的呢?答案是:統一編址0000H~FFFFH

      你是不是感到很疑惑?如何做到的?

      首先,片內數據存儲器和片外數據存儲器,對于同一個地址(假設1111F)CPU是如何區分到那個存儲器呢?分析一下指令,如果是MOVX那么是到片外數據存儲區,如果是MOV則是到片內數據存儲區。

      其次,片內數據存儲器和片內程序存儲器,他們的控制信號不同,訪問片內數據存儲器信號是Ld等,訪問片內程序存儲器的控制信號是Emp等。

      第三,片內程序存儲器和片外程序存儲器,同“首先”

      第四,片外數據存儲器和片外程序存儲器,同“其次”

      如何擴展呢?

      我們知道P0口有時分復用功能,既可以作為8位數據總線又可以作為低8位地址總線,我們使用地址鎖存器把8位的數據總線和低8位的地址總線分開,這樣P0提供低8位的地址總線和P2提供的高8位總線構成了16位的外部地址總線,P0提供了8位外部數據總線,加上控制總線,這樣就形成了三總線。所有外圍芯片都是通過這三總線進行擴展。

      可能有這個疑問:P0口如何時分復用的?

      通過內部CB的ALE控制信號,下降沿時將P0口輸出的數據作為地址信息儲存,此時P0作為低8位地址總線,在其他時刻P0作為8位數據總線。與外界的通信除了少部分通過P1,全部通過P0。

      我們稍微了解一下51單片機的時序單位……

      晶振提供的頻率我們稱為振蕩頻率,假設它的周期為T0,一個T0周期稱為一個節拍,用字母P表示,振蕩頻率經過二分頻后我們得到振動頻率,它的周期為T1(T1=2T0),一個T1周期稱為一個狀態,用字母S表示,振蕩周期經過6分頻我們得到ALE控制信號(注:下面有具體介紹),振蕩周期經過4分頻我們得到PSEN信號(注:下面有具體分析)。定義12個振蕩周期為一個機器周期,那么指令周期是什么?有些指令只需要一個機器周期能執行(確切說是:取指令、譯指令、執行指令)完,有些需要幾個(不管如何,一般指令周期是機器周期的整數倍,通常情況是1~4倍)。

      我們有必要了解一下外部CB, 先介紹ALE控制信號:

      ALE:高電平有效,是振蕩頻率的6分頻,利用下降沿來控制地址鎖存器鎖存低8位地址A0~A7。一個周期兩次有效,第一次是S1P2~S2P1,第二次是S4P2~S5P1。

      然后介紹一下PSEN控制信號:

      PSEN:低電平有效,是振蕩頻率的4分頻,用于訪問外部程序存儲器。一個周期兩次有效,第一次是S1P2~S2P2,第二次是S4P2~S5P2。

      我們通過一個實例來理解它,假設我們訪問外部程序存儲器。

      PSEN是和外部存儲器的OE端口接的(OE是低電平有效),ALE是接地址鎖存器(假設是74HC373)的LE腳(高電平有效)。S1P2時刻,ALE上跳為高電平,74HC373的LE腳有效,74HC373內部8個鎖存器打開,到S2P1這個下降沿時刻,P0輸出的低8位地址被鎖存在鎖存器中,此時PSEN仍然為高電平,而P0由原來的低8位地址總線轉化為數據總線,等待外部程序存儲器輸出端的數據輸入,直到S2P2這個時刻,PSEN為下降沿,由無效轉化為有效,這時P2口的高8位地址和鎖存的P0的低8位地址組成16位地址,這個地址就是CPU要訪問的外部存儲器的地址,從這個地址中找出存儲的信息,輸出這個信息通過P0這個數據總線到達內部總線,最后到達目的地。

      訪問外部數據存儲器與之類似,不過控制信號不是PSEN,而是WR和RD。

      WR、RD:低電平有效,用于訪問外部數據存儲器的讀寫控制,當執行MOVX時,這兩個信號自動生成。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 师宗县| 当雄县| 夏津县| 华容县| 梧州市| 蓝田县| 梧州市| 宁河县| 泽库县| 甘肃省| 平和县| 内黄县| 曲松县| 抚州市| 怀集县| 营山县| 大渡口区| 陇西县| 梅州市| 惠东县| 娄烦县| 西林县| 仪陇县| 晋中市| 休宁县| 甘孜县| 道孚县| 阿克| 阳朔县| 红原县| 湘阴县| 宁阳县| 宜丰县| 嘉荫县| 班戈县| 分宜县| 平凉市| 康平县| 华蓥市| 崇礼县| 山西省|