一步步点亮LED5_汇编编写延时函数并实现LED闪烁效果
2016-03-27 14:14
369 查看
《朱老师物联网大讲堂》学习笔记
上一节课,我们实现了可以自由选择的复杂点亮,下面是上一节的代码
下面我们将在上一节的基础上,实现LED闪烁的效果
LED闪烁效果的实现,其实就是
亮 + 延时 + 灭 + 延时 + 亮 。。。
延时实现
用一些没有效果,没有目的代码消耗时间,达到延时的效果。
需要注意的是,不能把函数写到主体代码里面,就好像c语言中,子函数不能写进main函数里面,而是要写成独立的函数。
下面是具体代码的实现
汇编中调用函数用bl指令,子函数中最后用mov pc, lr来返回,这里和C语言中不同,准确说是C语言帮我们实现了。
这样实现的循环,有一种手动的感觉,如何实现像c中的循环呢?
在第一次亮的那段代码前加一个标号flash,然后在最后一次灭的后面加一个bl flash
上一节课,我们实现了可以自由选择的复杂点亮,下面是上一节的代码
#define GPJ0CON 0xE0200240 #define GPJ0DAT 0xE0200244 .global _start _start: ldr r0, =0x11111111 ldr r1, =GPJ0CON str r0, [r1] ldr r0, =( (1<<3) | (0<<4) | (1<<5) ) ldr r1, =GPJ0DAT str r0, [r1] b.
下面我们将在上一节的基础上,实现LED闪烁的效果
LED闪烁效果的实现,其实就是
亮 + 延时 + 灭 + 延时 + 亮 。。。
延时实现
用一些没有效果,没有目的代码消耗时间,达到延时的效果。
需要注意的是,不能把函数写到主体代码里面,就好像c语言中,子函数不能写进main函数里面,而是要写成独立的函数。
下面是具体代码的实现
#define GPJ0CON 0xE0200240 #define GPJ0DAT 0xE0200244 .global _start _start: ldr r0, =0x11111111 ldr r1, =GPJ0CON str r0, [r1] ldr r0, =( (0<<3) | (0<<4) | (0<<5) ) ldr r1, =GPJ0DAT str r0, [r1] bl delay 这句执行的同时,就已经将返回地址写进lr里面了 ldr r0, =( (1<<3) | (1<<4) | (1<<5) ) ldr r1, =GPJ0DAT str r0, [r1] bl delay ldr r0, =( (0<<3) | (0<<4) | (0<<5) ) ldr r1, =GPJ0DAT str r0, [r1] bl delay ldr r0, =( (1<<3) | (1<<4) | (1<<5) ) ldr r1, =GPJ0DAT str r0, [r1] flag: b flag delay: ldr r2, =10000000 ldr r3, =0x0 delay_loop: sub r2, r2, #1 cmp r2, r3 比较之后会,如果计算结果为0,自动置位CPSR中Z标志位 如果r2等于r3,Z会等于1,下一句中的eq就会成立 bne delay_loop mov pc, lr 函数调用返回
汇编中调用函数用bl指令,子函数中最后用mov pc, lr来返回,这里和C语言中不同,准确说是C语言帮我们实现了。
这样实现的循环,有一种手动的感觉,如何实现像c中的循环呢?
在第一次亮的那段代码前加一个标号flash,然后在最后一次灭的后面加一个bl flash
相关文章推荐
- 面试总结--阿里杭州
- POJ 1860:Currency Exchange (spfa 判环)
- 笨方法学Python之一(原第六)
- Quartz任务调度(1)概念例析快速入门
- C++用指针处理数组元素
- sql service 游标和触发器的使用
- LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)
- cocos2d 3.x一些常用的数据类型
- static修饰符的作用及应用
- c#为什么需要事件委托
- 关于计算机领域的各种学习交流网站
- 前端面试宝典
- Swift里动态获取命名空间,通过字符串创建对应的控制器
- 机器学习-神经网络-手写字体识别
- UIImagePickerController, UISearchBar
- 3.26日第六次作业,第10章质量,11章人力
- 简单的关机打卡的java代码
- Quartz任务调度(6)schedulerListener分版本超详细解析
- Quartz任务调度(5)TriggerListener分版本超详细解析
- Android ListView监听上滑或下滑动作