利用單片計(jì)算機(jī)實(shí)現(xiàn)彩燈控制
(作者未知) 2010/3/21
(接上頁)#0E0H
MOV TH0,#0B1H
SETB EA
SETB ET0
SETB TR0
HERE:SJMP HERE
INT0:PUSH ACC
MOV TL0,#0E0H
MOV TH0,#0B1H
INC R7
CJNZ R7,#26,PEND
MOV R7,#00H
MOV P1,#0C3H ;第3、4、5,6燈亮
POP ACC
PEND:RETI
END
4程序的調(diào)試
將寫好的程序在偉福編譯器中進(jìn)行編譯,得到.BIN文件,固化到單片機(jī)的芯片中,將芯片插到前面已經(jīng)組裝完畢的硬件電路的芯片插座上,這樣就組成了一個完整的彩燈控制電路,當(dāng)接通電源之后理論上就應(yīng)該看到彩燈按照預(yù)定的方式閃爍。
4.1延時子程序的運(yùn)行
該程序的運(yùn)行按照預(yù)定的程序運(yùn)行,每隔0.2s可以看到彩燈閃爍一次,并且8個發(fā)光二極管的亮和滅嚴(yán)格按照程序的要求進(jìn)行;
4.2中斷程序?qū)崿F(xiàn)的延時
由于程序采用了中斷方式延時,所以彩燈閃爍的改變只能由中斷服務(wù)子程序中設(shè)定的程序來實(shí)現(xiàn)對其的改變,在此程序中,在MAIN主程序中已經(jīng)設(shè)定了彩燈初始時有第1、2和第7、8燈亮,而在中斷服務(wù)子程序中有第3、4、5,6燈亮,從而實(shí)現(xiàn)了“閃爍”,但是這種中斷方式的缺點(diǎn)在于閃爍的模式太過于單一,只能進(jìn)行這兩種方式的循環(huán)改變。在實(shí)際中難以滿足人們多樣化的需求,這是一個需要解決的問題。
4.3中斷程序?qū)崿F(xiàn)的延時方法的改進(jìn)
為此,我對以上的程序進(jìn)行了一點(diǎn)改動,綜合子程序延時和中斷延時兩程序?qū)懥讼旅孢@些代碼:
ORG 0000H
AJMP MAIN0 ;第一種亮的模式
ORG 000BH
AJMP INT0
AJMP MAIN1 ;第二種亮的模式
ORG 000BH
AJMP INT0
AJMP MAIN2 ;第三種亮的模式
ORG 000BH
AJMP INT0
ORG 0030H
MAIN0:MOV P1,#00FH ;第一種亮的模式:5、6、7,8燈亮
AJMP MAIN
MAIN1:MOV P1,#0F0H ;第二種亮的模式:1、2、3,4燈亮
AJMP MAIN
MAIN2:MOV P1,#000H ;第三種亮的模式:全亮
AJMP MAIN
MAIN:MOV R7,#00H
MOV TMOD,#010H
MOV TL0,#0E0H
MOV TH0,#0B1H
SETB EA
SETB ET0
SETB TR0
HERE:SJMP HERE
INT0:PUSH ACC
MOV TL0,#0E0H
MOV TH0,#0B1H
INC R7
CJNZ R7,#26,PEND
MOV R7,#00H
MOV P1,#0FFH ;燈全滅
POP ACC
PEND:RETI
END
在這段程序中,中斷服務(wù)程序執(zhí)行的是“燈全滅”這一動作。燈的閃爍模式有三種,由對P1口送指定的立即數(shù)來實(shí)現(xiàn)。
可以看到,等待計(jì)數(shù)器計(jì)數(shù)到FFFF需要一段時間,這也就是燈閃爍的時間差。
利用這種方式也可以達(dá)到延時的目的,同時也(未完,下一頁)
|