```assembly
ORG 0000h ; 程序起始地址
MOV R0, 01h ; 初始化 R0 为 0000 0001b
LOOP:
MOV P1, R0 ; 将 R0 的值输出到 P1 端口,控制流水灯
CALL DELAY ; 调用延时函数
MOV A, R0 ; 将 R0 的值移至累加器 A
RLC A ; 通过循环左移指令将 A 的值左移一位,最高位进入 C,最低位被丢弃
MOV R0, A ; 将左移后的结果存回 R0
SJMP LOOP ; 无条件跳转回 LOOP,实现循环
DELAY: ; 延时函数
MOV R2, 0FFh ; 初始化 R2
DELAY_LOOP:
DJNZ R2, DELAY_LOOP ; R2 自减,直到为 0 时跳出循环
RET ; 返回主程序
```
1. 程序起始于地址 0000h。
2. 初始化 R0 寄存器,设定第一位为 1,其余为 0,即流水灯的初始状态。
3. 进入主循环(LOOP):
将 R0 寄存器的值输出到 P1 端口,控制流水灯。
调用延时函数 DELAY。
将 R0 寄存器的值移至累加器 A,然后通过循环左移指令(RLC)将 A 的值左移一位。
将左移后的结果存回 R0 寄存器。
通过无条件跳转指令(SJMP)回到主循环,实现流水灯的持续左移。
4. 延时函数(DELAY)用于控制流水灯的频率。
版权声明:本文为 “联成科技技术有限公司” 原创文章,转载请附上原文出处链接及本声明;