新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)基礎(chǔ)學(xué)習(xí)(一):存儲(chǔ)結(jié)構(gòu)

單片機(jī)基礎(chǔ)學(xué)習(xí)(一):存儲(chǔ)結(jié)構(gòu)

作者: 時(shí)間:2012-03-28 來(lái)源:網(wǎng)絡(luò) 收藏

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

本文引用地址:http://m.butianyuan.cn/article/171761.htm

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

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

  但是由于I/O端口和外圍設(shè)備與數(shù)據(jù)存儲(chǔ)器統(tǒng)一編址,暫用了片外數(shù)據(jù)存儲(chǔ)器的地址空間,所以片外數(shù)據(jù)存儲(chǔ)器尋址范圍不足64K。

  前面我們分析了存儲(chǔ),發(fā)現(xiàn)無(wú)論是數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器,它們片內(nèi)外的尋址能力都是64K。那他們是如何編址的呢?答案是:統(tǒng)一編址0000H~FFFFH

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

  首先,片內(nèi)數(shù)據(jù)存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器,對(duì)于同一個(gè)地址(假設(shè)1111F)CPU是如何區(qū)分到那個(gè)存儲(chǔ)器呢?分析一下指令,如果是MOVX那么是到片外數(shù)據(jù)存儲(chǔ)區(qū),如果是MOV則是到片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)。

  其次,片內(nèi)數(shù)據(jù)存儲(chǔ)器和片內(nèi)程序存儲(chǔ)器,他們的控制信號(hào)不同,訪問(wèn)片內(nèi)數(shù)據(jù)存儲(chǔ)器信號(hào)是Ld等,訪問(wèn)片內(nèi)程序存儲(chǔ)器的控制信號(hào)是Emp等。

  第三,片內(nèi)程序存儲(chǔ)器和片外程序存儲(chǔ)器,同“首先”

  第四,片外數(shù)據(jù)存儲(chǔ)器和片外程序存儲(chǔ)器,同“其次”

  如何擴(kuò)展呢?

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

  可能有這個(gè)疑問(wèn):P0口如何時(shí)分復(fù)用的?

  通過(guò)內(nèi)部CB的ALE控制信號(hào),下降沿時(shí)將P0口輸出的數(shù)據(jù)作為地址信息儲(chǔ)存,此時(shí)P0作為低8位地址總線,在其他時(shí)刻P0作為8位數(shù)據(jù)總線。與外界的通信除了少部分通過(guò)P1,全部通過(guò)P0。

  我們稍微了解一下51單片機(jī)的時(shí)序單位……

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

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

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

  然后介紹一下PSEN控制信號(hào):

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

  我們通過(guò)一個(gè)實(shí)例來(lái)理解它,假設(shè)我們?cè)L問(wèn)外部程序存儲(chǔ)器。

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

  訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器與之類似,不過(guò)控制信號(hào)不是PSEN,而是WR和RD。

  WR、RD:低電平有效,用于訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器的讀寫控制,當(dāng)執(zhí)行MOVX時(shí),這兩個(gè)信號(hào)自動(dòng)生成。



評(píng)論


相關(guān)推薦

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

關(guān)閉