基于 arm 汇编语言的流水灯设计
一、题目
基于 arm 汇编语言的流水灯设计
二、设计思路与功能
根据以前所学单片机的有关知识,结合 arm 的汇编结构和流水灯的
有关设计方法,通过对 arm 内部的有关寄存器的设计,通过程序编程,
最终实现 LED 灯的交替闪烁。
三、具体的程序实现
.global _start
.global 关键字用来让一个符号对链接器可见,可以供其他链接对
象模块使用。
.global _start 意思是让 _start 符号成为可见的标识符,这样链接
器就知道跳转到程序中的什么地方并开始执行。通过寻找这个 _start 标
签作为程序的默认进入点。
通过修改 GPX2CON、GPX2DAT 的值来控制 LED 的亮灭;
GPX2CON 的地址为 0x11000C40;
GPX2CON 可以控制 8 个 IO 口,LED2 是由 GPX2_7 控制的,所
以只要设置 GPX2CON[7]即可。
可以看到该 4 个 bit 为 0x1 时 IO 口为输出功能,则我们可以这样设
置:现将[31:28]位清零再置一,则该端口被设置为输出引脚,而至于输
出高电平还是低电平,则由 GPX2DAT 来控制。
GPX2DAT 的地址为 0x110000C44;
2
GPX2DAT 低 8 位有效,每 1 个 bit 控制一个端口输出电平的高低,该位
置 1,则输出高电平,置 0,则输出低电平,为点亮 LED,我们可以这样
设置:第[7]位置 1 即可,此时 LED 被点亮;
同样,该位置 0,则 LED 熄灭。
具体程序如下:
.equ GPX2CON,0x11000C40
.equ GPX2DAT,0x11000C44
@设置输出
@GPX2CON[31:28] = 0x1
r0,=GPX2CON
ldr
mov r1,#0x1
Str
r1,[r0]
@//输出高电平
@GPD0DAT[7] = 0x1
@ GPD0DAT = 0x1
@闪烁 ---> 延时
r0,=GPX2DAT
ldr
Mov r1,#0x80
str
r1,[r0]
Bl delays
Ldr
mov r1,#0x00
str
r1,[r0]
r0,=GPX2DAT
同理对 GPX1CON,GPF3CON 进行设置。
设置好以后,再对 GPX1DAT,GPF3DAT 设置来实现对 LED 灯的控制。
3
四、流程图
开始
初始化
对 LED1 设置
对 LED2 设置
对 LED3 设置
对 LED3 设置
对 LED2 设置
对 LED1 设置
判断是否为零
结束
五、运行结果
4
5
六、程序
.global _start
.equ GPX2CON,0x11000C40
.equ GPX2DAT,0x11000C44
.equ GPX1CON,0x11000C20
.equ GPX1DAT,0x11000C24
.equ GPF3CON,0x114001E0
.equ GPF3DAT,0x114001E4
_start:
r0,=GPX2CON
r1,[r0]
r0,=GPX1CON
@设置输出
@GPX2CON[31:28] = 0x1
ldr
mov r1,#0x1
str
ldr
Mov r1,#0x1
Str
ldr
Mov r1,#0x110
str
r1,[r0]
r0,=GPF3CON
r1,[r0]
while:
@//输出高电平
@GPD0DAT[7] = 0x1
@ GPD0DAT = 0x1
@//闪烁 ---> 延时
ldr
r0,=GPX2DAT
Mov r1,#0x80
str
r1,[r0]
Bl delays
ldr
mov r1,#0x00
r1,[r0]
str
@//灭一会
r0,=GPX2DAT
6
r0,=GPX1DAT
r0,=GPX1DAT
r1,[r0]
r0,=GPF3DAT
r0,=GPF3DAT
r1,[r0]
r0,=GPF3DAT
ldr
mov r1,#0x10
r1,[r0]
str
Bl delays
ldr
Mov r1,#0x00
str
Ldr
mov r1,#0x10
Str
r1,[r0]
Bl delays
ldr
mov r1,#0x00
str
Ldr
mov r1,#0x10
str
r1,[r0]
Bl delays
ldr
Mov r1,#0x00
Str
Ldr
mov r1,#0x10
str
r1,[r0]
Bl delays
ldr
mov r1,#0x00
str r1,[r0]
Ldr
Mov r1,#0x80
str
r1,[r0]
Bl delays
ldr
mov r1,#0x00
str
r1,[r0]
r0,=GPF3DAT
r1,[r0]
r0,=GPX1DAT
r0,=GPX1DAT
r0,=GPX2DAT
r0,=GPX2DAT
7
B while
delays:
LDR r0, =1000000000
loop:
subs r0,#0x1
Bne
loop
Mov pc,lr
stop:
b stop
8