《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 由MOVX指令深入分析51單片機(jī)總線時(shí)序及擴(kuò)展
由MOVX指令深入分析51單片機(jī)總線時(shí)序及擴(kuò)展
來源:微型機(jī)與應(yīng)用2013年第20期
周姝穎,, 林凡強(qiáng),, 何凌霄,, 富 饒
(成都理工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,,四川 成都610059)
摘要: 分析了MCS51單片機(jī)訪問外部存儲(chǔ)器指令MOVX的執(zhí)行過程,介紹了51系列單片機(jī)使用的四要素,;分析了51單片機(jī)在外部擴(kuò)展,、總線時(shí)序、地址譯碼方法重點(diǎn)以及對(duì)超過64 KB地址空間訪問的方法,。并以實(shí)驗(yàn)室研制的MCS51單片機(jī)實(shí)驗(yàn)儀為例,,分析了外部空間開展的重要性、方法和原理,,給出了單片機(jī)系統(tǒng)擴(kuò)展框圖和地址譯碼表,。
Abstract:
Key words :

摘  要: 分析了MCS單片機(jī)" title="51單片機(jī)" target="_blank">51單片機(jī)訪問外部存儲(chǔ)器指令MOVX的執(zhí)行過程,介紹了51系列單片機(jī)使用的四要素,;分析了51單片機(jī)在外部擴(kuò)展、總線時(shí)序,、地址譯碼方法重點(diǎn)以及對(duì)超過64 KB地址空間訪問的方法,。并以實(shí)驗(yàn)室研制的MCS51單片機(jī)實(shí)驗(yàn)儀為例,分析了外部空間開展的重要性,、方法和原理,,給出了單片機(jī)系統(tǒng)擴(kuò)展框圖和地址譯碼表。
關(guān)鍵詞:單片機(jī); 總線; 時(shí)序; 存儲(chǔ)器空間; 譯碼

    AT89C51單片機(jī)是ATMEL公司設(shè)計(jì)生產(chǎn)的與MCS51內(nèi)核兼容的51系列單片機(jī)之一,,該系列單片機(jī)以其優(yōu)越的性能和成熟的技術(shù)在控制和自動(dòng)化應(yīng)用領(lǐng)域占有著較大的市場,;除此以外,51單片機(jī)有著計(jì)算機(jī)系統(tǒng)中經(jīng)典的總線結(jié)構(gòu),,即:數(shù)據(jù)總線,、地址總線和控制總線。
    在實(shí)際應(yīng)用中,,單片機(jī)的4個(gè)端口中,,P0口通常是作為地址/數(shù)據(jù)總線復(fù)用;P2口作為高8位地址總線,,高8位地址線在有多余I/O的情況下,,配合外部的組合邏輯電路一起構(gòu)成外部總線譯碼使用;P3口通常作為第二功能使用,則提供給用戶使用的I/O僅僅是P1口,。在多數(shù)應(yīng)用場合下是不能滿足要求的,,因此51單片機(jī)系統(tǒng)就或多或少地需要進(jìn)行系統(tǒng)擴(kuò)展,。另外,由于其內(nèi)部的RAM只有128 B,在使用C語言進(jìn)行程序設(shè)計(jì)時(shí)顯得比較不足,,必要時(shí)需進(jìn)行外部RAM擴(kuò)展,,方法與擴(kuò)展外部I/O相同。實(shí)際應(yīng)用中,,使用總線方法可以較容易地實(shí)現(xiàn)51單片機(jī)外部的I/O,、RAM、LCD,、ADC,、DAC等等外設(shè)的操作,以彌補(bǔ)51單片機(jī)片內(nèi)外設(shè)的不足。
1 MCS51單片機(jī)系統(tǒng)的四要素
1.1 51單片機(jī)系統(tǒng)的啟動(dòng)

    MCS51單片機(jī)上電正常工作,,需具備以下四點(diǎn):
    (1)電源,。AT89S51系列單片機(jī)的第40引腳為VCC,外加電壓5 V工作電壓,,另外,,單片機(jī)的第20引腳是GND,須連接到系統(tǒng)的地,。
    (2)復(fù)位電路,。任何處理器都需要在上電時(shí)進(jìn)行自身的復(fù)位,51單片機(jī)也不例外,,上電復(fù)位電路是較為簡單可靠的電路之一,,不可缺少。復(fù)位電路如圖1所示,該圖為帶上電復(fù)位及手動(dòng)復(fù)位兩種結(jié)合,,二極管D1在系統(tǒng)瞬間掉電能幫助系統(tǒng)快速放電,使系統(tǒng)重新復(fù)位,,以提高系統(tǒng)的可靠性。

    (3)振蕩電路,。如圖2所示,,51單片機(jī)的第18腳和第19腳為兩個(gè)外接振蕩的引腳,是內(nèi)部振蕩方式的典型電路, 外接的33 pF電容可以提高振蕩的穩(wěn)定性,。

    (4)EA,。AT89S51單片機(jī)內(nèi)部有4 KB的程序存儲(chǔ)器,不需要外部的ROM空間,,如果不夠可以選擇AT89S52或其他內(nèi)部存儲(chǔ)器更大的單片機(jī),,所以接高電平,即:不使用外部ROM,,只使用內(nèi)部的存儲(chǔ)器,。
1.2 MCS51單片機(jī)系統(tǒng)的存儲(chǔ)器結(jié)構(gòu)
    MCS51單片機(jī)的存儲(chǔ)器分為片內(nèi)和片外兩個(gè)部分,即:內(nèi)部的ROM/RAM和外部的ROM/RAM,,編寫程序時(shí)必須清楚每一個(gè)存儲(chǔ)單元的用途和功能,,這樣才能更好地進(jìn)行系統(tǒng)存儲(chǔ)器資源的分配,。51單片機(jī)的另一個(gè)特點(diǎn)是外部的RAM空間和I/O空間共用外部的64 KB空間,因?yàn)橥獠靠偩€的地址線為16 bit,,所以能夠訪問的最大地址空間為64 KB,。51單片機(jī)系統(tǒng)在進(jìn)行外部擴(kuò)展時(shí),所有外設(shè)的地址都分布在這64 KB的地址范圍內(nèi),,對(duì)于RAM來說,,地址是連續(xù)的;而對(duì)于LCD,、ADC等等部件,,地址是不連續(xù)的。
1.3 51單片機(jī)的中斷系統(tǒng)
    AT89S51單片機(jī)為用戶提供了可屏蔽中斷源有5個(gè),,分別是:外部中斷0(入口地址為:0003H),、外部中斷1(入口地址為:000BH)、定時(shí)器0(入口地址為:0013H),、定時(shí)器1(入口地址為:001BH)和串行中斷(入口地址為:0023H),;不可屏蔽中斷為復(fù)位(入口地址為:0000H)。51系列單片機(jī)的其他型號(hào)所提供的中斷個(gè)數(shù)不盡相同,,所有的單片機(jī)都包括上述這6個(gè)最基本的中斷源,,不同公司生產(chǎn)的51內(nèi)核單片機(jī)中斷源上有略微的區(qū)別。
1.4 51單片機(jī)的總線結(jié)構(gòu)
    由于51單片機(jī)真正可以作為雙向I/O口應(yīng)用的只有P1口,,假設(shè)系統(tǒng)需要擴(kuò)展外部的鍵盤,,I/O就所剩無幾了。因此,,MCS51單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)都不可避免地需要進(jìn)行系統(tǒng)的擴(kuò)展,,而I/O的擴(kuò)展則是與系統(tǒng)總線緊密結(jié)合的,。由于MCS51單片機(jī)的外部RAM和I/O口是統(tǒng)一編址的,,因此,可以把單片機(jī)外部64 KB RAM空間的一部分作為擴(kuò)展外圍I/O口的地址空間,。這樣,,單片機(jī)系統(tǒng)就可以把額外的RAM空間用來進(jìn)行I/O空間的擴(kuò)展,使用總線方式對(duì)外設(shè)進(jìn)行訪問[1],。
    本文重點(diǎn)之一是介紹采用具有三態(tài)緩沖的74HC244芯片和輸出帶鎖存的74HC573芯片來擴(kuò)展一個(gè)4×4的小鍵盤,,緩沖器和鎖存器分別占用外部I/O空間中的兩個(gè)地址。而無論是訪問外部的RAM空間還是I/O空間,,在進(jìn)行匯編語言編程時(shí)都是通過MOVX指令來實(shí)現(xiàn)讀寫的,。在使用C語音進(jìn)行單片機(jī)程序設(shè)計(jì)時(shí),雖然語言改變了,,但是C語言程序反匯編后,,訪問外部仍然使用的是MOVX指令,。因此,分析過程及使用中,,都是以匯編語言為例進(jìn)行擴(kuò)展設(shè)計(jì)的,。
2 MOVX指令的執(zhí)行過程
    MOVX指令是51單片機(jī)訪問片外外設(shè)的唯一指令,與外部RAM或I/O空間進(jìn)行數(shù)據(jù)的讀寫或者ADC和DAC等都需要使用這條指令,。MCS51單片機(jī)外部RAM的地址空間為64 KB,,地址總線為16 bit,訪問外設(shè)可執(zhí)行4條匯編指令:(1)MOVX A,@DPTR;(2)MOVX @DPTR, A;(3)MOVX A, @RI;    (4)MOVX @RI, A,。其中DPTR為16 bit地址寄存器,,地址高8 bit存于DPH,地址低8 bit存于DPL,,Ri(i=0,1)是8 bit寄存器,,作為地址指針時(shí)僅存低8 bit地址[2]。
    MCS51執(zhí)行上述指令時(shí)分為兩個(gè)階段:首先,,是從程序存儲(chǔ)器中取出指令代碼,,并進(jìn)行譯碼;然后,,執(zhí)行對(duì)外設(shè)數(shù)據(jù)的讀寫操作,。在這兩個(gè)階段中,P0口在指令執(zhí)行過程中是分時(shí)復(fù)用口,,指令前半個(gè)周期,,低8 bit地址由地址鎖存允許信號(hào)ALE控制一個(gè)8 bit的鎖存器輸出,接著輸出8 bit數(shù)據(jù)至外部數(shù)據(jù)總線,,P2口在此過程中一直輸出高8 bit地址,。
    由上所述,假設(shè)使用R0和R1對(duì)外設(shè)的進(jìn)行間接尋址方式的訪問,,那么可看作是一種頁面尋址,,將外部的64 KB空間分成了256頁,每一頁有256 B地址,。寄存器P2的當(dāng)前值決定了當(dāng)前的頁地址,。MCS51單片機(jī)在復(fù)位時(shí),P2端口寄存器數(shù)值為FFH,,若程序運(yùn)行中沒有改變P2中的值,,則R0和R1只能對(duì)FF00H~FFFFH范圍的外部的間接尋址,即對(duì)第255個(gè)頁面進(jìn)行訪問,。往外部空間寫1 B時(shí)序圖如圖3所示,。

    因此,使用DPTR作為數(shù)據(jù)指針或者是RI,,都可以實(shí)現(xiàn)對(duì)外部64 KB空間的訪問,。而指令都是使用MOVX,,可見MCS51單片機(jī)系統(tǒng)中,MOVX指令有著非常重要的作用,。
3 時(shí)序分析及系統(tǒng)擴(kuò)展
    MCS51單片機(jī)的外部總線時(shí)序擴(kuò)展主要包括外部的譯碼電路,、鎖存電路等組合邏輯電路,形成整個(gè)系統(tǒng)的外部總線,,即:數(shù)據(jù)總線,、地址總線、控制總線,。
    譯碼電路采用常用的74系列3/8線譯碼器74LS138,,該芯片的A、B,、C分別接地址的最高3位,,即A13、A14,、A15,,譯碼電路如圖4所示;138的使能端E3接高電平,,E1和E2接的是EN_138,,該信號(hào)是由單片機(jī)系統(tǒng)的讀寫信號(hào)經(jīng)過組合得來的,當(dāng)系統(tǒng)對(duì)外部的總線進(jìn)行讀寫時(shí),讀/寫信號(hào)其中一個(gè)為低電平,,使得EN_138控制信號(hào)輸出為一個(gè)低電平脈沖信號(hào),,此時(shí),3/8線譯碼器的輸出Y0~Y7其中一個(gè)也會(huì)輸出一個(gè)低電平脈沖,,用此脈沖就可以有效地對(duì)外部設(shè)備進(jìn)行片選,。邏輯電路如圖5所示。

    通過這樣的組合后就可以在總線上數(shù)據(jù)有效的時(shí)間內(nèi),,通過74LS138的Y0~Y7控制外設(shè)的片選,,實(shí)現(xiàn)有效的數(shù)據(jù)讀寫。尤其是在擴(kuò)展外部I/O口使用的74系列的邏輯電路芯片時(shí),,這個(gè)方法尤為重要,,因?yàn)檫@類芯片沒有外部的讀/寫信號(hào),,只能通過單片機(jī)外部的組合邏輯電路輸出一個(gè)讀/寫信號(hào)寬度的脈沖用以控制此類I/O芯片,。若外設(shè)信號(hào)控制信號(hào)為低電平脈沖,則剛好與3/8線譯碼器的輸出匹配,此時(shí)直接相連即可,;若外設(shè)控制信號(hào)需要的是高脈沖信號(hào),,則必須在3/8線譯碼器的輸出外面再加一級(jí)反相器電路,常用的反相器為74LS04,。
    以寫數(shù)據(jù)往外設(shè)為例,,得到的時(shí)序流程如圖6所示,。讀數(shù)據(jù)的時(shí)序與寫數(shù)據(jù)一致,只是將寫信號(hào)換成讀信號(hào)[2],。

 

 

4 I/O擴(kuò)展實(shí)例
4.1 行列鍵盤擴(kuò)展

    如前所述,,51單片機(jī)供用戶使用的I/O只有P1端口的8個(gè)引腳,遠(yuǎn)不能滿足系統(tǒng)的需求,,這樣就必須通過總線的方法進(jìn)行外部I/O擴(kuò)展,。在這里需要注意的是,51單片機(jī)系統(tǒng)外部I/O空間是和外部的RAM空間共用外部64 KB空間的,。使用74LS573和74LS244分別進(jìn)行行列的擴(kuò)展,其中573鎖存行信號(hào),,244讀回?cái)?shù)據(jù),擴(kuò)展了端口,,實(shí)現(xiàn)了4×4的矩陣式行列掃描鍵盤,,如圖7所示。在此程序略,,主要介紹擴(kuò)展的方法[3],。

    圖8所示為4×4矩陣鍵盤連接圖。

4.2 大于64 KB空間的擴(kuò)展
 MCS51單片機(jī)是8位的微控制器,,外部地址總線共16 bit地址,,能訪問的空間共為64 KB,但是如果系統(tǒng)中所有的外設(shè)加起來需要的地址空間超過64 KB時(shí)(如128 KB、256 KB的RAM或者需要更多的I/O空間等情況出現(xiàn))就需要使用P1口或者是P3口不使用的I/O口進(jìn)行線選法譯碼或者譯碼法進(jìn)行額外的擴(kuò)展來實(shí)現(xiàn),。
    這種情況在單片機(jī)系統(tǒng)中經(jīng)常會(huì)遇到,,本文中介紹一種基于分頁原理的擴(kuò)展方法。51單片機(jī)系統(tǒng)雖然只有16條地址總線,在系統(tǒng)需要較大的RAM或I/O空間時(shí),,可以將系統(tǒng)中空余的I/O口作為額外的外部地址使用,,例如:使用P1.0時(shí)進(jìn)行線選法譯碼時(shí),就可以擴(kuò)展外部的128 KB空間,。當(dāng)P1.0為低電平時(shí),,選擇第1個(gè)64 KB空間;當(dāng)P1.0為高電平時(shí), 選擇第2個(gè)64 KB空間,。
    以此類推,,假設(shè)有更多的空間需求時(shí),還可使用專用譯碼器進(jìn)行譯碼,,來進(jìn)行更多的選擇,。如此看來,就像其他處理器系統(tǒng)中類似地有著多余16條地址線一樣,。因此,,在MCS51單片機(jī)系統(tǒng)中,實(shí)現(xiàn)大于64 KB空間的使用是很容易實(shí)現(xiàn)的,51單片機(jī)系統(tǒng)是使用非常成熟的系統(tǒng)了,,而且,,這樣的使用可以給設(shè)計(jì)時(shí)提供了更多的選擇,最大程度地降低設(shè)計(jì)成本和系統(tǒng)開發(fā)的難度,,以及開發(fā)周期等[4],。
4.3 單片機(jī)實(shí)驗(yàn)儀實(shí)例開發(fā)
    在單片機(jī)實(shí)驗(yàn)儀上,使用了總線方式進(jìn)行擴(kuò)展的模塊單元還有LCD顯示模塊,、AD/DA模塊,、流水燈模塊等部分。
    表1給出了實(shí)驗(yàn)儀上所有的通過總線方式進(jìn)行外部擴(kuò)展的單元及其地址和片選信號(hào)線,,其中,,各個(gè)模塊的訪問地址實(shí)際上是一個(gè)地址的范圍,這里只給出一個(gè),。沒有使用到的地址線默認(rèn)為0,。

    在使用C語言進(jìn)行程序設(shè)計(jì)時(shí),訪問外部的總線也是非常方便的,,只需要在程序中包含頭文件absacc.h,。該文件定義了訪問外部空間的方法,如進(jìn)行LCD的設(shè)計(jì)時(shí),,定義下面條語句:
     #define   com_lcd   XBYTE[0xe001]        //命令地址
     #define   data_lcd   XBYTE[0xe000]        //數(shù)據(jù)地址
  #define   read_lcd   XBYTE[0xe003]        //讀狀態(tài)地址
  之后,,通過對(duì)定義的3個(gè)地址變量的訪問,即可實(shí)現(xiàn)對(duì)外設(shè)的訪問,,非常方便,。因此,在單片機(jī)適應(yīng)的場合,,對(duì)外設(shè)較多的情況之下, 只要在速度等要求不高的情況下,采用51單片機(jī)也是可以實(shí)現(xiàn)高效的控制系統(tǒng)[5],。
    通過上述分析及實(shí)際應(yīng)用設(shè)計(jì),可以看出MOVX指令在MCS51單片機(jī)系統(tǒng)中的重要地位,,尤其是進(jìn)行系統(tǒng)擴(kuò)展時(shí),,其地位顯得尤為重要。雖然,,現(xiàn)在控制系統(tǒng)多采用了C語音進(jìn)行設(shè)計(jì),,但是萬變不離其宗,了解和掌握單片機(jī)系統(tǒng)底層的指令系統(tǒng)及其應(yīng)用方法是非常重要的,。只要使用外部總線擴(kuò)展,,本文提到的邏輯擴(kuò)展方法都是非常可行的,,而這些都是建立在對(duì)MOVX指令的使用和研究上,。因此可以說,掌握了MOVX指令的使用,,就掌握了MCS51單片機(jī)系統(tǒng)總線及時(shí)序擴(kuò)展的方法,。
參考文獻(xiàn)
[1] 何立民.單片機(jī)應(yīng)用文集[M].北京:北京航空航天大學(xué)出版社,,1992.
[2] 何立民.單片機(jī)高級(jí)教程——應(yīng)用與設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2000.
[3] 張毅坤.單片微型計(jì)算機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,,2002.
[4] 胡漢才.單片機(jī)原理及其接口技術(shù)(第2版)[M].北京:清華大學(xué)出版,2004.
[5] 譚浩強(qiáng). C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,,1996.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。