流水灯汇编程序,在EL-DSP-E300实验箱上
时间: 2023-08-11 15:35:47 浏览: 136
以下是一个简单的流水灯汇编程序,可在EL-DSP-E300实验箱上运行。请注意,这只是一个示例程序,您可以根据需要进行修改和优化。
```
;*******************************************************************************
;* 功能说明:EL-DSP-E300实验箱流水灯程序
;* 系统平台:EL-DSP-E300实验箱
;* 编译环境:Keil uVision5
;* 文件名称:led.asm
;* 修改记录:无
;*******************************************************************************
; 定义LED灯数量和端口
#define LED_NUM 8 ; LED灯数量
#define LED_PORT P0 ; LED灯端口
; 定义延时函数
DELAY PROC
PUSH AR0 ; 保存寄存器
PUSH AR1
MOV AR0, #2000 ; 延时参数,可根据需要调整
L1:
MOV AR1, #1000
L2:
SUB AR1, #1
JNZ L2
SUB AR0, #1
JNZ L1
POP AR1 ; 恢复寄存器
POP AR0
RET
DELAY ENDP
; 主程序
MAIN PROC
MOV LED_PORT, #0 ; 初始化LED端口
MOV R0, #0 ; 初始化计数器
LOOP:
ADD R0, #1 ; 计数器加1
MOV A, #1 ; 将A寄存器设为1
MOV R1, #0 ; 初始化循环计数器
LED_LOOP:
MOV LED_PORT, A ; 将A寄存器中的值写入LED端口
CALL DELAY ; 延时一段时间
MOV A, A LSL 1 ; 左移一位,相当于乘以2
ADD R1, #1 ; 循环计数器加1
CMP R1, #LED_NUM ; 判断是否达到LED灯数量
JNC END_LOOP ; 如果达到,跳转到程序结束
JMP LED_LOOP ; 如果没有达到,继续循环
END_LOOP:
MOV A, #1 ; 将A寄存器设为1
MOV R1, #0 ; 初始化循环计数器
LED_LOOP2:
MOV LED_PORT, A ; 将A寄存器中的值写入LED端口
CALL DELAY ; 延时一段时间
MOV A, A LSR 1 ; 右移一位,相当于除以2
ADD R1, #1 ; 循环计数器加1
CMP R1, #LED_NUM ; 判断是否达到LED灯数量
JNC LOOP ; 如果达到,跳转到程序开始
JMP LED_LOOP2 ; 如果没有达到,继续循环
END
MAIN ENDP
```
请注意,此程序是使用Keil uVision5编译器编写的,如果您使用其他编译器,请相应地进行更改。此外,如果您需要将程序下载到EL-DSP-E300实验箱上,请使用适当的下载工具和方法。
阅读全文