用89C51单片机汇编语言编写流水灯控制程序
下面是使用 89C51 单片机汇编语言编写的控制流水灯的程序,其中使用外部中断0和外部中断1控制流水灯的流水方向和速度,最慢一次的流水总周期为1300ms,定时器采用中断方式。
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:
SJMP 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
以上是使用 89C51 单片机汇编语言编写的控制流水灯的程序,其中最慢一次的流水总周期为1300ms,定时器采用中断方式。使用外部中断0来控制流水灯的方向,外部中断1来控制流水灯的速度。