应用外部中断0和外部中断1控制流水灯的流水方向和速度,其中最慢一次的流水总周期为:学号末尾数字*200ms+500ms, 定时器采用中断方式。
ORG 0H
MOV TMOD, 00000001B ; 设置定时器0为模式1,用作定时器
MOV TH0, 0FFH ; 设置定时器0的初始值为0FFH,最大计数
SETB TR0 ; 启动定时器0
MOV P1, #00000001B ; 设置 P1.0 为输出口,用作流水灯
SETB EA ; 启用总中断
SETB ET0 ; 启用定时器0中断
SETB EX0 ; 启用外部中断0
SETB EX1 ; 启用外部中断1
MAIN:
AJMP MAIN ; 主循环
ORG 0BH ; 外部中断0的中断向量地址
INT0_ISR:
CPL P1 ; 反转 P1 的值,改变流水灯的方向
RETI ; 退出中断
ORG 0BH ; 外部中断1的中断向量地址
INT1_ISR:
MOV R0, #255 ; 设置计数器初值为255
ACALL DELAY ; 调用延时函数
CPL P1 ; 反转 P1 的值,改变流水灯的速度
RETI ; 退出中断
DELAY:
MOV R1, #0
LOOP:
MOV R2, #0
LOOP1:
MOV R3, #0
LOOP2:
DJNZ R3, LOOP2 ; R3递减
DJNZ R2, LOOP1 ; R2递减
DJNZ R1, LOOP ; R1递减
RET ; 返回延时函数
END