IO口与子程序调用(开关控制灯亮灭)
K1=1,K2=0时L1间隔0.5秒闪烁,L2熄灭;K0=1,K2=1时L2间隔0.5秒闪烁,L1熄灭;K1=1,K2=1时L1和L2间隔2秒闪烁;K1=0,K2=0时L1和L2均熄灭。要求:延时通过调用延时子程序实现,f=12MHz。
程序流程图:
程序:
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN:
CLR P1.0
CLR P1.1
SETB P1.6
SETB P1.7
JB P1.0,L1
JB P1.1,L2
LJMP MAIN ;K1 K2均不闭合
L1:
JB P1.1,L3 ;K1闭合而 K2不闭合的情况
CLR P1.6
ACALL DELAY2
SETB P1.6
ACALL DELAY2
LJMP MAIN
L2:
JB P1.0,L3
CLR P1.7 ;K2闭合而 K1不闭合的情况
ACALL DELAY2
SETB P1.7
ACALL DELAY2
LJMP MAIN
L3:
MOV P1,#00H ;K2闭合且K1闭合的情况
ACALL DELAY1
MOV P1,#0C0H
ACALL DELAY1
LJMP MAIN
DELAY1: ;延时子程序 2S
MOV R5,#20
DLY10: MOV R6,#200
DLY11: MOV R7,#248
DLY12: DJNZ R7,$
DJNZ R6,DLY11
DJNZ R5,DLY10
RET
DELAY2: ;延时子程序 0.5S
MOV R5,#5
DLY20: MOV R6,#200
DLY21: MOV R7,#248
DLY22: DJNZ R7,$
DJNZ R6,DLY21
DJNZ R5,DLY20
RET
END
2.定时器实现流水灯(查询和中断方法)
采用定时器T1的方式1,使P1口的八盏灯间隔两秒依次循环点亮,f=12MHz,要求:分别用查询和中断的方法实现。
流程图:
查询: