ORG 00H
JMP MAIN
ORG 30H
MAIN:
MOV A,#0
CALL LOOP ;由暗变亮子程序
MOV P1,#0FFH ;关灯,全暗
MOV A,#0
CALL LOOP2 ;由亮变暗子程序
MOV P1,#0 ;开灯,全亮
JMP MAIN
LOOP:
;这一段为点亮灯的延时
MOV P1,#0 ;把灯点亮
INC A ;A的值加1
CJNE A,#0FFH,E2 ;A还没有加到FF,跳转E2
E1:JMP OVER ;A加到了FF,结束返回
E2:MOV R7,A ;A的值存入R7
D1:MOV R6,#30 ;延时子程序
DJNZ R6,$
DJNZ R7,D1 ;R7-1不为零就转D1,这里R7即上面预置的A值,用在这里,就是每次延时时间不同,有255级
MOV P1,#0FFH ;延时时间到,送所有灯
;这一段为关掉灯的延时,两段相加,组成占空比可变的方波输出控制灯由暗到亮
CPL A ;A的值取反,
MOV R7,A
D2:MOV R6,#30 ;延时子程序
DJNZ R6,$
DJNZ R7,D2
CPL A ;再取反,恢复原来的值
JMP LOOP ;跳回循环
OVER:RET
;以下为由亮变暗子程序,原理与上面一样.
LOOP2:
MOV P1,#0FFH
INC A ;程序运行到此,A的值为0,经这一步后为1
CJNE A,#0FFH,W2
W1:JMP OVER2
W2:
MOV R7,A
D11:MOV R6,#30
DJNZ R6,$
DJNZ R7,D11
MOV P1,#0
CPL A
MOV R7,A
D22:MOV R6,#30
DJNZ R6,$
DJNZ R7,D22
CPL A
JMP LOOP2
OVER2:RET
END
|