曹克澄
上海電機(jī)學(xué)院高職學(xué)院 上海 201306
在《單片機(jī)原理及應(yīng)用》教學(xué)內(nèi),教師常將流水燈控制作為一個(gè)案例和實(shí)驗(yàn)內(nèi)容進(jìn)行講解和演示,從而提高學(xué)生的學(xué)習(xí)興趣。基于對(duì)流水燈的控制可以設(shè)計(jì)出許多單片機(jī)教學(xué)內(nèi)容。本文以匯編語(yǔ)言為例闡述教學(xué)內(nèi)容。
流水燈的控制電路如圖1所示,采用灌電流電阻方式,這里要給學(xué)生講清楚為什么采用灌電流方式,不用拉電流方式,主要防止輸出電流過(guò)大使CPU 發(fā)熱甚至燒壞。
圖1 流水燈電路圖
其程序清單如下:
;???????????????????????????????
;?軟件定時(shí)的流水燈循環(huán)左移顯示程序?
;???????????????????????????????
ORG 0000H
LJMP MAIN
;????????????????
;?主程序?
;????????????????
ORG 0100H
MAIN:MOV A,#01H
LOOP:MOV P1,A
RL A
LCALL DELAY
SJMP LOOP
;????????????????????
;?延時(shí)子程序?
;????????????????????
ORG 0200H
DELAY:…
…
END
如何在上述電路及程序的基礎(chǔ)完成更多的教學(xué)內(nèi)容? 這就是涉及教學(xué)內(nèi)容設(shè)計(jì)。
1、流水燈花樣控制。上述程序可以實(shí)現(xiàn)流水燈單個(gè)LED循環(huán)左移點(diǎn)亮,就可以向?qū)W生提出對(duì)流水燈控制更多的要求,具體如下:
(1)如果要求實(shí)現(xiàn)右移,由學(xué)生找出適當(dāng)?shù)闹噶罴右孕薷? 答案很簡(jiǎn)單:將指令“RL A”改為“RR A”即可。這樣就講解了兩條指令的功能,同時(shí)可以講解其他類似的指令“RLC A”和“RRC A”,如果在上面的程序中將“RL A”指令分別用這兩條代替指令,流水燈顯示的情況與前面有什么不同?
(2)如果要求先亮高4位四個(gè)LED亮、低4位LED暗,延時(shí)后高4位發(fā)光LED暗、低4位LED燈;依次反復(fù),又如何實(shí)現(xiàn)?
那么就要求將指令“MOV A,#01H”改為“MOV A,#0F0H”,而指令“RL A”可以既可以用指令“CPL A”代替,也可以用“XOR A,#0FF”代替,還可以用“SWAP A”指令代替,當(dāng)然也可以用比較指令來(lái)實(shí)現(xiàn)(當(dāng)然本例中用比較指令不是最優(yōu)化的程序),這樣就可以拓展學(xué)生靈活使用各類指令的思路。
(3)對(duì)于流水燈的花樣還有許多,如:依次逐個(gè)從高到低或從低到高點(diǎn)亮LED,8個(gè)LED從外向里(即從兩頭向里)依次逐個(gè)點(diǎn)亮LED或從里向外(即從里向兩頭)依次逐個(gè)點(diǎn)亮LED。這樣編寫程序的難度逐步在增加。
在此基礎(chǔ)還可以將只有8個(gè)LED擴(kuò)大為16個(gè)LED,另8個(gè)在P2口輸出,要出現(xiàn)上述各功能,又可以將編程的難度增加。
(4)在上述基礎(chǔ)上,還可以要求學(xué)生編寫在一個(gè)程序中實(shí)現(xiàn)幾個(gè)花樣的流水燈控制,也可以通過(guò)開(kāi)關(guān)、紅外線遙控器來(lái)選擇不同的花樣,這樣學(xué)生就要掌握條件判斷指令、紅外線遙控器信號(hào)接收及編碼識(shí)別的知識(shí)。
2、定時(shí)方式的設(shè)計(jì)。在單片機(jī)控制系統(tǒng)中,經(jīng)過(guò)要采用定時(shí)方法,定時(shí)方式一般有兩種:軟件定時(shí)和硬件定時(shí)。軟件定時(shí)指編寫延時(shí)子程序,通過(guò)調(diào)用延時(shí)子程序?qū)崿F(xiàn)定時(shí)目的;硬件定時(shí)指采用單片機(jī)內(nèi)部定時(shí)器實(shí)現(xiàn)定時(shí)。因此在流水燈循環(huán)點(diǎn)亮中,設(shè)計(jì)兩種定時(shí)方式,讓學(xué)生學(xué)習(xí)體會(huì)。
(1)軟件定時(shí)(調(diào)用延時(shí)子程序)。編程定時(shí)子程序在教學(xué)上可以安排學(xué)生編寫不同的定時(shí)子程序,常見(jiàn)的有10ms、50ms、100ms、500ms、1s,通過(guò)編寫這些子程序讓學(xué)生學(xué)會(huì)如何計(jì)算各循環(huán)次數(shù),如何通過(guò)插入NOP指令進(jìn)行時(shí)間的微調(diào)(有時(shí)光靠循環(huán)無(wú)法做到剛好達(dá)到規(guī)定的定時(shí)時(shí)間)。
(2)硬件定時(shí)(內(nèi)部定時(shí)器定時(shí))。采用內(nèi)部定時(shí)器進(jìn)行定時(shí)就比較方便,但要注意內(nèi)部定時(shí)器在系統(tǒng)時(shí)鐘頻率12MHz時(shí),最大在定時(shí)時(shí)間是工作在方式1時(shí)的65.536ms,如果按上例中要定時(shí)500ms,則要設(shè)計(jì)一個(gè)計(jì)數(shù)器,定時(shí)器的定時(shí)時(shí)間為50ms,計(jì)數(shù)器計(jì)數(shù)到10次,則代表定時(shí)500ms時(shí)間到。
在采用內(nèi)部定時(shí)器定時(shí)時(shí),主程序中安排的是定時(shí)器初始化程序,即選擇定時(shí)器工作方式、設(shè)置定時(shí)器初值、中斷系統(tǒng)有關(guān)設(shè)置及啟動(dòng)定時(shí)器工作,而實(shí)現(xiàn)流水燈花樣控制的指令要安排在定時(shí)器中斷服務(wù)程序中,同時(shí)每次500ms定時(shí)時(shí)間到要對(duì)計(jì)數(shù)器清零。
3、其他教學(xué)內(nèi)容設(shè)計(jì)
(1)在圖1中LED直接接單片機(jī)的P1口,假設(shè)單片機(jī)的并行口不夠用,需要擴(kuò)展接口電路,如通過(guò)并行擴(kuò)展接口電路8255A與LED連接。
(2)利用LED加深對(duì)地址譯碼器74LS138、74LS139電路、地址鎖存器74LS373電路的理解,通過(guò)輸出不同的地址,觀察LED的亮暗情況。
綜上所述,利用LED流水燈可以設(shè)計(jì)出許多教學(xué)內(nèi)容,既可以提高學(xué)生學(xué)習(xí)興趣,也可以豐富教學(xué)內(nèi)容。