arm 跑马灯程序

本文档提供了一段使用ARM Cortex-M3处理器的汇编代码,实现LED跑马灯效果。通过设置GPIO寄存器GPECON和GPHCON控制GPE11、GPE12、GPH4和GPH6引脚的输出状态,依次点亮并切换LED。程序还包括一个延时子程序以控制闪烁速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;GPIO寄存器宏定义
GPECON      EQU  0x56000040     ;Port E control
GPEDAT      EQU  0x56000044     ;Port E data
GPEUP       EQU  0x56000048     ;Pull-up control E

GPHCON      EQU  0x56000070     ;Port H control
GPHDAT      EQU  0x56000074     ;Port H data
GPHUP       EQU  0x56000078     ;Pull-up control H 

 EXPORT LEDTEST
  AREA  LEDTESTASM,CODE,READONLY   ;该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读

LEDTEST
 ;设置GPE11、GPE12引脚为输出状态
 ldr  r0,=GPECON          
    ldr  r1,[r0]
    bic  r1,r1,#0x3c00000
    orr  r1,r1,#0x1400000
    str  r1,[r0]
   
    ;设置GPH4、GPH6引脚为输出状态
    ldr  r0,=GPHCON          
    ldr  r1,[r0]
    bic  r1,r1,#0x3300
    orr  r1,r1,#0x1100
    str  r1,[r0]
looptest
    ;将数据端口F的数据寄存器的地址附给寄存器r2
    ldr  r2,=GPEDAT
    ldr  r4,=GPHDAT
   
    ;D16亮
    ldr  r3,[r2]
    bic  r3,r3,#0x1800
    orr  r3,r3,#0x0800
    str  r3,[r2]              ;GPE11 output 0,D16亮
   
    ldr  r5,[r4]
    orr  r5,r5,#0x50
    str  r5,[r4]             
   
    ldr r0,=0x5ffff
    bl   delay                ;调用延迟子程序   
   
    ;D17亮
    ldr  r2,=GPEDAT
    ldr  r4,=GPHDAT

    ldr  r3,[r2]
    bic  r3,r3,#0x1800
    orr  r3,r3,#0x1000
    str  r3,[r2]              ;GPE12 output 0,D17亮
   
    ldr  r5,[r4]
    orr  r5,r5,#0x50
    str  r5,[r4]             
   
    ldr r0,=0x5ffff
    bl   delay                ;调用延迟子程序

    ;D18亮
    ldr  r2,=GPEDAT
    ldr  r4,=GPHDAT

    ldr  r3,[r2]
    orr  r3,r3,#0x1800
    str  r3,[r2]             
   
    ldr  r5,[r4]
    bic  r5,r5,#0x50
    orr  r5,r5,#0x10
    str  r5,[r4]              ;GPH6 output 0,D18亮
   
    ldr r0,=0x5ffff
    bl   delay
   
    ;D19亮
    ldr  r2,=GPEDAT
    ldr  r4,=GPHDAT

    ldr  r3,[r2]
    orr  r3,r3,#0x1800
    str  r3,[r2]             
   
    ldr  r5,[r4]
    bic  r5,r5,#0x50
    orr  r5,r5,#0x40
    str  r5,[r4]              ;GPH4 output 0,D19亮
   
    ldr r0,=0xfffff
    bl   delay   
    b looptest

;延时程序
delay
 sub r0,r0,#1              ;r0=r0-1           
 cmp r0,#0x0               ;将r0的值与0相比较
 bne delay                ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句
 mov pc,lr                 ;返回

   
    END                       ;程序结束符
   
   

   
设置引脚输出状态,将GPECON的内容读取到r1,。

通过bic orr两个指令,设置寄存器指定的位码。首先bic指令将指定的位清零,再通过orr的逻辑或运算,将指定的位码置1.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值