以中斷方法設(shè)計(jì)單片機(jī)秒、分脈沖發(fā)生器
以中斷方法設(shè)計(jì)單片機(jī)秒、分脈沖發(fā)生器。
假定P1.0每秒產(chǎn)生一個(gè)機(jī)器周期的正脈沖,P1.1每分鐘產(chǎn)生一個(gè)機(jī)器周期的正脈沖。
單片機(jī)是89C51。
;======================================================
;最佳答案:
;用定時(shí)器T0,工作模式1,進(jìn)行50ms定時(shí),中斷。
;中斷20次,即為1秒,60秒,即為1分鐘。
;到了這些時(shí)刻,分別在P1.0、P1.1輸出正脈沖即可。
ORG 0000H
AJMP START
ORG 000BH ;定時(shí)器0中斷入口.
AJMP SERVE
START:
MOV TMOD, #01H ;T0定時(shí)方式0
MOV TH0, #3CH ;定時(shí)
MOV TL0, #0B0H
SETB TR0 ;啟動(dòng).
SETB ET0 ;允許中斷.
SETB EA
MOV R2, #20 ;秒.
MOV R3, #60 ;分.
CLR P1.0 ;開始時(shí),輸出低電平.
CLR P1.1
SJMP $ ;等待中斷.
;--------------------------------------------
SERVE: ;50ms執(zhí)行一次本中斷程序.
MOV TL0, #0B0H ;重新送入初始值.
MOV TH0, #3CH ;定時(shí)
DJNZ R2, T0_END ;不到20次轉(zhuǎn)移.
SETB P1.0 ;到了20次,就是到了1秒,輸出正脈沖.
CLR P1.0 ;馬上就恢復(fù)為0,這就是1個(gè)機(jī)器周期.
MOV R2, #20
DJNZ R3, T0_END ;不到60秒轉(zhuǎn)移.
SETB P1.1 ;到了60秒,輸出正脈沖.
CLR P1.1 ;馬上就恢復(fù)為0,這就是1個(gè)機(jī)器周期.
MOV R3, #60
T0_END:
RETI
;--------------------------------------------
END