ARM彙編示例 按鍵LED(迴圈)

2022-09-01 04:00:10 字數 2219 閱讀 5227

匯程式設計序是學習硬體非常好的切入點,雖然程式用c來寫回比較方便,但是要想真正了解一款硬體,還是得從體系結構和彙編指令上下點功夫。

一下是乙個最基礎的arm 匯程式設計序,程式的功能是按鍵,然後在led上顯示出來是哪個鍵按了下去。

;引腳連線

;gpf0~gpf3 k1~k4

;gpf4~gpf7 led1~led4

;gpg3 k5

;gpg11 k6

;gpxcon的配置暫存器每個引腳都佔兩位,00表示表示輸入,01表示輸出

;gpxdat暫存器表示引腳的高低電平狀態,讀寫資料在這個暫存器裡進行

;程式結果:按kx,則led就根據x的二進位制表示出來

gpfcon equ 0x56000050

gpfdat equ 0x56000054

gpgcon equ 0x56000060

gpgdat equ 0x56000064

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]

b    loop

end本程式在arm920t中執行成功

ARM彙編控制led點亮或熄滅

1.檢視開發板原理圖,由原理圖知led2由gpx2 7控制。2.檢視exynos 4412 scp晶元手冊,gpx2控制器位址及含義 由手冊知,gpx2con 位址為0x1100 0c40,gpx2con 7 0x1時,gpx2 7為輸出 示例彙編 led2 初始化ldr r0,0x11000c40...

8051彙編 8個按鍵分別控制8個LED

前段時間一直用的c語言編寫8051程式,但要更深入的了解微控制器的底層原理,還是得使用彙編 以下是我寫的練習,8個按鍵分別控制8個led led是高電平點亮,接在p1口 按鍵是低電平表示觸發,接在p0口 org 0000h jmp init org 0030h init mov p1,00h 初始化...

led按鍵迴圈查詢驅動問題解決

home moudle led first drv.c 65 error implicit declaration of function class create 改為device create home moudle led first drv.c 65 warning assignment m...