曹曉龍
(貴州師范大學,貴州貴陽,550001)
單片機常用于各種需要進行控制的領域,包括工業、工業乃至家庭電子產品。單獨一個單片機是無法完成控制作用的,必須通過單片機與外部設備進行連接。然而51單片機的并口資源較少,僅有P0、P1、P2和P3四個8位并口。且在大多數情況下,外接存儲器、大量IO接口時,P0、P2作為地址數據線、P3則作為控制線。而余下的僅有P1口。由此可見,51的并口資源是極其缺乏的。有必要采取一定的方法對51的并口資源進行擴展。多數教材中,基本上都介紹了利用鎖存器及緩沖器進行雙向并口的擴展,以及利用并口芯片8255A進行擴展的方法[1]。然而,教學過程中僅靠老師引導式地講解,還不足以讓學生完全了解這種方法的核心,沒有形成直觀的感受,在脫離課堂以及課本后,學生仍舊無法充分掌握該擴展法。正是在這一背景下,本文提出了一種利用Proteus仿真平臺,設計一個有關利用8255A進行并口擴展的方法實驗,旨在通過對整個實驗內容的設計,讓學生親自動手,逐步實現其硬件軟件設計,并最終能夠理解并掌握擴展方法。此外,對于在單片機與其他外部芯片的連接上也有一定的參考價值。
本設計的實驗原理圖如圖1所示。

圖1 單片8255A擴展并口實驗原理圖
實驗的主要內容是通過8255A輸出數據以使得兩個BCD類型數碼管顯示60秒的計數器。內容較為簡單,主要是體現出對8255A的基本設置。為此可按照下述步驟進行實驗的準備與設計。
這部分主要是為了幫助學生將課堂所學的有關8255A的相關特點進行一個歸納總結,以便為后續的實驗作準備。為此,可以設置一些問答及思考題,讓學生在實驗中完成。以鞏固所學的知識點。例如可設置下面的問題:
(1)8255A內部一共有 個寄存器,其對應的外部地址為A1A0,且當A1A0為 時表示此時的數據接收寄存器為 。
(2)根據圖2所示的8255A的控制寄存器格式[2],說明當寄存器為 時,表示A口為輸出,方式0、其余口為方式0,輸出?

圖2 8255A控制方式字
(3)在與8255A進行連接時,_______與A1A0形成地址信號。
通過類似上述三個問題的回答,能夠較為清楚地反應出8255A并口芯片在實現連接以及軟件設置時的重點。
為了能夠實現擴展,51單片機本身的外連時的主要特性也是整個外擴的重點內容,尤其是對P0的外接鎖存器以連接地址線,以及同時又要與數據線相連的特點,此外還需要掌握通過MOVX實現對外部數據傳輸的方法。為此可參考8255A的做法設置相應的問答及思考題加強學生對相關的重點難點理解與掌握。可設置諸如下面所給的例子中相關的思考題以充分發揮學生的主動性
(1)51單片機在外擴時是如何實現與外接設備的地址數據相連操作的?期間用到了鎖存器LS373,鎖存器用在何處?為什么?
(2)若外設的地址線有3根,那么單片機可設置的地址范圍是多少?
(3)單片機的ALE信號主要作用是什么?外接時,一般接在何處?
(4)單片機訪問外部的指令是什么?具有怎樣的格式?
(5)有哪些間接尋址寄存器可使用?使用所采取的選擇標準是什么?
通過類似上述思考題的設置,可以較為全面地歸納了51單片機在外擴時的硬件軟件特征。通過對各個問題的回答,更加深了對知識點的了解。
通過上面的分析和準備,指出了外擴時的主要控制信號以及讀寫實現的原理。因此,可在此處依然以問答的方式逐步引導學生寫出關鍵信號的連接關系,并繪制電路圖。相比事先給一個電路圖,讓學生照著畫的方式,更能調動學生的積極主動性,引發思考。充分利用實驗課時,提高實驗的效率和教學成果。
(1)8255A的A1A0及CS可與單片機的那一部分進行相連,對應的地址分別是多少?
(2)74LS373的LE、OE如 何連接?
(3)數據線之間的連接關系如何?
(4)兩個BCD類型的7段數碼管與8255A如何連接。
通過對以上問題的思考,基本上能夠勾畫出整體的電路結構圖,能夠在Proteus中畫出類似本文圖1的系統結構圖。
單片機的軟件設計與硬件電路的構成息息相關,而單片8255A擴展實驗中,軟件部分主要是實現對8255A的控制寄存器設置以及讀寫操作。所使用的指令是MOVX。但就對8255A操作上,程序設計并沒有任何難度,實驗的難點在于60秒顯示數據的產生。
8255A相關設置程序設計:
(1)根據電路,所使用的與數碼管相連的接口屬于輸入還是輸出?
(2)哪一種工作方式比較適合?由此得出的控制寄存器的值應為多少?
(3)如何將設置的值寫入8255A的控制寄存器?
顯示部分程序設計:
(1)如何將一個兩位十進制數據分離為十位、個位?
(2)BCD顯示的顯示碼如何確定?
(3)1s的時間通過軟件如何實現?
通過對上述問題的回答,能夠寫出如下與實驗有關的程序。


在實現上述程序時,對一些較難的點,可在提示下幫助學生完成,以實現在實驗教學環節的教學互動。而非老師一味地講解原理,學生一味地被動聽。缺乏獨立思考的時間,對所操作的實驗沒有深入的體會和理解。
通過對這一簡單的實驗從分析到設計并到最終觀察到實驗現象,完全是靠學生參與到其中,逐步實現的過程。透過觀察到的實驗現象,可以看出與之前直接通過51單片機的某個并口輸出60的計數顯示數據進行對比,通過8255A可以實現相同的功能。實驗體現了關鍵信號之間的連接與控制作用,以及利用MOVX實現外部數據傳輸等軟硬件結合的方法,實現了擴展。由此,能讓學生更加深入理解這種擴展方法的核心。此外,可針對連接關系進一步引發學生的思考。如可就其中若改變CS、A1、A0與P0口的連接,則對實驗將產生怎樣的影響,程序的設計將如何修改等問題進行提問。為后續的多片進行擴展的方法開拓思路。
經過單片8255A擴展并口的基本實驗的設計與分析過程,使學生已經建立了對這種擴展方式的感性認識及較為深入的理解。而單片擴展的方法使得51單片機的并口數量擴展為5個8位并口,因為其中P0及P3口被占用了資源。而實際應用中,存在著對并口資源數量更多的要求,因此,如何利用8255A擴展出更多的并口,便成了51單片機外擴并口的一個具有現實意義的問題。為此,有必要在實驗中加入這一內容。為此,在單片擴展實驗的基礎上,加入另一片8255A,從而構成一個具有8個并口的51單片機系統。且整個實驗的設置可參考單片的模式,引導學生逐步實現設計并完成實驗。
解決的主要問題是,另一片8255A將怎樣接入到只有一片8255A的并口系統中,針對這一問題,仍舊可以通過提出對應思考題的方式進行。在有了對8255A關鍵控制信號以及與單片機互連受單片控制完成控制字的設置,以及數據讀寫的單片擴展基礎,要回答這一類問題相對容易。此外,新引入的8255A也要考慮其內部控制寄存器以及A、B和C口數據寄存器的地址分配問題。而這些早已在上一個單片擴展實驗中就已解決的問題,在這里完全具有一定的參考價值,學生能較容易地寫出第二片8255A各個口的分配地址。從而更能體會外接存儲器或接口地址劃分的技術。若此時提出要求增加的第二片8255A將作為輸入接入8個按鈕以實現第一片上顯示第二片中接入的按鈕按下的具體哪一號鍵,則學生能夠畫出如圖3所示的多片8255A擴展的實驗硬件結構圖。

圖3 多片8255A擴展硬件構成圖
圖3所示的系統連接圖,通過同一個P0.2的輸出作為對芯片片選信號的輸出控制,且從連接的關系來看,兩片的片選信號屬于互斥關系,當一片被選中時,另一片處于未選中的狀態。這一屬性是通過P0.2的經鎖存器輸出以直接接在其中一片,而另一片則經過反相器進行連接對應的CS片選而實現的,而A1A0的連接,可以兩片的都通過相同的信號進行控制,也可以選擇不同的P0口進行確定,圖3所示的采用的是第二種方法。從而保證了兩片8255A各個內部寄存器在地址上不會出現重疊。
多片8255A軟件設計部分主要是針對兩片不同的8255A進行控存不同數據的寫入,以及通過第二片的輸入按鈕數據,并通過第一片8255A輸出。程序實現的功能相對簡單,但包括了有關外擴的主要特點。按圖3所示的結構,第一片的控存地址仍舊為03H,第二片為1CH,第一片的A口地址為00H,第二片B口地址為0CH。另外,第一片的控制數據仍舊為80H,第二片的則為82H。得出這些重要的相關數據后,引導學生寫出實驗程序。程序的主要功能是通過從第二片讀取數據,并通過第一片輸出。
通過設置兩個基于51單片機與8255A連接以實現并口擴展的實驗,讓學生掌握并理解這一擴展方法的關鍵技術。與大多數直接給出實驗原理圖以及實驗代碼的方式不同,為了改變老師講解,學生被動聽,最終實驗教學效果低下的現狀,本實驗設計采用的是引導式教學方式。從分析8255A的主要結構包括內部寄存器及外部引腳連接入手,以思考題的方式讓學生主動積極復習所學的知識,同時也采用同一方式加深51單片機外接時的主要信號特點。并在對這些關鍵性問題的回答上,自行在Proteus中畫出相應的實驗電路圖。從而激發學生實驗的積極性及主動性。而實驗內容的設計上,采用逐步提高的方式,在理解并實際設計單片8255A擴展的基礎上,進一步實現通過兩片8255A實現擴展的方法。不僅對外接方法有了一進步的認識和掌握,還能深入理解多片擴展增加并口數量的意義所在。在實際的教學中取到了很好地教學效果。使學生能夠充分利用實驗時間,掌握實驗內容。