单片机跑马灯汇编程序89c51
时间: 2023-09-25 09:16:00 浏览: 161
单片机跑马灯汇编程序
5星 · 资源好评率100%
以下是89c51单片机跑马灯的汇编程序:
```
ORG 0H ; 程序的起始地址为0H
MOV P1, #0FFH ; 将P1口设置为输出,初始值为0xFF
LOOP:
MOV A, #01H ; 将A寄存器的值设置为1
ACALL DELAY ; 调用延时子程序
MOV P1, A ; 将A寄存器的值输出到P1口
MOV A, #02H ; 将A寄存器的值设置为2
ACALL DELAY ; 调用延时子程序
MOV P1, A ; 将A寄存器的值输出到P1口
MOV A, #04H ; 将A寄存器的值设置为4
ACALL DELAY ; 调用延时子程序
MOV P1, A ; 将A寄存器的值输出到P1口
MOV A, #08H ; 将A寄存器的值设置为8
ACALL DELAY ; 调用延时子程序
MOV P1, A ; 将A寄存器的值输出到P1口
MOV A, #10H ; 将A寄存器的值设置为16
ACALL DELAY ; 调用延时子程序
MOV P1, A ; 将A寄存器的值输出到P1口
MOV A, #20H ; 将A寄存器的值设置为32
ACALL DELAY ; 调用延时子程序
MOV P1, A ; 将A寄存器的值输出到P1口
MOV A, #40H ; 将A寄存器的值设置为64
ACALL DELAY ; 调用延时子程序
MOV P1, A ; 将A寄存器的值输出到P1口
MOV A, #80H ; 将A寄存器的值设置为128
ACALL DELAY ; 调用延时子程序
MOV P1, A ; 将A寄存器的值输出到P1口
SJMP LOOP ; 无限循环
DELAY:
MOV R2, #0FFH ; 将R2寄存器的值设置为255
LOOP1:
MOV R1, #0FFH ; 将R1寄存器的值设置为255
LOOP2:
DJNZ R1, LOOP2 ; R1寄存器自减,若不为0则继续循环
DJNZ R2, LOOP1 ; R2寄存器自减,若不为0则继续循环
RET ; 延时子程序结束,返回主程序
```
在这个程序中,我们使用了P1口来控制LED灯的亮灭。程序的主要步骤是循环输出A寄存器的值到P1口,并调用延时子程序来实现跑马灯效果。在延时子程序中,我们使用了两个循环来实现延时,其中R1和R2寄存器分别用于实现微秒级和毫秒级的延时。程序的循环体使用了SJMP指令来实现无限循环,直到程序被终止。
阅读全文