1、用定時器中斷控制信號燈。 ORG 0000H
本文引用地址:http://www.ex-cimer.com/article/201611/320489.htm LJMP MAIN
ORG 000BH ;內(nèi)中斷T0入口地址
LJMP T0INT
ORG 02400H
MAIN: MOV SP,#30H
MOV A,#00H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
LOOP: LJMP LOOP
ORG 0340H
T0INT: MOV TH0,#3CH
MOV TL0,#0B0H
MOV P1,A
CPL A ;亮點閃爍
RETI
END
分析:在本程序中,使用定時器0的中斷方式產(chǎn)生100ms的延時,實現(xiàn)8個LED的亮點閃爍。當給SP、A賦值后,程序員給TMOD、TH0、TL0,將TR0置1,然后執(zhí)行“LOOP: SJMP LOOP”指令,這樣不斷的循環(huán)。
2、 用定時器中斷和外中斷控制信號燈。
ORG 0000H
LJMP MAIN
ORG 0003H ;外中斷入口地址
LJMP INT
ORG 000BH ;內(nèi)中斷入口地址
LJMP T0INT
ORG 0100H
MAIN: MOV SP,#30H
MOV A,#0FEH
MOV TMOD,#01H
SETB EA
SETB EX0
SETB IT0
SETB ET0
SETB PX0 ;設(shè)置外部中斷0為高優(yōu)先級
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
LOOP0: LJMP LOOP0
ORG 0200H ;內(nèi)中斷程序塊
T0INT: MOV TH0,#3CH
MOV TL0,#0B0H
MOV R3,#08H
MOV P1,A
LCALL DELAY
RL A ;亮點流動
RETI
ORG 0300H ; 外中斷程序塊
INT: PUSH ACC
MOV A,#00H
MOV R3,#08H
LOOP1: MOV P1,A
LCALL DELAY
CPL A ;亮點閃爍
DJNZ R3,LOOP1
POP ACC
RETI
ORG 0400H ;延遲程序塊
DELAY: MOV R0,#0FFH
D1: MOV R1,#0FFH
D2: MOV R2,#0FFH
D3: DJNZ R2,D3
DJNZ R1,D2
DJNZ R0,D1
RET
END
分析:程序開始時,使用定時器0的中斷方式產(chǎn)生100ms的延時,實現(xiàn)8個LED的亮點流動。在亮點流動的過程中,如果按下單脈沖鍵,由于將外部中斷0的優(yōu)先級設(shè)置為高優(yōu)先級,所以8個LED的發(fā)光狀態(tài)將改為同時閃爍,閃爍8次恢復(fù)亮點流動(閃爍時間間隔由延時程序完成)。
3、實驗心得
計數(shù)器/定時器本質(zhì)上都是是對一個脈沖源進行加1計數(shù)。它的計數(shù)的脈沖源是什么取決了它是計數(shù)器還是定時器;加1計數(shù)器的脈沖源是來自于晶體振蕩器時,為定時狀態(tài);脈沖源是來自于單片機外部,由于外部的的脈沖間隔不一定相等,計數(shù)和時間就沒有明確的關(guān)系密切,所以這時只能是對外部的脈沖進行“計數(shù)”。在實驗中,由于沒有給單片機輸入外部信號,這說明定時/計數(shù)器的計數(shù)脈沖來自于單片機的晶體振蕩,即定時/計數(shù)器工作在定時狀態(tài)下。
由振蕩頻率來計數(shù),因為一個機器周期包括12個振蕩周期,計數(shù)器加1實際上累加的是機器周期,每一個機器周期,計數(shù)器就加1。根據(jù)振蕩頻率,可以得出計數(shù)脈沖的間隔時間,即計數(shù)器加1的時間間隔。當已知計數(shù)/定時器的差值時,就可得達到定時效果。
評論