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灯的跑马灯的更多相关文章

  1. ABB 机器人 流水灯and跑马灯

    MODULE MainModule VAR signaldi signaldi14; PROC main() //di14_test 数字输入信号 WHILE di14_test = DO ycld; ...

  2. 【雕爷学编程】Arduino动手做(56)---8路LED跑马灯模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  3. ARM开发(1) 基于STM32的LED跑马灯

    一 跑马灯原理:  1.1 本实验实现2个led的跑马灯效果,即2个led交替闪烁.  1.2 实验思路:根据电路图原理,给led相关引脚赋予高低电平,实现电路的导通,使led灯发光.  1.3 开发 ...

  4. (二)重拾单片机 第一天 LED灯

    由图知道 低电平 亮,高电平 灭 控制第一个 LED1 亮灭程序代码,如下 #include<reg52.h> #define uchar8 unsigned char #define u ...

  5. 用LED灯和按键来模拟工业自动化设备的运动控制

    开场白: 前面三节讲了独立按键控制跑马灯的各种状态,这一节我们要做一个机械手控制程序,这个机械手可以左右移动,最左边有一个开关感应器,最右边也有一个开关感应器.它也可以上下移动,最下面有一个开关感应器 ...

  6. Tiny4412之蜂鸣器驱动与led灯驱动

    一:LED驱动编写 要编写LED驱动,首先的知道开发板的构造:开发板分为核心板与底板:编写驱动的第一步就是要看开发板,找到LED灯在开发板上的位置及所对应的名字:第一步就要查看核心板电路图,以及底板电 ...

  7. (一)stm32f103~~GPIO基本操作一(led灯)

    GPIO基本操作,如果更换IO口只需要更换端口设置即可 led.h文件 #ifndef __LED_H #ifndef __LED_H #define __LED_H #include "s ...

  8. 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯

    关于单片机型号的介绍: STC89C52RC40C-PDIP 0721CV4336..... STC:STC公司 89:89系列 C:COMS 52(还有51,54,55,58,516,):2表示存储 ...

  9. 第7章 使用寄存器点亮LED灯

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

随机推荐

  1. android 1.6 launcher研究之自定义ViewGroup (转 2011.06.03(二)——— android 1.6 launcher研究之自定义ViewGroup )

    2011.06.03(2)——— android 1.6 launcher研究之自定义ViewGroup2011.06.03(2)——— android 1.6 launcher研究之自定义ViewG ...

  2. [转] Linux下移动virtualbox虚拟硬盘丢失eth0

    1.遇到什么的问题(What)      在新的virtualbox虚拟机上挂上曾使用过的虚拟硬盘,在启动的时候,发现找不到网卡eth0, 在输入ifconfig –a的时候,也没有任何Ethnet的 ...

  3. 【转载】彻底弄懂css中单位px和em,rem的区别

    原文链接:http://www.cnblogs.com/leejersey/p/3662612.html 国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什 ...

  4. StrictMode使用详解

    http://hb.qq.com/a/20110914/000054.htm http://www.android100.org/html/201204/25/1097.html http://www ...

  5. MySQL:MySQL的安装

    一.Linux:MySQL的源码安装 1.安装前的准备 在安装之前需要安装一下必备的包和工具 gcc/g++:MySQL5.6开始,需要使用g++进行编译. cmake:MySQL5.5开始,使用cm ...

  6. GB2312 编码

    GB2312编码范围:A1A1-FEFE,其中汉字编码范围:B0A1-F7FE. GB2312编码是第一个汉字编码国家标准,由中国国家标准总局1980年发布,1981年5月1日开始使用.GB2312编 ...

  7. HTTPS连接前的几毫秒发生了什么?

    原文:http://blog.jobbole.com/48369/ 提示:英文原文写于2009年,当时的Firefox和最新版的Firefox,界面也有很大改动.以下是正文. 花了数小时阅读了如潮的好 ...

  8. Android学习笔记之ContentProvider

    读取其他应用程序共享的数据 以下示例为读取联系人信息 package com.jiahemeikang.helloandroid; import com.jiahemikang.service.Ech ...

  9. ZenCoding 个人理解和总结

    我的理解:ZenCoding是一个html简写的语法,可以最快速的生成html. 不少IDE应该都支持,我用的intellij idea是支持的. ZenCoding表示和CSS/JS有相通之处,比如 ...

  10. iOS ZBar扫码简单实现

    导入ZBarSDK文件并引入一下框架 AVFoundation.framework CoreMedia.framework CoreVideo.framework QuartzCore.framewo ...