ORG 0000H
LJMP MAIN
ORG 000BH
T0MS EQU NOT 50000 ; 50 mS 晶振 12.000 MHz
PJSBZ EQU 20H
PJSBZY EQU 21H
PST0: MOV TL0, #LOW T0MS ; T0 中断
MOV TH0, #HIGH T0MS
SETB PJSBZ ; 50 mS 标志
DJNZ R6, PST02
MOV R6, #40 ; 50 mS * 40 = 2 S
SETB PJSBZY ; 2 S 标志
PST02: RETI
MAIN: MOV TMOD, #01H
MOV IE, #82H ; 开 T0 中断
MOV SP, #30H
MOV TL0, #LOW T0MS ; TO 50MS 中断 计时 0
MOV TH0, #HIGH T0MS
SETB TR0
MOV R6, #40 ; 计时初值
MAIN1: MOV A, #7FH
MAIN2: JNB PJSBZ, $ ; 50 mS
CLR PJSBZ
RR A ; 顺流
MOV P1, A
JNB PJSBZY, MAIN2 ; 2 S
CLR PJSBZY
MAIN3: JNB PJSBZ, $ ; 50 mS
CLR PJSBZ
RL A ; 逆流
MOV P1, A
JNB PJSBZY, MAIN3 ; 2 S
CLR PJSBZY
AJMP MAIN1
END
又要用定时器,又要用延时程序,这不是...
----
其实,只用一个定时器,就都可以解决。
;假设在 P0 口外接 8 个 LED,输出低电平时发光。
;下面程序,已经通过了实验,符合题目的流水灯闪烁要求.
ORG 0000H
LJMP START
ORG 000BH
MOV TH0, #4CH ;50ms@11.0592MHz
CPL F0
JNB F0, EXIT_T0 ;不到100ms就退出.
XRL P0, A ;每100ms,有一个LED亮/灭一次.
DJNZ R6, EXIT_T0
MOV R6, #20
RL A
EXIT_T0:
RETI
START:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #4CH ;50ms@11.0592MHz
MOV IE, #82H ;开T0中断.
MOV R6, #20
MOV A, #1
SETB TR0
SJMP $
END
ncccccvnh