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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红色荷包蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值