吳昂
摘要:本文主要探討和講述了在DVCC環(huán)境下,通過8255并行I/O端口擴展,將LED的流水式顯示與數(shù)碼管的跑馬燈應(yīng)用結(jié)合,同時通過程序加以協(xié)同控制,達(dá)到了LED與數(shù)碼管同時輪轉(zhuǎn)點亮的效果。硬件電路設(shè)計上采用了與數(shù)碼管數(shù)量相對應(yīng)的“6位分組控制”的形式,簡化了程序設(shè)計;延時程序采用了寄存器控制可變延時的模式,可靈活同步控制LED與數(shù)碼管的輪轉(zhuǎn)點亮速率。本文的整體設(shè)計已在單片機課程的教學(xué)實驗環(huán)節(jié)中多次使用,教學(xué)效果反映良好。
關(guān)鍵詞:DVCC 8255 延時程序 6位分組控制
一、DVCC系列單片機仿真實驗系統(tǒng)簡介
DVCC系列單片機仿真實驗系統(tǒng)由仿真技術(shù)及模塊化實驗電路結(jié)合而成,可用于MCS-51、MCS-96系列單片機的教學(xué)實驗與仿真開發(fā)。該系統(tǒng)模擬用戶開發(fā)環(huán)境,可與PC機聯(lián)機,實現(xiàn)用戶程序的編輯、編譯與調(diào)試運行。DVCC仿真實驗系統(tǒng)配備有8255、8251、8155等單片機常用接口芯片,脈沖發(fā)生器,步進(jìn)電機,繼電器,EPROM編程器等多種單片機應(yīng)用設(shè)計輔助單元。本文主要涉及到數(shù)碼管控制與8255并行I/O端口擴展對LED的控制。
二、詳細(xì)設(shè)計
1.數(shù)碼管控制
DVCC實驗箱提供了6個數(shù)碼管,其電路連接封裝于實驗箱內(nèi)部,無需手動連線,使用極為簡單。6個數(shù)碼管的字形口地址為0FF22H,位選口地址為0FF21H;由16位寄存器DPTR或8位寄存器R0、R1控制皆可。
2.8255并行I/O端口擴展對LED的控制
DVCC實驗箱提供了共12個LED,可直接通過MCS-51單片機I/O口(如P1)控制,也可由外圍芯片(如8255)擴展控制,需通過插針線手動連接。在基本LED的流水式顯示實驗中,可選擇MCS-51單片機P1口控制8個LED由進(jìn)行;若需要控制所有12個LED,則需要由P1口和P2口共同控制。但是,如果將12個LED的流水式顯示與數(shù)碼管的跑馬燈應(yīng)用結(jié)合,則P2口必須用作數(shù)碼管等外圍設(shè)備的高8位地址位,無法和P1口共同控制LED,所以需要將12個LED的控制交由擴展芯片(如8255)完成。此時,需要合理分配使用3個地址寄存器(即DPTR、R0和R1),才能有效同時控制12個LED與6個數(shù)碼管。本文選取DPTR動態(tài)控制8255的控制口、數(shù)碼管的字形口與位選口,R0和R1分別控制8255的A口和B口(默認(rèn)地址高8位為0FFH)。
3.六位分組控制
在確定8255的A口和B口控制LED后,需要從A口和B口共16位中選取12位逐一控制12個LED,本文選取了PA0~PA5和PB0~PB5共12位分別控制LED1~LED12,即“六位分組控制”。
將12個LED“六位分組控制”,分成2組,正好與6個數(shù)碼管在數(shù)量上對應(yīng)。這種分配方案的最大好處是可用1個寄存器(如累加器)同時控制一組LED與6個數(shù)碼管,然后再用該寄存器控制另一組LED與6個數(shù)碼管。反映在程序中則以對稱的形式表現(xiàn),代碼的兩部分完全對應(yīng),簡潔易懂(可參見本文最后的程序清單)。
4.8255的A口與B口切換控制
將12個LED“六位分組控制”形成兩組后,由于在流水式顯示中任意時刻只使用兩組中的某一組,所以用一個寄存器控制即可。不過,這里需要有一個切換開關(guān),指示寄存器當(dāng)前控制的是兩組寄存器中的哪一組,即選用PA口連接還是PB口連接的LED。比較直觀的解決方法是設(shè)置一個標(biāo)志位作為開關(guān),本文選取的程序狀態(tài)字PSW中的用戶自定義標(biāo)志F0。
三、程序清單
ORG 0000H
MOV SP,#60H
CLR F0
MOV DPTR,#0FF2BH ;設(shè)置8255控制口地址
MOV A,#80H
MOVX @DPTR,A ;設(shè)置8255工作方式
MOV DPTR,#0FF22H ;設(shè)置數(shù)碼管字形口地址
MOV A,#80H
MOVX @DPTR,A ;選定字形為數(shù)字"8"
MOV DPTR,#0FF21H ;設(shè)置數(shù)碼管位選口地址
MOV R0,#29H ;設(shè)置A口地址
MOV R1,#2AH ;設(shè)置B口地址
ST:MOV A,#01H
CPL F0 ;置換開關(guān)F0
NEXT:JNB F0,L1
MOVX @DPTR,A ;選定數(shù)碼管字位
MOVX @R0,A ;選定A口使用位
PUSH ACC ;保存A口使用位
CLR A
MOVX @R1,A ;將B口清零
POP ACC ;載入A口使用位
MOV R7,#25H
LCALL DELAY ;調(diào)用延時
AJMP L2
L1:MOVX @DPTR,A ;選定數(shù)碼管字位
MOVX @R1,A ;選定B口使用位
PUSH ACC ;保存B口使用位
CLR A
MOVX @R0,A ;將A口清零
POP ACC ;載入B口使用位
MOV R7,#25H
LCALL DELAY ;調(diào)用延時
L2:RL A
JB ACC.6,ST
AJMP NEXT
DELAY: PUSH 07H
DELAY1: PUSH 07H
DELAY2: PUSH 07H
DELAY3: DJNZ R7,DELAY3
POP 07H
DJNZ R7,DELAY2
POP 07H
DJNZ R7,DELAY1
POP 07H
DJNZ R7,DELAY
RET
END
參考文獻(xiàn):
[1]胡輝.單片機原理與應(yīng)用[M].中國水利水電出版社,2011-02.
[2]東南大學(xué)計算機科學(xué)與工程系.DVCC系列單片機微機仿真實驗系統(tǒng)[M].啟動計算機廠有限公司