汇编语言实现led灯的跑马灯
led实验
1.看原理图
看设备工作的原理(可能需要阅读芯片手册),看设备与cpu的连接关系
GPIO具有输入输出功能。
输入:cpu想知道io引脚是高电平还是低电平那么就是输入方式
输出:cpu想控制io引脚为高电平还是低电平那么就是输出方式
跟电流的方向没有任何关系
2. cpu的相关章节
GPJ2CON control是配置这个引脚是什么功能
GPJ2有8个引脚,每个引脚由con寄存器中的4个位进行配置
GPJ2DAT 如果cpu要输出高电平或者低电平,就需要设置该寄存器,只有8位有效
When the port is configured as input port, the corresponding
bit is the pin state. When the port is configured as output
port, the pin state is the same as the corresponding bit.
When the port is configured as functional pin, the undefined
value will be read.
当配置为输入模式的时候,dat寄存器中的某一位的值由引脚设置,引脚是高电平是,对应的位为1,引脚为低电平时,对应的位为0
当配置为输出模式的时候,dat寄存器中的某一位控制引脚的电平,对应的位为1时,对应的引脚输出高电平,对应的位为0时,对应的引脚输出为低电平
其他功能模式时,读到的值是未定义的。
@gec210 light first led
.globl _start
_start:
ldr r0,=0xe0200280
mov r1,#1<<4
str r1,[r0] @config pin0 output mode
mov r1,#0
str r1,[r0,#4] @output low level
b . @same as while(1);
arm-linux-gcc -c led.S -o led.o //编译不链接
arm-linux-ld -Ttext 0x30008000 led.o -o led.elf //链接指定代码段起始位置
arm-linux-objcopy -O binary led.elf led.bin //生成二进制执行文件
arm-linux-objdump -D led.elf > led.dis //生成反汇编代码
uboot的几个常用命令
printenv 打印显示环境变量
ipaddr=192.168.1.4 //开发板的ip
serverip=192.168.1.2 //tftp服务器的ip
设置为各自的ip,只是设置到内存,掉电就没有
setenv ipaddr 192.168.1.x
setenv serverip 192.168.1.x
saveenv //保存到flash中,再次启动后为刚刚设置的值
ping //单向的,只能从开发板ping电脑
alive表示网络是通的,not alive表示网络不通
tftp 30008000 led.bin //下载二进制文件到内存0x30008000地址
go 30008000 //跳转到0x30008000运行程序
@gec210 light first led
.globl _start
_start:
ldr r0,=0xe0200280
ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)
str r1,[r0] @config pin0-pin3 output mode
mov r1,#0
str r1,[r0,#4] @output low level
b . @same as while(1);
简单的makefile
APP=led
$(APP).bin:$(APP).o
arm-linux-ld -Ttext 0x30008000 $^ -o $(APP).elf
arm-linux-objcopy -O binary $(APP).elf $@
arm-linux-objdump -D $(APP).elf > $(APP).dis
cp $@ /home/gec/tftp/
%.o:%.s
arm-linux-gcc $^ -c -o $@
%.o:%.S
arm-linux-gcc $^ -c -o $@
%.o:%.c
arm-linux-gcc $^ -c -o $@
clean:
@rm -f $(APP).bin $(APP).elf $(APP).dis *.o
四个灯同时点亮或者同时熄灭
循环闪烁
@gec210 light first led
.globl _start
_start:
ldr r0,=0xe0200280
ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)
str r1,[r0] @config pin0-pin3 output mode
loop:
mov r1,#0
str r1,[r0,#4] @output low level
bl delay
mov r1,#0xf
str r1,[r0,#4]
bl delay
b loop
b . @same as while(1);
delay:
mov r4,#0xff00000
delay1:
subs r4,r4,#1
bne delay1
mov pc,lr
#define GPJ2CON (unsigned long *)0xe0200280
unsigned long *p = (unsigned long *)0xe0200280;
p
练习:
第1个灯到第4个灯依次点亮,第4个灯到第1个灯依次熄灭,循环。
.globl _start
_start:
ldr r0,=0xe0200280
ldr r1,=0x1111
str r1,[r0] @config pin0 output mode
loop:
mov r1,#0xe
str r1,[r0,#4]
bl delay
mov r1,#0xc
str r1,[r0,#4]
bl delay
mov r1,#0x8
str r1,[r0,#4]
bl delay
mov r1,#0
str r1,[r0,#4]
bl delay
mov r1,#0x8
str r1,[r0,#4]
bl delay
mov r1,#0xc
str r1,[r0,#4]
bl delay
mov r1,#0xe
str r1,[r0,#4]
bl delay
mov r1,#0xf
str r1,[r0,#4]
bl delay
b loop
b . @same as while(1);
delay:
mov r4,#0xff00000
delay1:
subs r4,r4,#1
bne delay1
mov pc,lr
汇编语言实现led灯的跑马灯的更多相关文章
- ABB 机器人 流水灯and跑马灯
MODULE MainModule VAR signaldi signaldi14; PROC main() //di14_test 数字输入信号 WHILE di14_test = DO ycld; ...
- 【雕爷学编程】Arduino动手做(56)---8路LED跑马灯模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- ARM开发(1) 基于STM32的LED跑马灯
一 跑马灯原理: 1.1 本实验实现2个led的跑马灯效果,即2个led交替闪烁. 1.2 实验思路:根据电路图原理,给led相关引脚赋予高低电平,实现电路的导通,使led灯发光. 1.3 开发 ...
- (二)重拾单片机 第一天 LED灯
由图知道 低电平 亮,高电平 灭 控制第一个 LED1 亮灭程序代码,如下 #include<reg52.h> #define uchar8 unsigned char #define u ...
- 用LED灯和按键来模拟工业自动化设备的运动控制
开场白: 前面三节讲了独立按键控制跑马灯的各种状态,这一节我们要做一个机械手控制程序,这个机械手可以左右移动,最左边有一个开关感应器,最右边也有一个开关感应器.它也可以上下移动,最下面有一个开关感应器 ...
- Tiny4412之蜂鸣器驱动与led灯驱动
一:LED驱动编写 要编写LED驱动,首先的知道开发板的构造:开发板分为核心板与底板:编写驱动的第一步就是要看开发板,找到LED灯在开发板上的位置及所对应的名字:第一步就要查看核心板电路图,以及底板电 ...
- (一)stm32f103~~GPIO基本操作一(led灯)
GPIO基本操作,如果更换IO口只需要更换端口设置即可 led.h文件 #ifndef __LED_H #ifndef __LED_H #define __LED_H #include "s ...
- 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯
关于单片机型号的介绍: STC89C52RC40C-PDIP 0721CV4336..... STC:STC公司 89:89系列 C:COMS 52(还有51,54,55,58,516,):2表示存储 ...
- 第7章 使用寄存器点亮LED灯
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
随机推荐
- Entity Framework 学习初级篇3-- LINQ TO Entities
LINQ 技术(即 LINQ to Entities)使开发人员能够通过使用 LINQ 表达式和 LINQ 标准查询运算符,直接从开发环境中针对 实体框架对象上下文创建灵活的强类型查询.LINQ to ...
- JS跨域代码
//部分JS代码 $.ajax({ async: false, url: "http://www.xxxx.com/api/", type: "GET",//不 ...
- a java runtime environment(JRE) or java development kit(JDK) must be....
错误: 解决方法: 系统变量里设置下面: 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.6.0_25 变量名:CLASSPATH 变量值:.;%JAVA_H ...
- dubbo Forbid blacklist
http://www.jameswxx.com/dubbo/%E8%A7%A3%E5%86%B3dubbo%E9%97%AE%E9%A2%98%EF%BC%9Aforbid-consumer/
- Hibernate配置文件中配置各种数据库的driver、URL
hibernate.properties ######################### Query Language ######################### ## define qu ...
- DataSet和List<T> 泛型之间互相转换 (转载, 作者写的很好)
/DataSet与泛型集合间的互相转换 //利用反射机制将DataTable的字段与自定义类型的公开属性互相赋值. //注意:从DataSet到IList<T>的转换,自定义类型的公开属性 ...
- Anroid ListView分组和悬浮Header实现
Anroid ListView分组和悬浮Header实现 分类: Android2014-01-27 12:26 6585人阅读 评论(13) 收藏 举报 listviewheadersection分 ...
- tinkphp5.0 traits 的引入
Traits引入 ThinkPHP 5.0开始采用trait功能(PHP5.4+)来作为一种扩展机制,可以方便的实现一个类库的多继承问题. trait是一种为类似 PHP 的单继承语言而准备的代码复用 ...
- RS485通讯协议的应用 (转)
源:http://blog.chinaunix.net/uid-26921272-id-3506640.html RS485缺点: RS485总线是一种常规的通信总线,它不能够做总线的自动仲裁,也就是 ...
- 如何在项目中引入 #include .h、.lib、 .dll、.cpp (转)
源:http://blog.csdn.net/vippolka/article/details/8552735 在项目中引入.h..lib和dll.以及.cpp 1..h的引入 解决办法1:把 XX ...