汇编语言实现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 ...
随机推荐
- (转) hadoop 一个Job多个MAP与REDUCE的执行
http://blog.csdn.net/chaoping315/article/details/6221440 在hadoop 中一个Job中可以按顺序运行多个mapper对数据进行前期的处理,再进 ...
- UML关系总结
用例图: 1.扩展关系:如果已有一个用例,在这个用例的基础(该用例是完整的)上加入新的动作形成了另一个用例,即后者是通过继承前者的属性并加入新的内容而来的,则前者通常称为通用化用例,后者常为扩展用例. ...
- php各项下载地址
Apache2.4下载地址 http://www.apachehaus.com/cgi-bin/download.plx PHP5.6下载地址 http://php.net/downloads.p ...
- JAVA实现的截屏程序
http://hadeslee.iteye.com/blog/125386 http://www.jb51.net/article/75114.htm JAVA截屏程序(第三版) JavaEXTSwi ...
- 把中文版NetBeans改成英文版
不管你从官网下的是英文版还是中文版,安装之后操作界面都是中文的.这是因为NetBeans会根据你的操作系统自动设置界面语言,并且没有提供更改的功能.解决的方法也很简单,下面介绍我用过的两种方法: 方法 ...
- C语言常见命名规范
C语言常见命名规范 1 常见命名规则 比较著名的命名规则首推匈牙利命名法,这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的.其主要思想是“在变量和函 ...
- UIButton 关灯小实验
// 写在继承于UIViewController的子类中:创建单视图默认有ViewController类 // 实现:点击任何一颗UIButton,它四周的以及它自身都被变成红色,再点击就会变成原来的 ...
- Lua学习系列(四)
lua 资源:http://www.dcc.ufrj.br/~fabiom/lua/ 第一个Lua程序 http://www.dcc.ufrj.br/~fabiom/lua/ 原文:https://w ...
- 不小心删掉root目录......
1.先保存还剩下的的东西,比如说桌面的文件,保存在/下面其他目录 2.执行命令 cp -R /etc/skel/.[!.]* ./ 3.reboot
- (简单) HDU 2612 Find a way,BFS。
Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Nin ...