使用汇编语言使LED灯进行闪烁(Exynos4412)

主题思想
这个程序的主要思想是通过操作寄存器来控制LED灯的亮和灭,从而实现闪烁效果。下面是对程序的整体思路进行解释:

  1. 首先,程序通过配置寄存器GPX1CON0将LED灯设置为输出状态,以便控制LED灯的亮和灭。
  2. 然后,程序进入一个无限循环(loop),在循环中完成以下操作:
    • 将GPX1DAT寄存器的bit7位置1,即将LED灯设置为高电平,使其点亮。
    • 调用延时函数delay1s,延时1秒钟。
    • 将GPX2DAT寄存器的bit7位置0,即将LED灯设置为低电平,使其熄灭。
    • 调用延时函数delay1s,延时1秒钟。
  3. 在延时函数delay1s中,使用循环计数的方式实现1秒钟的延时。程序使用寄存器r4来保存一个预设的值(0xfffffff),然后通过循环将r4的值递减,直到r4的值变为0,即实现了1秒钟的延时。
  4. 回到循环的开始处,继续执行循环中的操作,实现LED灯的闪烁效果。
 .global _start
   .arm
   .text
_start:
     @ 设置LED灯的配置寄存器 GPX1CON0 为输出状态
	 ldr  r0,=0x11000c20
	 ldr  r1,[r0]
	 bic  r1,#0x0000000F
	 orr  r1,#0x00000001
	 str  r1,[r0]

loop:
	 @ 设置LED灯输出高电平   GPX1DAT
	 ldr  r0,=0x11000c24
	 ldr  r1,[r0]
	 orr  r1,#0x80   
	 str  r1,[r0]

	 bl  delay1s

	 @ 设置LED灯输出0电平   GPX2DAT
	 ldr  r0,=0x11000c44
	 ldr  r1,[r0]
     	 bic  r1,#0x80   
	 str  r1,[r0]

	 bl  delay1s
	 b    loop

delay1s:     
     ldr      r4,=0xfffffff  
delay1s_loop:     
     sub    r4,r4,#1
	 cmp   r4,#0              
	 bne    delay1s_loop     
	 mov   pc,lr

    .end

在这里插入图片描述

每一步骤的含义和作用:

  1. 声明了一个标签 _start,表示程序的入口。

  2. 使用 ARM 指令集。

  3. .text 部分表示下面的代码是程序的代码段。

  4. _start 标签开始,使用 LDR 指令将 GPX1CON0 寄存器的值加载到寄存器 r1 中。GPX1CON0 是控制 LED 灯的配置寄存器。

  5. 使用位运算操作(AND 和 ORR 指令),将 r1 寄存器的低 4 位清零(AND 指令),并将最低位设置为 1(ORR 指令)。这样做的目的是将 GPX1CON0 的配置修改为使 LED 灯正常工作。

  6. 使用 STR 指令将修改后的值保存回 GPX1CON0 寄存器。

  7. 进入一个无限循环,循环体内执行 LED 灯亮和灭的操作。

  8. 使用 LDR 指令将 GPX1DAT 寄存器的值加载到寄存器 r1 中。GPX1DAT 是控制 LED 灯输出的寄存器。

  9. 使用位运算操作(ORR 指令),将 r1 寄存器的第 7 位设置为 1,表示将 LED 灯设置为高电平,即点亮 LED。

  10. 使用 STR 指令将修改后的值保存回 GPX1DAT 寄存器。

  11. 调用延时函数 delay1s,延时 1 秒钟。

  12. 使用 LDR 指令将 GPX1DAT 寄存器的值加载到寄存器 r1 中。

  13. 使用位运算操作(AND 和 ORR 指令),将 r1 寄存器的第 7 位清零,表示将 LED 灯设置为低电平,即熄灭 LED。

  14. 使用 STR 指令将修改后的值保存回 GPX1DAT 寄存器。

  15. 调用延时函数 delay1s,延时 1 秒钟。

  16. 使用 B 指令无条件跳转回循环的开始处,实现 LED 灯的闪烁。

  17. 延时函数 delay1s:使用 SUB 指令将一个预设的值循环减 1,实现 1 秒钟的延时。

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值