使用 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来控制流水灯的速度。

你可能感兴趣的:(单片机,嵌入式硬件)