您的位置 首页 开关

ARM汇编示例—按键LED(循环)

汇编程序是学习硬件非常好的切入点,虽然程序用C来写回比较方便,但是要想真正了解一款硬件,还是得从体系结构和汇编指令上下点功夫。一下…

汇编程序是学习硬件非常好的切入点,尽管程序用C来写回比较便利,可是要想真实了解一款硬件,仍是得从体系结构和汇编指令上下点功夫。

一下是一个最根底的ARM 汇编程序,程序的功用是按键,然后在LED上显示出来是哪个键按了下去。

;引脚连线
;GPF0~GPF3 K1~K4
;GPF4~GPF7 LED1~LED4
;GPG3 K5
;GPG11 K6
;GPxCON的装备寄存器每个引脚都占两位,00表明表明输入,01表明输出
;GPxDAT寄存器表明引脚的凹凸电平状况,读写数据在这个寄存器里进行
;程序成果:按Kx,则LED就依据x的二进制表明出来

GPFCONEQU0x56000050
GPFDATEQU0x56000054
GPGCONEQU0x56000060
GPGDATEQU0x56000064

AREA KEY_LED,CODE,READONLY;这儿表明此区域是只读代码”KEY_LED”
EXPORT _ENTRY;引进程序进口,这儿跟连接器有联系

;程序进口
_ENTRY

;初始化GPIO的装备
;这儿包含K1~K4输入装备和LED1~LED4的装备
ldr r0,=GPFCON
movr1,#0x5500
strr1,[r0]

;K5和K6的装备
ldr r0,=GPGCON
ldr r1,=0xff3fff3f
strr1,[r0]

;初始化将led都平息
ldr r0,=GPFDAT
movr1,#0xf0
strr1,[r0]

;循环测验各按键状况,并修正led状况
LOOP

;测验按键1 GPF0
ldr r0,=GPFDAT;将GPF的数据寄存器地址放入r0
ldr r1,[r0];读取GPF数据寄存器
tst r1,#0x01;测验GPF0是否变0(K1按下),若是按下,EQ置1,不然NE置1
andeq r1,r1,#0xef;若是EQ为1,将GPF4置0(点亮),其他不变
orrne r1,r1,#0x10;若是NE为1,将GPF4置1(平息),其他不变
strr1,[r0];将LED状况写入GPF数据寄存器

;测验按键2 GPF2
ldr r0,=GPFDAT
ldr r1,[r0]
tst r1,#0x02
andeq r1,r1,#0xdf
orrne r1,r1,#0x20
strr1,[r0]

;测验按键3 GPF3
ldr r0,=GPFDAT
ldr r1,[r0]
tst r1,#0x04
andeq r1,r1,#0xcf
orrne r1,r1,#0x30
strr1,[r0]

;测验按键4 GPF04
ldr r0,=GPFDAT
ldr r1,[r0]
tst r1,#0x08
andeq r1,r1,#0xbf
orrne r1,r1,#0x40
strr1,[r0]

;测验按键5 GPG3
ldr r0,=GPGDAT
ldr r1,[r0]
ldr r0,=GPFDAT
ldr r2,[r0]
tst r1,#0x0008
andeq r2,r2,#0xaf
orrne r2,r2,#0x50
strr2,[r0]

;测验按键5 GPG11
ldr r0,=GPGDAT
ldr r1,[r0]
ldr r0,=GPFDAT
ldr r2,[r0]
tst r1,#0x0800
andeq r2,r2,#0x9f
orrne r2,r2,#0x60
strr2,[r0]

bLOOP

END

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/276687.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部