曹曉龍
(貴州師范大學(xué),貴州貴陽(yáng),550001)
單片機(jī)常用于各種需要進(jìn)行控制的領(lǐng)域,包括工業(yè)、工業(yè)乃至家庭電子產(chǎn)品。單獨(dú)一個(gè)單片機(jī)是無(wú)法完成控制作用的,必須通過(guò)單片機(jī)與外部設(shè)備進(jìn)行連接。然而51單片機(jī)的并口資源較少,僅有P0、P1、P2和P3四個(gè)8位并口。且在大多數(shù)情況下,外接存儲(chǔ)器、大量IO接口時(shí),P0、P2作為地址數(shù)據(jù)線、P3則作為控制線。而余下的僅有P1口。由此可見(jiàn),51的并口資源是極其缺乏的。有必要采取一定的方法對(duì)51的并口資源進(jìn)行擴(kuò)展。多數(shù)教材中,基本上都介紹了利用鎖存器及緩沖器進(jìn)行雙向并口的擴(kuò)展,以及利用并口芯片8255A進(jìn)行擴(kuò)展的方法[1]。然而,教學(xué)過(guò)程中僅靠老師引導(dǎo)式地講解,還不足以讓學(xué)生完全了解這種方法的核心,沒(méi)有形成直觀的感受,在脫離課堂以及課本后,學(xué)生仍舊無(wú)法充分掌握該擴(kuò)展法。正是在這一背景下,本文提出了一種利用Proteus仿真平臺(tái),設(shè)計(jì)一個(gè)有關(guān)利用8255A進(jìn)行并口擴(kuò)展的方法實(shí)驗(yàn),旨在通過(guò)對(duì)整個(gè)實(shí)驗(yàn)內(nèi)容的設(shè)計(jì),讓學(xué)生親自動(dòng)手,逐步實(shí)現(xiàn)其硬件軟件設(shè)計(jì),并最終能夠理解并掌握擴(kuò)展方法。此外,對(duì)于在單片機(jī)與其他外部芯片的連接上也有一定的參考價(jià)值。
本設(shè)計(jì)的實(shí)驗(yàn)原理圖如圖1所示。
圖1 單片8255A擴(kuò)展并口實(shí)驗(yàn)原理圖
實(shí)驗(yàn)的主要內(nèi)容是通過(guò)8255A輸出數(shù)據(jù)以使得兩個(gè)BCD類型數(shù)碼管顯示60秒的計(jì)數(shù)器。內(nèi)容較為簡(jiǎn)單,主要是體現(xiàn)出對(duì)8255A的基本設(shè)置。為此可按照下述步驟進(jìn)行實(shí)驗(yàn)的準(zhǔn)備與設(shè)計(jì)。
這部分主要是為了幫助學(xué)生將課堂所學(xué)的有關(guān)8255A的相關(guān)特點(diǎn)進(jìn)行一個(gè)歸納總結(jié),以便為后續(xù)的實(shí)驗(yàn)作準(zhǔn)備。為此,可以設(shè)置一些問(wèn)答及思考題,讓學(xué)生在實(shí)驗(yàn)中完成。以鞏固所學(xué)的知識(shí)點(diǎn)。例如可設(shè)置下面的問(wèn)題:
(1)8255A內(nèi)部一共有 個(gè)寄存器,其對(duì)應(yīng)的外部地址為A1A0,且當(dāng)A1A0為 時(shí)表示此時(shí)的數(shù)據(jù)接收寄存器為 。
(2)根據(jù)圖2所示的8255A的控制寄存器格式[2],說(shuō)明當(dāng)寄存器為 時(shí),表示A口為輸出,方式0、其余口為方式0,輸出?
圖2 8255A控制方式字
(3)在與8255A進(jìn)行連接時(shí),_______與A1A0形成地址信號(hào)。
通過(guò)類似上述三個(gè)問(wèn)題的回答,能夠較為清楚地反應(yīng)出8255A并口芯片在實(shí)現(xiàn)連接以及軟件設(shè)置時(shí)的重點(diǎn)。
為了能夠?qū)崿F(xiàn)擴(kuò)展,51單片機(jī)本身的外連時(shí)的主要特性也是整個(gè)外擴(kuò)的重點(diǎn)內(nèi)容,尤其是對(duì)P0的外接鎖存器以連接地址線,以及同時(shí)又要與數(shù)據(jù)線相連的特點(diǎn),此外還需要掌握通過(guò)MOVX實(shí)現(xiàn)對(duì)外部數(shù)據(jù)傳輸?shù)姆椒ā榇丝蓞⒖?255A的做法設(shè)置相應(yīng)的問(wèn)答及思考題加強(qiáng)學(xué)生對(duì)相關(guān)的重點(diǎn)難點(diǎn)理解與掌握。可設(shè)置諸如下面所給的例子中相關(guān)的思考題以充分發(fā)揮學(xué)生的主動(dòng)性
(1)51單片機(jī)在外擴(kuò)時(shí)是如何實(shí)現(xiàn)與外接設(shè)備的地址數(shù)據(jù)相連操作的?期間用到了鎖存器LS373,鎖存器用在何處?為什么?
(2)若外設(shè)的地址線有3根,那么單片機(jī)可設(shè)置的地址范圍是多少?
(3)單片機(jī)的ALE信號(hào)主要作用是什么?外接時(shí),一般接在何處?
(4)單片機(jī)訪問(wèn)外部的指令是什么?具有怎樣的格式?
(5)有哪些間接尋址寄存器可使用?使用所采取的選擇標(biāo)準(zhǔn)是什么?
通過(guò)類似上述思考題的設(shè)置,可以較為全面地歸納了51單片機(jī)在外擴(kuò)時(shí)的硬件軟件特征。通過(guò)對(duì)各個(gè)問(wèn)題的回答,更加深了對(duì)知識(shí)點(diǎn)的了解。
通過(guò)上面的分析和準(zhǔn)備,指出了外擴(kuò)時(shí)的主要控制信號(hào)以及讀寫實(shí)現(xiàn)的原理。因此,可在此處依然以問(wèn)答的方式逐步引導(dǎo)學(xué)生寫出關(guān)鍵信號(hào)的連接關(guān)系,并繪制電路圖。相比事先給一個(gè)電路圖,讓學(xué)生照著畫的方式,更能調(diào)動(dòng)學(xué)生的積極主動(dòng)性,引發(fā)思考。充分利用實(shí)驗(yàn)課時(shí),提高實(shí)驗(yàn)的效率和教學(xué)成果。
(1)8255A的A1A0及CS可與單片機(jī)的那一部分進(jìn)行相連,對(duì)應(yīng)的地址分別是多少?
(2)74LS373的LE、OE如 何連接?
(3)數(shù)據(jù)線之間的連接關(guān)系如何?
(4)兩個(gè)BCD類型的7段數(shù)碼管與8255A如何連接。
通過(guò)對(duì)以上問(wèn)題的思考,基本上能夠勾畫出整體的電路結(jié)構(gòu)圖,能夠在Proteus中畫出類似本文圖1的系統(tǒng)結(jié)構(gòu)圖。
單片機(jī)的軟件設(shè)計(jì)與硬件電路的構(gòu)成息息相關(guān),而單片8255A擴(kuò)展實(shí)驗(yàn)中,軟件部分主要是實(shí)現(xiàn)對(duì)8255A的控制寄存器設(shè)置以及讀寫操作。所使用的指令是MOVX。但就對(duì)8255A操作上,程序設(shè)計(jì)并沒(méi)有任何難度,實(shí)驗(yàn)的難點(diǎn)在于60秒顯示數(shù)據(jù)的產(chǎn)生。
8255A相關(guān)設(shè)置程序設(shè)計(jì):
(1)根據(jù)電路,所使用的與數(shù)碼管相連的接口屬于輸入還是輸出?
(2)哪一種工作方式比較適合?由此得出的控制寄存器的值應(yīng)為多少?
(3)如何將設(shè)置的值寫入8255A的控制寄存器?
顯示部分程序設(shè)計(jì):
(1)如何將一個(gè)兩位十進(jìn)制數(shù)據(jù)分離為十位、個(gè)位?
(2)BCD顯示的顯示碼如何確定?
(3)1s的時(shí)間通過(guò)軟件如何實(shí)現(xiàn)?
通過(guò)對(duì)上述問(wèn)題的回答,能夠?qū)懗鋈缦屡c實(shí)驗(yàn)有關(guān)的程序。
在實(shí)現(xiàn)上述程序時(shí),對(duì)一些較難的點(diǎn),可在提示下幫助學(xué)生完成,以實(shí)現(xiàn)在實(shí)驗(yàn)教學(xué)環(huán)節(jié)的教學(xué)互動(dòng)。而非老師一味地講解原理,學(xué)生一味地被動(dòng)聽。缺乏獨(dú)立思考的時(shí)間,對(duì)所操作的實(shí)驗(yàn)沒(méi)有深入的體會(huì)和理解。
通過(guò)對(duì)這一簡(jiǎn)單的實(shí)驗(yàn)從分析到設(shè)計(jì)并到最終觀察到實(shí)驗(yàn)現(xiàn)象,完全是靠學(xué)生參與到其中,逐步實(shí)現(xiàn)的過(guò)程。透過(guò)觀察到的實(shí)驗(yàn)現(xiàn)象,可以看出與之前直接通過(guò)51單片機(jī)的某個(gè)并口輸出60的計(jì)數(shù)顯示數(shù)據(jù)進(jìn)行對(duì)比,通過(guò)8255A可以實(shí)現(xiàn)相同的功能。實(shí)驗(yàn)體現(xiàn)了關(guān)鍵信號(hào)之間的連接與控制作用,以及利用MOVX實(shí)現(xiàn)外部數(shù)據(jù)傳輸?shù)溶浻布Y(jié)合的方法,實(shí)現(xiàn)了擴(kuò)展。由此,能讓學(xué)生更加深入理解這種擴(kuò)展方法的核心。此外,可針對(duì)連接關(guān)系進(jìn)一步引發(fā)學(xué)生的思考。如可就其中若改變CS、A1、A0與P0口的連接,則對(duì)實(shí)驗(yàn)將產(chǎn)生怎樣的影響,程序的設(shè)計(jì)將如何修改等問(wèn)題進(jìn)行提問(wèn)。為后續(xù)的多片進(jìn)行擴(kuò)展的方法開拓思路。
經(jīng)過(guò)單片8255A擴(kuò)展并口的基本實(shí)驗(yàn)的設(shè)計(jì)與分析過(guò)程,使學(xué)生已經(jīng)建立了對(duì)這種擴(kuò)展方式的感性認(rèn)識(shí)及較為深入的理解。而單片擴(kuò)展的方法使得51單片機(jī)的并口數(shù)量擴(kuò)展為5個(gè)8位并口,因?yàn)槠渲蠵0及P3口被占用了資源。而實(shí)際應(yīng)用中,存在著對(duì)并口資源數(shù)量更多的要求,因此,如何利用8255A擴(kuò)展出更多的并口,便成了51單片機(jī)外擴(kuò)并口的一個(gè)具有現(xiàn)實(shí)意義的問(wèn)題。為此,有必要在實(shí)驗(yàn)中加入這一內(nèi)容。為此,在單片擴(kuò)展實(shí)驗(yàn)的基礎(chǔ)上,加入另一片8255A,從而構(gòu)成一個(gè)具有8個(gè)并口的51單片機(jī)系統(tǒng)。且整個(gè)實(shí)驗(yàn)的設(shè)置可參考單片的模式,引導(dǎo)學(xué)生逐步實(shí)現(xiàn)設(shè)計(jì)并完成實(shí)驗(yàn)。
解決的主要問(wèn)題是,另一片8255A將怎樣接入到只有一片8255A的并口系統(tǒng)中,針對(duì)這一問(wèn)題,仍舊可以通過(guò)提出對(duì)應(yīng)思考題的方式進(jìn)行。在有了對(duì)8255A關(guān)鍵控制信號(hào)以及與單片機(jī)互連受單片控制完成控制字的設(shè)置,以及數(shù)據(jù)讀寫的單片擴(kuò)展基礎(chǔ),要回答這一類問(wèn)題相對(duì)容易。此外,新引入的8255A也要考慮其內(nèi)部控制寄存器以及A、B和C口數(shù)據(jù)寄存器的地址分配問(wèn)題。而這些早已在上一個(gè)單片擴(kuò)展實(shí)驗(yàn)中就已解決的問(wèn)題,在這里完全具有一定的參考價(jià)值,學(xué)生能較容易地寫出第二片8255A各個(gè)口的分配地址。從而更能體會(huì)外接存儲(chǔ)器或接口地址劃分的技術(shù)。若此時(shí)提出要求增加的第二片8255A將作為輸入接入8個(gè)按鈕以實(shí)現(xiàn)第一片上顯示第二片中接入的按鈕按下的具體哪一號(hào)鍵,則學(xué)生能夠畫出如圖3所示的多片8255A擴(kuò)展的實(shí)驗(yàn)硬件結(jié)構(gòu)圖。
圖3 多片8255A擴(kuò)展硬件構(gòu)成圖
圖3所示的系統(tǒng)連接圖,通過(guò)同一個(gè)P0.2的輸出作為對(duì)芯片片選信號(hào)的輸出控制,且從連接的關(guān)系來(lái)看,兩片的片選信號(hào)屬于互斥關(guān)系,當(dāng)一片被選中時(shí),另一片處于未選中的狀態(tài)。這一屬性是通過(guò)P0.2的經(jīng)鎖存器輸出以直接接在其中一片,而另一片則經(jīng)過(guò)反相器進(jìn)行連接對(duì)應(yīng)的CS片選而實(shí)現(xiàn)的,而A1A0的連接,可以兩片的都通過(guò)相同的信號(hào)進(jìn)行控制,也可以選擇不同的P0口進(jìn)行確定,圖3所示的采用的是第二種方法。從而保證了兩片8255A各個(gè)內(nèi)部寄存器在地址上不會(huì)出現(xiàn)重疊。
多片8255A軟件設(shè)計(jì)部分主要是針對(duì)兩片不同的8255A進(jìn)行控存不同數(shù)據(jù)的寫入,以及通過(guò)第二片的輸入按鈕數(shù)據(jù),并通過(guò)第一片8255A輸出。程序?qū)崿F(xiàn)的功能相對(duì)簡(jiǎn)單,但包括了有關(guān)外擴(kuò)的主要特點(diǎn)。按圖3所示的結(jié)構(gòu),第一片的控存地址仍舊為03H,第二片為1CH,第一片的A口地址為00H,第二片B口地址為0CH。另外,第一片的控制數(shù)據(jù)仍舊為80H,第二片的則為82H。得出這些重要的相關(guān)數(shù)據(jù)后,引導(dǎo)學(xué)生寫出實(shí)驗(yàn)程序。程序的主要功能是通過(guò)從第二片讀取數(shù)據(jù),并通過(guò)第一片輸出。
通過(guò)設(shè)置兩個(gè)基于51單片機(jī)與8255A連接以實(shí)現(xiàn)并口擴(kuò)展的實(shí)驗(yàn),讓學(xué)生掌握并理解這一擴(kuò)展方法的關(guān)鍵技術(shù)。與大多數(shù)直接給出實(shí)驗(yàn)原理圖以及實(shí)驗(yàn)代碼的方式不同,為了改變老師講解,學(xué)生被動(dòng)聽,最終實(shí)驗(yàn)教學(xué)效果低下的現(xiàn)狀,本實(shí)驗(yàn)設(shè)計(jì)采用的是引導(dǎo)式教學(xué)方式。從分析8255A的主要結(jié)構(gòu)包括內(nèi)部寄存器及外部引腳連接入手,以思考題的方式讓學(xué)生主動(dòng)積極復(fù)習(xí)所學(xué)的知識(shí),同時(shí)也采用同一方式加深51單片機(jī)外接時(shí)的主要信號(hào)特點(diǎn)。并在對(duì)這些關(guān)鍵性問(wèn)題的回答上,自行在Proteus中畫出相應(yīng)的實(shí)驗(yàn)電路圖。從而激發(fā)學(xué)生實(shí)驗(yàn)的積極性及主動(dòng)性。而實(shí)驗(yàn)內(nèi)容的設(shè)計(jì)上,采用逐步提高的方式,在理解并實(shí)際設(shè)計(jì)單片8255A擴(kuò)展的基礎(chǔ)上,進(jìn)一步實(shí)現(xiàn)通過(guò)兩片8255A實(shí)現(xiàn)擴(kuò)展的方法。不僅對(duì)外接方法有了一進(jìn)步的認(rèn)識(shí)和掌握,還能深入理解多片擴(kuò)展增加并口數(shù)量的意義所在。在實(shí)際的教學(xué)中取到了很好地教學(xué)效果。使學(xué)生能夠充分利用實(shí)驗(yàn)時(shí)間,掌握實(shí)驗(yàn)內(nèi)容。