arm汇编实现的跑马灯实验

发布者:火星叔叔最新更新时间:2016-08-02 来源: eefocus关键字:arm汇编  跑马灯 手机看文章 扫描二维码
随时随地手机看文章
平台:fs2410

用arm汇编编写的跑马灯单文件可以很好运行,不需要包其他的头文件和一些初始化函数。

GPFCON   EQU    0x56000050   
GPFDAT   EQU    0x56000054
GPFUP    EQU    0x56000058 
    EXPORT LEDTEST
        AREA  LEDTESTASM,CODE,READONLY  ;定义了一个代码段,段名为LEDTESTASM,属性只读

LEDTEST
    ;设置GPF4-GPF7为output
    ldr  r0,=GPFCON           
    ldr  r1,=0x5500
    str  r1,[r0]
    
    ;禁止GPF4-GPF7端口的上拉电阻
    ldr  r0,=GPFUP
    ldr  r1,=0xff00
    str  r1,[r0]
    
    ;将数据端口F的数据寄存器的地址赋值给寄存器r2
    ldr  r2,=GPFDAT
 
;跑马灯循环 
ledloop1
    ldr r1,=0xef
    str r1,[r2]                 ;使GPF4输出低电平,灯亮
    bl  delay1                ;调用延迟
ledloop2
    ldr r1,=0xdf
    str r1,[r2]                  
    bl  delay2                   
ledloop3
    ldr r1,=0x7f
    str r1,[r2]                  
    bl  delay3  
ledloop4
    ldr r1,=0xbf
    str r1,[r2]                  
    bl  delay4

;延迟程序
delay1 
 ldr r3,=0x8ffff             ;设置延迟的时间
delay5
 sub r3,r3,#1                ;r3=r3-1            
 cmp r3,#0x0                ;将r3的值与0相比较
 bne delay5                 ;比较的结果不为0(r3不为0),继续调用delay1,否则执行下一条语句
 b ledloop2
 mov pc,lr                    ;返回
 
;延迟程序
delay2 
 ldr r3,=0x8ffff           
delay6
 sub r3,r3,#1                         
 cmp r3,#0x0               
 bne delay6                
 b ledloop3
 mov pc,lr                 

delay3
  ldr r3,=0x8ffff           
delay7
 sub r3,r3,#1                       
 cmp r3,#0x0              
 bne delay7               
 b ledloop4
 mov pc,lr         


delay4
 ldr r3,=0x8ffff           
delay8
 sub r3,r3,#1                       
 cmp r3,#0x0              
 bne delay8                
 b ledloop1
 mov pc,lr   


    END                       ;程序结束符

关键字:arm汇编  跑马灯 引用地址:arm汇编实现的跑马灯实验

上一篇:cramfs根文件系统的移植成功(fs2410下亲测)
下一篇:stm32实现printf重定向到LCD显示屏

推荐阅读最新更新时间:2024-03-16 15:03

STM8S自学笔记-003 GPIO输出:点亮LED灯 and 跑马灯特效
点亮LED 点亮一个LED灯,应该是大多数单片机教程的第一步。这是最简单的一步。 GPIO初始化函数:GPIO_Init() 通常,要对LED所在的单片机的LED引脚 Px(y) 进行: 模式设置 ①输出模式 ②哪一种输出方式) 电平设置 ③高/低电平 才能够点亮LED。看上去,至少也要三个语句,方能实现对LED的控制;但是,在STM8S中,只要一个句子就可以实现!   //假设该LED是灌电流方式   GPIO_Init( GPIOC , GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_SLOW ); 来分析上面的句子: 它调用了库函数stm8s_gpio.c中的GPIO初始化函数-GPI
[单片机]
ARM汇编语言 - 简介 [一]
说明:本系列文章将主要以ARMv7和ARMv8架构为例,介绍ARM汇编语言的一些基础知识。关于ARM汇编语言的学习,这里我要推荐一本书和一个网站,其中书是由宋岩翻译的《Cortex-M3权威指南》,其文笔风趣幽默,引人入胜,网站则是azeria-labs。当然,ARM官方的Architecture Reference Manual更是重要的参考。 说起与系统结构相关的汇编语言,自然要先介绍该体系结构的寄存器组成。ARMv7相较于同为32位的x86,寄存器的数量要多一些,名称和配置也不尽相同,但两者还是有一个基本的对照关系: ARMv7-A在设计之初,就有和之前系列的处理器(比如以ARM9系列为代表的ARMv5)兼容的七种处
[单片机]
<font color='red'>ARM汇编</font>语言 - 简介 [一]
GNU-ARM汇编
第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(www.gnu.org)上下载有关规范。 一. Linux汇编行结构 任何汇编行都是如下结构: ]] 每一个段以段名为开始, 以下一个段名或者文件结尾为结束。这些段都有缺省的标志(flags),连接器可以识别这些标志。(与armasm中的AREA相同)。 下面是ELF格式允许的段标志 标志 含义 a 允许段 w 可写段 x 执行段 【例3】定义段 .
[单片机]
STM32F407——串口显示跑马灯状态
#main.c #include sys.h #include delay.h #include usart.h #include led.h //#include beep.h //#include key.h #include exti.h extern u8 onoff,dir,speed,change,flag; extern u16 time; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组 delay_init(168); //初始化延时函数 LED_In
[单片机]
STM32F407——串口显示<font color='red'>跑马灯</font>状态
STM32f4---跑马灯实验代码
led.c 文件中输入如下代码 #include led.h //初始化PF9和PF10为输出口.并使能这两个口的时钟 //LED IO 初始化 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能 GPIOF时钟 //GPIOF9,F10 初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0 和 LED1对应IO 口 GPIO_I
[单片机]
GNU ARM汇编(四)中断汇编之非嵌套中断处理
在写这篇blog之前,不得不感慨一句:纸上得来终觉浅,绝知此事要躬行.作为EE出身的,虽然好久好久没用汇编写单片机的中断了,但自我感觉对中断的理解还是比较深入的,本以为在GNU ARM汇编下搞个中断会很容易,谁知道断断续续花了我几周.完全用汇编写中断和用c中的_irq写中断还是有区别的,谁用谁知道.还是那句话:深入细节是必须的,也是值得的.         这一篇blog的理论知识主要来源于:《ARM System Developer's Guide》.         ARM的异常和相应的模式之间的对应关系见下表:   当一个异常导致模式的改变时,内核自动地: 1、把cpsr保存到相应模式下的spsr 2、
[单片机]
ARM汇编中ldr与adr的区别
ldr r0, _start adr r0, _start ldr r0, =_start nop mov pc, lr _start: nop 编译的时候设置 RO 为 0x0c008000 0c008000 _start-0x14 : c008000: e59f000c ldr r0, ; c008014 _start c008004: e28f0008 add r0, pc, #8 ; 0x8 c008008
[单片机]
GNU ARM汇编--(四)中断汇编之非嵌套中断处理
在写这篇blog之前,不得不感慨一句:纸上得来终觉浅,绝知此事要躬行.作为EE出身的,虽然好久好久没用汇编写单片机的中断了,但自我感觉对中断的理解还是比较深入的,本以为在GNU ARM汇编下搞个中断会很容易,谁知道断断续续花了我几周.完全用汇编写中断和用c中的_irq写中断还是有区别的,谁用谁知道.还是那句话:深入细节是必须的,也是值得的. 这一篇blog的理论知识主要来源于:《ARM System Developer's Guide》. ARM的异常和相应的模式之间的对应关系见下表: 当一个异常导致模式的改变时,内核自动地: 1、把cpsr保存到相应模式下的spsr 2、把pc保存到
[单片机]
GNU <font color='red'>ARM汇编</font>--(四)中断汇编之非嵌套中断处理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved