一步步点亮LED5_汇编实现延时函数,实现LED闪烁效果

1、闪烁效果原理分析
闪烁 = 亮 + 延时 + 灭+ 延时 + 亮 + 延时 、、、、
2、延时函数原理
在汇编中实现延时的方法:用一些没有目的的代码来执行消耗时间,达到延时的效果。
3、汇编编写延时函数
函数名用标号,而且函数必须定义在主函数外。原理用一个寄存器放一个数字,然后在循环中每个循环里给数字减1,然后再判断这个数字的值是否为0,如果为0则停止循环,如果不为0则继续循环。

4、汇编编写及调用延时函数方式
汇编中整个汇编的主程序是一个死循环,这个死循环是我们汇编程序的主体,类似于C中的main函数。其它函数必须写在这个主死循环程序的后面(死循环外),不然会出错。

汇编编写delay延时函数时,要注意函数的初始化和函数的循环体的位置,不能把初始化写在了循环体内。
要理解cmp 对CPSR \bne, beq的影响。 还有pc 、lr 在调用和函数返回中的原理。

//这是延时函数示例代码
delay:
ldr r2, =900000
ldr r3, =0x0
delay_oop:
sub r2, r2, #1 //r2 = r2 - 1
cmp r2, r3 //cmp会影响z标志位,如果r2等于r3则z=1,下一名eq就会成立
bne delay_oop //这里是eq不成立时循环
mov pc, lr //函数调用返回,因为调用时已经把现场保存在了lr中,返回时要从lr写回PC。

汇编调用延时函数实现亮+灭闪烁效果代码:

#define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244
.global _start //加.global设置外部链接属性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值