嵌入式系统实训报告--走马灯

合集下载

嵌入式系统实训报告5--走马灯

嵌入式系统实训报告5--走马灯

《嵌入式系统技术》实训报告1、实验目的z 熟悉ADS开发环境调试环境。

z 掌握简单的ARM汇编指令的使用方法。

z 掌握S3C2440A的I/O控制寄存器的配置。

z 掌握ARM汇编指令和C语言相互调用的方法2、实验设备z PC机、ARM仿真器、2440实验箱、串口线。

3、实验内容z 熟悉ARM开发环境的建立。

z 使用ARM汇编和C语言设置GPIO 口的相应寄存器。

z 编写跑马灯程序。

4、实验原理C程序与汇编程序相互调用规则为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序间的调用规定一定的规贝农ATPCS即ARM Thumb过程调用标准(ARM/Thumb Procedure Call Standard),是ARM程序和Thumb程序中子程序调用的基本规则,它规定了一些子程序间调用的基本规则,如子程序调用过程中的寄存器的使用规则,堆栈的使用规则,参数的传递规则等。

下面结合实际介绍几种ATPCS规则,如果读者想了解更多的规则,可以查看相关的书籍籍。

1. 基本ATPCS基本ATPCSS定了在子程序调用时的一些基本规则,包括下面3方面的内容:(1) 各寄存器的使用规则及其相应的名称。

(2) 数据栈的使用规则。

(3) 参数传递的规则。

相对于其它类型的ATPCS满足基本ATPCS勺程序的执行速度更快,所占用的内存更少。

但是它不能提供以下的支持:ARM程序和Thumb程序相互调用,数据以及代码的位置无关的支持,子程序的可重入性,数据栈检查的支持。

而派生的其他几种特定的ATPCS就是在基本ATPCS的基础上再添加其他的规则而形成的。

其目的就是提供上述的功能。

2.寄存器的使用规则寄存器的使用必须满足下面的规则:(1) 子程序间通过寄存器R0〜R3来传递参数。

这时,寄存器R0〜R3可以记作A0〜A3。

被调用的子程序在返回前无需恢复寄存器R0〜R3的内容。

(2) 在子程序中,使用寄存器R4〜RII来保存局部变量。

嵌入式实训跑马灯报告

嵌入式实训跑马灯报告

一、引言随着科技的飞速发展,嵌入式系统在各个领域得到了广泛的应用。

为了更好地了解嵌入式系统的开发过程,提高自己的实践能力,我参加了嵌入式实训课程,并完成了跑马灯项目的开发。

本文将详细介绍跑马灯项目的背景、设计思路、实现过程以及总结和反思。

二、项目背景跑马灯是一种常见的嵌入式应用,其基本功能是在屏幕上显示不断滚动的文字。

跑马灯项目旨在通过实践,让我们掌握嵌入式系统开发的基本流程,包括硬件选型、软件开发、调试与优化等。

三、设计思路1. 硬件选型跑马灯项目主要涉及硬件部分有:单片机、显示模块、按键模块、电源模块等。

考虑到成本和易用性,我选择了基于STC89C52单片机的硬件平台,该单片机具有丰富的外设资源,且价格低廉。

2. 软件设计跑马灯项目主要涉及软件设计,包括主程序、显示模块、按键模块等。

(1)主程序:负责跑马灯的基本功能,包括文字显示、滚动速度调整、按键控制等。

(2)显示模块:负责将文字显示在屏幕上,包括字体选择、颜色设置等。

(3)按键模块:负责实现按键功能,包括启动/停止跑马灯、调整滚动速度等。

3. 调试与优化在软件开发过程中,需要不断调试和优化程序,以提高跑马灯的性能。

主要优化方向包括:(1)优化程序结构,提高代码可读性和可维护性。

(2)优化显示模块,提高显示效果。

(3)优化按键模块,提高按键响应速度。

四、实现过程1. 硬件搭建首先,根据设计图纸,焊接电路板,连接单片机、显示模块、按键模块等硬件设备。

2. 软件编写(1)主程序:编写主程序,实现跑马灯的基本功能。

(2)显示模块:编写显示模块,实现文字显示、颜色设置等功能。

(3)按键模块:编写按键模块,实现按键控制功能。

3. 调试与优化在软件开发过程中,使用示波器、逻辑分析仪等工具进行调试,观察程序运行情况,发现问题并及时修改。

经过多次调试,跑马灯项目最终实现预期功能。

五、总结与反思1. 总结通过本次嵌入式实训,我掌握了跑马灯项目的开发过程,包括硬件选型、软件开发、调试与优化等。

可调控走马灯实训报告

可调控走马灯实训报告

一、摘要本次实训旨在通过设计与实现一个可调控走马灯,提升自己在电子设计、编程以及项目实践能力方面的技能。

在实训过程中,我学习了电路设计、微控制器编程、电机驱动等方面的知识,并通过动手实践,完成了一个具有自主调控功能的走马灯。

本报告将详细描述实训过程、遇到的问题及解决方案,以及对实训成果的总结与反思。

二、实训背景走马灯是一种传统的照明设备,具有美观、节能、环保等特点。

然而,传统的走马灯多为固定模式,缺乏可调控性。

为了提高走马灯的实用性,本次实训旨在设计并实现一个可调控走马灯,使其能够根据用户需求调整灯光模式、速度和亮度。

三、实训目标1. 学习电路设计、微控制器编程、电机驱动等方面的知识;2. 设计并实现一个可调控走马灯,具备以下功能:(1)灯光模式可调:可切换循环、闪烁、渐变等模式;(2)速度可调:可调整灯光闪烁速度;(3)亮度可调:可调整灯光亮度;(4)使用方便:通过按键实现模式、速度和亮度的切换。

四、实训过程1. 硬件设计(1)电路设计:根据实训要求,设计电路图,包括微控制器、按键、电机驱动、电源模块等。

(2)电路制作:根据电路图,制作电路板,并焊接元器件。

2. 软件设计(1)编程:使用C语言编写微控制器程序,实现走马灯的灯光模式、速度和亮度调节。

(2)调试:通过调试软件,对程序进行调试,确保程序运行正常。

3. 系统集成(1)安装:将微控制器、电机驱动、电源模块等安装到电路板上。

(2)调试:对走马灯进行整体调试,确保各个模块协同工作。

五、遇到的问题及解决方案1. 问题:电机启动时电流过大,导致电源不稳定。

解决方案:在电机驱动电路中增加限流电阻,降低启动电流。

2. 问题:按键响应速度慢,影响用户体验。

解决方案:优化程序算法,提高按键响应速度。

3. 问题:灯光亮度调节范围较小。

解决方案:调整电源电压,扩大亮度调节范围。

六、实训成果通过本次实训,我成功设计并实现了一个可调控走马灯。

该走马灯具有以下特点:1. 灯光模式可调,满足不同场景需求;2. 速度可调,适应不同使用习惯;3. 亮度可调,满足个性化需求;4. 使用方便,操作简单。

蜡烛走马灯制作实训报告

蜡烛走马灯制作实训报告

一、实训目的本次实训旨在通过亲手制作蜡烛走马灯,了解其制作原理,锻炼动手能力,增强对传统玩具文化的认识,同时培养创新精神和实践能力。

二、实训时间2023年10月26日三、实训地点学校实验室四、实训内容1. 走马灯的制作原理走马灯是一种利用热空气上升原理产生旋转的玩具。

其基本原理是:点燃蜡烛后,蜡烛燃烧产生的热量使周围空气温度升高,密度减小,热空气上升,带动风轮旋转。

风轮上的剪纸或图案随之转动,形成动态的画面。

2. 走马灯的制作步骤(1)材料准备:圆形纸板、细铁丝、蜡烛、剪刀、胶水、彩纸、铅笔、直尺等。

(2)制作风轮:将圆形纸板沿直径剪开,形成两个半圆形。

在半圆形纸板的一端,用剪刀剪出若干个等距离的缺口,作为风轮的叶片。

将两个半圆形纸板对折,用胶水粘合,形成风轮。

(3)制作灯罩:取一张正方形纸板,沿对角线剪开,形成两个等腰直角三角形。

将两个等腰直角三角形粘合,形成灯罩。

在灯罩上画上图案,增加美观。

(4)制作底座:取一根细铁丝,一端弯成烛台形状,另一端固定在圆形纸板的中心。

将蜡烛放在烛台上,点燃蜡烛。

(5)组装走马灯:将风轮放在底座上,调整位置使风轮与蜡烛垂直。

将灯罩放在风轮上,调整位置使灯罩与风轮平行。

五、实训过程1. 准备材料:按照实训内容准备所需材料。

2. 制作风轮:按照步骤(2)制作风轮。

3. 制作灯罩:按照步骤(3)制作灯罩。

4. 制作底座:按照步骤(4)制作底座。

5. 组装走马灯:按照步骤(5)组装走马灯。

6. 点燃蜡烛,观察走马灯的旋转情况。

六、实训结果经过一系列的制作过程,成功制作出一只蜡烛走马灯。

点燃蜡烛后,走马灯的叶片开始旋转,灯罩上的图案也随之转动,形成动态的画面。

七、实训心得1. 通过本次实训,我对走马灯的制作原理有了更深入的了解,对传统玩具文化有了更深刻的认识。

2. 实训过程中,我锻炼了动手能力,培养了创新精神和实践能力。

3. 在制作过程中,我遇到了一些问题,如风轮叶片的开口方向、灯罩与风轮的平行度等。

嵌入式跑马灯实验报告

嵌入式跑马灯实验报告

嵌入式跑马灯实验报告嵌入式跑马灯实验报告引言:嵌入式系统是现代科技中的重要一环,它融合了计算机科学和电子工程的知识,被广泛应用于各个领域。

而跑马灯作为嵌入式系统中的一个经典实验,不仅能够帮助我们理解嵌入式系统的原理,还能够培养我们的动手能力和创新思维。

本篇实验报告将详细介绍嵌入式跑马灯实验的设计与实现过程,并总结实验中的收获和经验。

一、实验背景跑马灯是一种常见的电子显示器件,它能够按照一定的规律闪烁或滚动显示文字、图案等内容。

在本次实验中,我们将使用嵌入式系统来设计一个跑马灯,并通过编程控制其显示效果,从而加深对嵌入式系统的理解和应用。

二、实验材料1. 嵌入式开发板:我们选择了一款基于ARM架构的开发板,具有较高的性能和丰富的外设接口,适合进行跑马灯实验。

2. LED灯:我们使用了8个LED灯作为跑马灯的显示元素,通过控制每个LED的亮灭状态,实现跑马灯的效果。

3. 连接线:用于将开发板和LED灯进行连接,确保信号的传输和控制的准确性。

三、实验设计与实现1. 硬件连接:首先,我们将LED灯与开发板的GPIO口进行连接。

通过查阅开发板的引脚图,我们确定了每个LED灯对应的GPIO引脚,并使用连接线将它们相连。

2. 系统初始化:在嵌入式开发环境中,我们编写了初始化代码,用于配置GPIO 口的工作模式和初始化LED灯的状态。

通过设置引脚为输出模式,并将其电平置低,我们确保了LED灯的初始状态为熄灭。

3. 跑马灯效果实现:为了实现跑马灯的效果,我们编写了一个循环程序。

在每个循环中,我们通过改变LED灯的亮灭状态,实现灯光的闪烁。

具体而言,我们使用一个变量来表示当前亮灯的位置,然后将该位置对应的LED引脚电平置高,其他LED引脚电平置低。

随后,我们通过延时函数控制灯光的亮灭时间,再将亮灯位置变量进行更新,实现灯光的移动效果。

通过不断循环执行该程序,我们可以看到跑马灯的效果。

4. 实验调试:在实验过程中,我们发现了一些问题,例如灯光闪烁过快或过慢、灯光移动的不连续等。

跑马灯实验报告

跑马灯实验报告

一、实验目的1. 熟悉嵌入式系统硬件电路的搭建与调试;2. 掌握C语言编程,实现跑马灯功能;3. 理解并掌握GPIO口操作,学习定时器中断的使用。

二、实验环境1. 开发板:STM32F103C8T6开发板2. 编译器:Keil uVision53. 软件库:STM32标准外设库三、实验原理跑马灯实验是通过控制LED灯的亮灭,实现LED灯依次点亮的效果。

实验原理如下:1. GPIO口控制:将LED灯连接到开发板的GPIO口,通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;2. 定时器中断:定时器产生中断,实现LED灯点亮与熄灭的时间间隔;3. 循环控制:通过循环控制LED灯的点亮顺序,实现跑马灯效果。

四、实验步骤1. 硬件电路搭建(1)将LED灯的正极连接到开发板的GPIO口,负极接地;(2)将开发板的电源和地线连接到电源模块。

2. 软件编程(1)在Keil uVision5中创建项目,并导入STM32标准外设库;(2)编写程序,实现以下功能:a. 初始化GPIO口,将LED灯连接的GPIO口配置为输出模式;b. 初始化定时器,设置定时器中断周期,使LED灯点亮与熄灭的时间间隔为1ms;c. 编写定时器中断服务程序,控制LED灯的点亮与熄灭;d. 编写主函数,实现LED灯依次点亮的效果。

3. 编译与下载(1)编译程序,生成可执行文件;(2)将开发板连接到计算机,通过串口下载程序到开发板。

4. 实验调试(1)打开串口调试助手,观察LED灯的点亮与熄灭效果;(2)调整程序参数,优化跑马灯效果。

五、实验结果与分析1. 实验结果(1)LED灯依次点亮,实现跑马灯效果;(2)LED灯点亮与熄灭的时间间隔可调。

2. 实验分析(1)通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;(2)定时器中断实现LED灯点亮与熄灭的时间间隔控制;(3)循环控制实现LED灯依次点亮的效果。

六、实验总结本次实验成功实现了跑马灯功能,加深了对嵌入式系统硬件电路、C语言编程和GPIO口操作的理解。

嵌入式系统实验报告

嵌入式系统实验报告

实验报告课程名称:嵌入式系统学院:信息工程专业:电子信息工程班级:学生姓名:学号:指导教师:开课时间:学年第一学期实验名称:IO接口(跑马灯)实验时间:11.16 实验成绩:一、实验目的1.掌握 STM32F4 基本IO口的使用。

2.使用STM32F4 IO口的推挽输出功能,利用GPIO_Set函数来设置完成对 IO 口的配置。

3.控制STM32F4的IO口输出,实现控制ALIENTEK 探索者STM32F4开发板上的两个LED实现一个类似跑马灯的效果。

二、实验原理本次实验的关键在于如何控制STM32F4的IO口输出。

IO主要由:MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR、AFRH和AFRL等8个寄存器的控制,并且本次实验主要用到IO口的推挽输出功能,利用GPIO_Set函数来设置,即可完成对IO口的配置。

所以可以通过了开发板上的两个LED灯来实现一个类似跑马灯的效果。

三、实验资源实验器材:探索者STM32F4开发板硬件资源:1.DS0(连接在PF9)2.DS1(连接在PF10)四、实验内容及步骤1.硬件设计2.软件设计(1)新建TEST工程,在该工程文件夹下面新建一个 HARDWARE文件夹,用来存储以后与硬件相关的代码。

然后在 HARDWARE 文件夹下新建一个LED文件夹,用来存放与LED相关的代码。

(2)打开USER文件夹下的test.uvproj工程,新建一个文件,然后保存在 LED 文件夹下面,保存为 led.c,在led.c中输入相应的代码。

(3)采用 GPIO_Set 函数实现IO配置。

LED_Init 调用 GPIO_Set 函数完成对 PF9 和 PF10 ALIENTEK 探索者 STM32F407 开发板教程 119 STM32F4 开发指南(寄存器版) 的模式配置,控制 LED0 和 LED1 输出 1(LED 灭),使两个 LED 的初始化。

嵌入式系统原理实验三跑马灯

嵌入式系统原理实验三跑马灯

实验三跑马灯实验实验目的:通过一个经典的跑马灯程序,了解STM32F1 的IO 口作为输出使用的方法。

通过代码控制ALIENTEK 战舰STM32 开发板上的两个LED:DS0 和DS1 交替闪烁,实现类似跑马灯的效果内容要点:1.硬件设计本章用到的硬件只有LED(DS0 和DS1)。

其电路在ALIENTEK 战舰STM32F103开发板上默认是已经连接好了的。

DS0 接PB5,DS1 接PE5。

所以在硬件上不需要动任何东西。

其连接原理图如图:2.软件设计跑马灯实验我们主要用到的固件库文件是:stm32f10x_gpio.c /stm32f10x_gpio.hstm32f10x_rcc.c/stm32f10x_rcc.hmisc.c/ misc.hstm32f10x_usart /stm32f10x_usart.h其中stm32f10x_rcc.h 头文件在每个实验中都要引入,因为系统时钟配置函数以及相关的外设时钟使能函数都在这个其源文件stm32f10x_rcc.c 中。

stm32f10x_usart.h 和misc.h 头文件在我们SYSTEM 文件夹中都需要使用到,所以每个实验都会引用。

首先,找到之前新建的Template 工程,在该文件夹下面新建一个HARDWARE的文件夹,用来存储以后与硬件相关的代码,然后在HARDWARE 文件夹下新建一个LED 文件夹,用来存放与LED 相关的代码。

新建led.h和led.c文件,一个外设对应一个.h和.c文件。

在Manage Components 管理里面新建一个HARDWARE 的组,并把led.c 加入到这个组里面,将led.h 头文件的路径加入到工程里面一般的头文件有固定的格式,多个地方调用头文件会重复引用,为了避免头文件内容重复引用,一般通过预编译的方式来写头文件。

一般的格式如下:#ifndef __LED_H#define __LED_H……#endif第一次调用时会将#define下面这一节全部定义,重复调用时,下面的东西就不会被引用。

走马灯实验报告67586

走马灯实验报告67586

电子系统综合设计报告学号0229姓名李文海年级专业2010级电子信息工程(二)指导教师刘怀强学院理学院走马灯实验论文--《嵌入式系统技术》1、实验目的1、学会DP-51PRO实验仪监控程序下载、动态调试等联机调试功能的使用;2、理解和学会单片机并口的作为通用I/O的使用;3、理解和学会单片机外部中断的使用;4、了解单片机定时器/计数器的应用。

2、实验设备z PC 机、ARM 仿真器、2440 实验箱、串口线。

3、实验内容z熟悉A RM 开发环境的建立。

z使用A RM 汇编和C语言设置G PIO 口的相应寄存器。

z编写跑马灯程序。

5、实验原理走马灯实验是一个硬件实验,因此要求使用DP-51PRO 单片机综合仿真实验仪进行硬件仿真,首先要求先进行软件仿真,排除软件语法错误,保证关键程序段的正确。

然后连接仿真仪,下载监控程序,进行主机与实验箱联机仿真。

为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序间的调用规定一定的规则。

ATPCS ,即ARM ,Thumb 过程调用标准(ARM/Thumb Procedure Call Standard),是A RM 程序和T humb 程序中子程序调用的基本规则,它规定了一些子程序间调用的基本规则,如子程序调用过程中的寄存器的使用规则,堆栈的使用规则,参数的传递规则等。

下面结合实际介绍几种A TPCS 规则,如果读者想了解更多的规则,可以查看相关的书籍。

1.基本A TPCS基本A TPCS 规定了在子程序调用时的一些基本规则,包括下面3方面的内容:(1)各寄存器的使用规则及其相应的名称。

(2)数据栈的使用规则。

(3)参数传递的规则。

相对于其它类型的A TPCS,满足基本A TPCS 的程序的执行速度更快,所占用的内存更少。

但是它不能提供以下的支持: ARM 程序和T humb 程序相互调用,数据以及代码的位置无关的支持,子程序的可重入性,数据栈检查的支持。

单片机实训报告跑马灯

单片机实训报告跑马灯

一、实训背景随着科技的发展,单片机作为一种重要的嵌入式系统控制单元,在工业控制、智能家居、物联网等领域得到了广泛的应用。

为了提高学生对单片机程序设计的理解和实践能力,本次实训选择了跑马灯程序设计作为实训项目。

二、实训目的1. 熟悉单片机的基本结构和编程方法。

2. 掌握Keil C51集成开发环境的使用。

3. 学习跑马灯程序的设计与实现。

4. 培养动手实践能力和团队协作精神。

三、实训内容本次实训主要分为以下几个部分:1. 电路设计:设计跑马灯的电路,包括单片机、LED灯、电阻、按键等元件。

2. 程序设计:编写跑马灯的程序,实现LED灯的正序、倒序、闪烁等功能。

3. 程序调试:在Keil C51集成开发环境中进行程序调试,确保程序正常运行。

4. 实验报告撰写:总结实训过程中的经验和收获,撰写实验报告。

四、电路设计跑马灯电路主要包括以下元件:1. 单片机:选用AT89C51单片机作为控制核心。

2. LED灯:使用8个LED灯作为显示元件。

3. 电阻:用于限流,防止LED灯烧毁。

4. 按键:用于控制跑马灯的运行模式。

电路连接方式如下:1. 将8个LED灯的正极依次连接到单片机的P1口。

2. 将8个LED灯的负极依次连接到地线。

3. 将按键的一端连接到单片机的P3.0口,另一端连接到地线。

五、程序设计跑马灯的程序采用C语言编写,主要功能包括:1. 正序跑马灯:LED灯依次点亮,从D1到D8。

2. 倒序跑马灯:LED灯依次点亮,从D8到D1。

3. 闪烁跑马灯:LED灯快速闪烁。

程序流程如下:1. 初始化单片机P1口为输出模式。

2. 根据按键输入选择跑马灯的运行模式。

3. 根据选择的模式,依次点亮LED灯。

4. 延时一段时间,然后继续点亮下一个LED灯。

5. 重复步骤3和4,直到所有LED灯点亮完毕。

程序代码如下:```c#include <reg51.h>#define LED P1void delay(unsigned int t) {unsigned int i, j;for (i = 0; i < t; i++)for (j = 0; j < 120; j++);}void main() {unsigned char i;LED = 0x01; // 正序跑马灯while (1) {for (i = 0; i < 8; i++) {delay(500); // 延时LED = (0x01 << i); // 点亮下一个LED灯}}}```六、程序调试在Keil C51集成开发环境中,将程序代码编译生成HEX文件,然后将HEX文件烧录到单片机中。

stm32跑马灯实验报告

stm32跑马灯实验报告

stm32跑马灯实验报告STM32跑马灯实验报告引言:STM32是一款广泛应用于嵌入式系统开发的微控制器,具有高性能、低功耗和丰富的外设接口。

跑马灯实验是入门级的STM32实验项目,通过控制LED灯的亮灭顺序实现跑马灯效果。

本实验报告将详细介绍实验的目的、原理、实施步骤以及实验结果。

一、实验目的跑马灯实验旨在通过STM32的GPIO控制LED灯的亮灭,实现灯光在多个LED之间依次点亮和熄灭的效果。

通过这个实验,我们可以了解STM32的GPIO口的操作方式,掌握基本的STM32编程技巧。

二、实验原理STM32的GPIO口可以设置为输出模式,通过控制GPIO口的电平(高电平或低电平)来控制LED灯的亮灭。

跑马灯实验中,我们将多个LED连接到STM32的不同GPIO口上,通过依次改变GPIO口的电平状态,实现灯光在不同LED之间依次传递的效果。

三、实施步骤1. 准备材料:STM32开发板、杜邦线、若干个LED灯。

2. 连接电路:将多个LED分别连接到STM32的不同GPIO口上,确保极性正确。

3. 创建工程:使用Keil等开发环境创建STM32工程,并配置好相应的引脚。

4. 编写代码:在main函数中编写代码,通过设置GPIO口的电平状态实现跑马灯效果。

5. 编译烧录:编译代码生成可执行文件,并将其烧录到STM32开发板上。

6. 运行实验:将STM32开发板上电,观察LED灯的亮灭顺序是否符合预期。

四、实验结果经过实验,我们成功实现了跑马灯效果。

LED灯在不同的GPIO口之间依次点亮和熄灭,形成了流动的灯光效果。

通过调整代码中GPIO口的顺序和时间延迟,我们还可以改变灯光的流动速度和方向。

实验结果与预期一致,验证了我们的设计和实施的正确性。

五、实验总结通过这个实验,我们对STM32的GPIO控制和编程有了更深入的了解。

我们学会了如何通过改变GPIO口的电平状态来控制外部设备,掌握了基本的STM32编程技巧。

嵌入式操作系统跑马灯实验报告

嵌入式操作系统跑马灯实验报告

嵌入式操作系统实验报告实验题目:实验一 CVT-PXA270的使用及跑马灯实验专业:计算机科学与技术班级:姓名:学号:1. 了解Linux下端口编程的方法;2. 掌握CVT-PXA270下的directio通用端口编程驱动程序的使用;3. 掌握CVT-PXA270下跑马灯的使用方法。

二、实验内容1.了解CVT-PXA270的外部结构,以及各端口的使用2.测试跑马灯状态,使跑马灯程序在Linux系统下运行3.修改跑马灯程序,使跑马灯呈现出不同的状态三、实验方案/* 当前跑马灯状态*/unsigned char led_status = 0x00;//******************************************************************** // Function name : delay// Description : delay for a while// Return type : void// Argument : int count********************************************************************* /void delay(int count){while(count --);}/* 主函数*/int Main(int argc, char* argv[]){while(1){*((unsigned char *) 0x04005000) = led_status;delay(0xffffff);led_status ++;}return 0;}四、试验结果实验箱上的四个跑马灯将不断闪烁,修改程序中delay函数调用的值将变它们显示的速度,值越大,显示越慢。

本次实验过程中,由于第一次实验,对实验器件,还有实验过程都不大了解,使得做实验过程中遇到很大的问题。

也花费了不少时间,不过在慢慢的摸索中,以及老师的指导和同学的帮助下,最终也了解了CVT-PXA270的外部结构,以及各个引脚的作用,还有各个串口和并口的具体使用,还观察了跑马灯在CVT-PXA270下的运行状态,以及它的运行程序,当程序中的delay函数改变时,其状态也随之改变。

嵌入式系统实验报告-跑马灯

嵌入式系统实验报告-跑马灯
使用使用使用usbdirectusbdirectusbdirect程序烧写程序时程序烧写程序时程序烧写程序时记得点记得点记得点fulloperationfulloperationfulloperation不要点不要点不要点downloaddownloaddownload题主有次点击了一上午题主有次点击了一上午题主有次点击了一上午downloaddownloaddownload都没有成功将二进制镜像写入开发都没有成功将二进制镜像写入开发都没有成功将二进制镜像写入开发请给出关请给出关请给出关于本实验于本实验于本实验的心得体的心得体的心得体会及建议会及建议会及建议希望下次可以提供一些跑马灯以外的项目源码或者给一些基础的开发板希望下次可以提供一些跑马灯以外的项目源码或者给一些基础的开发板希望下次可以提供一些跑马灯以外的项目源码或者给一些基础的开发板编程资料但是适合本开发板网上资料不是很多难以寻找
嵌入式系统基础实灯
请简要描述你的实验主要步骤
1.打开源程序工程,编译链接生成二进制文件;
2.烧写二进制代码并运行开发板;
3.观察开发板上的按钮与LED灯;
4.恢复开发板为初始状态;
请说明实验中你遇到的问题及解决方法
实验源码方面没有什么问题,问题在于具体操作方面:
1.使用usb线连接开发板之后,需要将切换开关置于编程位置。而且再写入之前要按一下复位键。
实验关键部分相关源码
void marquee()
{
int i;
while(1) {
for(i = 0; i < 9; i++){
delay(10);
*led_array[i] = ON;
delay(10);
*led_array[i] = OFF;

ARM嵌入式跑马灯设计实验报告

ARM嵌入式跑马灯设计实验报告

ARM嵌入式设计实验报告题目:跑马灯的设计专业:班级:姓名:学号:指导教师:2014年11 月目录1 题目要求 (1)2 设计软件的安装 (1)3 开发平台的搭建 (4)4 项目设计 (8)4.1 设计思路概述 (8)4.1.1 设计层次介绍 (9)4.1.2 设计模块介绍 (12)5总结 (16)1.题目要求:在windows系统上安装一个Linux操作系统,并且在自己搭建的平台上实现跑马灯的设计。

1.1.实验工具:计算机 linux操作系统1.1.2.实验目的:熟练掌握arm开发环境的设计,了解跑马灯的编程。

2.设计软件的安装:本项目设计软件为ReHat Linux 9.0操作系统,实验开发平台为MagicARM270具体关键安装步骤如下:3.开发平台的搭建:实验步骤(1)安装交叉编译器将光盘提供的交叉编译器安装包arm-linux-3.4.1.tar.bz2复制到某个目录下,然后进行解压安装,指定安装路径为/usr/local/arm。

# tar xjvf arm-linux-3.4.1.tar.bz2 -C /usr/local/arm注意:安装交叉编译器需要root权限,请使用root登录或者使用su命令增加root权限。

(2)设定交叉编译器路径修改/etc/profile文件,在其中增加arm-linux-gcc的路径,然后重新登录:# Path manipulationif [ `id -u` = 0 ]; thenpathmunge /sbinpathmunge /usr/sbinpathmunge /usr/local/sbinpathmunge /usr/local/arm/3.4.1/bin ⇓增加此行fi(3)设置宿主机网络从RedHat Linux的Main Menu菜单,选择System Settings◊Network,打开网络配置界面。

(4)设置宿主机网络双击eth0,在弹出的界面进行具体的网络设置,如IP地址、子网掩码等信息。

嵌入式跑马灯实验

嵌入式跑马灯实验

一、实验名称:跑马灯二、实验要求:编写程序控制跑马灯的亮灭:首先是全不亮,接着第1个灯亮,第2个灯亮,第3个灯亮,第4个灯亮,最后所有的灯一起亮,即按顺序亮,然后全亮,最后全灭,顺序循环。

最后蜂鸣器响,然后灯全部灭。

三、实验步骤1、点击WINDOWS 操作系统的开始-> 程序-> ARM Developer Suite v1.2 ->CodeWarrior forARM Developer Suite 启动ADS1.2 IDE 或双击CodeWarrior for ARMDeveloper Suite 快捷方式起动启。

2、打开原有的有关跑马灯实验的工程。

3、源程序代码:。

/******************************************************************** ********* File:LEDCON.C* 功能:LED闪烁控制。

对发光二极管LED4进行控制,采用软件延时方法。

* 使用I/O口直接控制LED,采用灌电流方式。

* 说明:将跳线器JP8_LED4短接。

********************************************************************* *******/#include "config.h"#define LEDCON4 0x00002000 /* P0.13引脚控制LED4,低电平点亮*/#define LEDCON1 0x00000400 /* P0.10引脚控制LED1,低电平点亮*/#define LEDCON2 0x00000800 /* P0.11引脚控制LED2,低电平点亮*/#define LENCON3 0x00001000 /* P0.12引脚控制LED3,低电平点亮*/#define BEEP 0x00000080 /* P0.7引脚控制蜂鸣器,低电平响*/#define ALL 0x00003C80#define LEDALL 0x00003C00/******************************************************************** ********* 名称:DelayNS()* 功能:长软件延时* 入口参数:dly 延时参数,值越大,延时越久* 出口参数:无********************************************************************* *******/void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--)for(i=0; i<50000; i++);/******************************************************************** ********* 名称:main()* 功能:控制LED闪烁********************************************************************* *******/int main(void){ PINSEL0 = 0x00000000; // 设置所有管脚连接GPIOPINSEL1 = 0x00000000;IODIR = ALL; // 设置ALL控制口为输出while(1) //实现循环{IOSET =ALL;//初始化所有的灯灭IOSET =BEEP;// 蜂鸣器不响IOCLR = LEDCON1; //低电平灯亮DelayNS(100); //延迟时间IOSET = LEDCON1; //高电平灯灭DelayNS(100); //延迟时间IOCLR = LEDCON2;DelayNS(100);IOSET = LEDCON2;DelayNS(100);IOCLR = LEDCON3;DelayNS(100);IOSET = LEDCON3;DelayNS(100);IOCLR = LEDCON4;DelayNS(100);IOSET = LEDCON4;DelayNS(100);IOCLR =ALLLED;//所有的灯亮DelayNS(100);IOCLR =BEEP;//蜂鸣器响DelayNS(100);}return(0);4、调试程序观察实验结果。

嵌入式02STM32实验04跑马灯

嵌入式02STM32实验04跑马灯

嵌⼊式02STM32实验04跑马灯开学STM32跑马灯的实验主要就是了解GPIO⼝的配置及使⽤,我这⾥是使⽤库函数进⾏编程,主要需要设置以下两⽅⾯: 1、使能需要使⽤的IO⼝的时钟,⼀共有A、B、C、D、E、F、G七组IO⼝ 2、初始化IO⼝(设置IO⼝的端⼝号(有GPIO_Pin_0 ~ GPIO_Pin_15,共16个IO端⼝)、设置IO⼝的输出速度、设置IO⼝的⼯作模式)代码如下1//端⼝初始化2 #include "led.h"3 #include "stm32f10x.h"45void LED_Init(void)6 {7 GPIO_InitTypeDef GPIO_KST;8910 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能端⼝B和E1112 GPIO_KST.GPIO_Mode = GPIO_Mode_Out_PP; //设置端⼝模式为推挽输出13 GPIO_KST.GPIO_Pin = GPIO_Pin_5; //选择端⼝514 GPIO_KST.GPIO_Speed = GPIO_Speed_2MHz; //IO⼝的速度设置为2MHz15 GPIO_Init(GPIOB, &GPIO_KST); //初始化GPIOB.5161718 GPIO_KST.GPIO_Mode = GPIO_Mode_Out_PP; //设置端⼝模式为推挽输出19 GPIO_KST.GPIO_Pin = GPIO_Pin_5; //选择端⼝520 GPIO_KST.GPIO_Speed = GPIO_Speed_2MHz; //IO⼝的速度设置为2MHz21 GPIO_Init(GPIOE, &GPIO_KST); //初始化GPIOE.522 }主程序1//主程序2 #include "sys.h"3 #include "delay.h"4 #include "led.h"56int main(void)7 {8 delay_init(); //延时初始化9 LED_Init(); //LED初始化10while(1)11 {12 GPIO_ResetBits(GPIOE, GPIO_Pin_5); //关闭PE5端⼝的LED13 GPIO_SetBits(GPIOB, GPIO_Pin_5); //关闭PB5端⼝的LED14 delay_ms(500); //延时100ms15 GPIO_SetBits(GPIOE, GPIO_Pin_5);16 GPIO_ResetBits(GPIOB, GPIO_Pin_5); //打开PB5端⼝的LED17 delay_ms(500); //延时100ms18 }1920 }。

嵌入式系统原理实验三跑马灯

嵌入式系统原理实验三跑马灯

嵌入式系统原理实验三跑马灯(共4页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--实验三跑马灯实验实验目的:通过一个经典的跑马灯程序,了解 STM32F1 的 IO 口作为输出使用的方法。

通过代码控制 ALIENTEK 战舰 STM32 开发板上的两个 LED: DS0 和DS1 交替闪烁,实现类似跑马灯的效果内容要点:1.硬件设计本章用到的硬件只有LED(DS0 和DS1)。

其电路在ALIENTEK 战舰STM32F103 开发板上默认是已经连接好了的。

DS0 接PB5,DS1 接PE5。

所以在硬件上不需要动任何东西。

其连接原理图如图:2.软件设计跑马灯实验我们主要用到的固件库文件是:/stm32f10x_usart /其中头文件在每个实验中都要引入,因为系统时钟配置函数以及相关的外设时钟使能函数都在这个其源文件中。

和头文件在我们SYSTEM 文件夹中都需要使用到,所以每个实验都会引用。

首先,找到之前新建的Template 工程,在该文件夹下面新建一个HARDWARE 的文件夹,用来存储以后与硬件相关的代码,然后在HARDWARE 文件夹下新建一个LED 文件夹,用来存放与LED 相关的代码。

新建和文件,一个外设对应一个.h和.c文件。

在Manage Components 管理里面新建一个HARDWARE 的组,并把加入到这个组里面,将头文件的路径加入到工程里面一般的头文件有固定的格式,多个地方调用头文件会重复引用,为了避免头文件内容重复引用,一般通过预编译的方式来写头文件。

一般的格式如下:#ifndef __LED_H#define __LED_H……#endif第一次调用时会将#define下面这一节全部定义,重复调用时,下面的东西就不会被引用。

头文件里一般用来写函数声明或者宏定义,在源文件中再去定义具体的函数。

#ifndef __LED_H#define __LED_Hvoid LED_Init(void);#endif然后我们打开USER 文件夹下的工程(如果是使用的上面新建的工程模板,那么就是Template. uvprojx,大家可以将其重命名为LED. uvprojx),按新建按钮新建一个文件,然后保存在HARDWARE->LED 文件夹下面,保存为。

嵌入式系统课程设计 跑马灯报告

嵌入式系统课程设计 跑马灯报告

嵌入式系统课程设计报告学部专业学号姓名指导教师日期一、实验内容设计msp430单片机程序并焊接电路板,利用msp430单片机芯片实现对跑马灯、按键识别及数码显示这三大模块的控制二、实验目的1.熟悉电路原理图,了解单片机芯片与各大模块间的控制关系2.增强看图和动手设计能力,为将来从事这个专业及相关知识奠定基础3.在焊接的同时,理解源程序是如何实现相应功能的三、实验设备及器材清单实验设备:电烙铁、烙铁架、尖嘴钳、斜口钳、镊子、万用表等器材清单:四、硬件电路框图五、程序清单跑马灯程序#include <MSP430X14X.H>#define uchar unsigned char#define uint unsigned intint main( void ){void delay( );WDTCTL = WDTPW + WDTHOLD; unsigned char i=0,j=0;P2DIR=0XFF;P2SEL=0X00;while(1){for(i=0;i<10;i++){P2OUT=0XFF;delay(50);P2OUT=0X00;delay(50);}for(j=0;j<10;j++){P2OUT=0X55;delay(50);P2OUT=0XAA;delay(50);}}}void delay(uint n){uint a,b;for(a=0;a<=n;a++){for(b=0;b<=1538;b++);}}键盘程序#include "msp430x14x.h"int keyvalue=0;int i;int table[]={0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07};void main( void ){WDTCTL = WDTPW + WDTHOLD; // 关看门狗P3DIR|=0X0b; //P3.0 P3.1 P3.3设置为输出状态P3SEL=0X0a; //选择P.1 P3.3为外围器件功能使用P3OUT=0X00; //P3引脚低电平P3OUT=0XFF; //P3引脚高电平P4DIR=0X00; //P4.0-P4.7引脚设置为输入P4SEL=0X00; //选择P4.0-P4.7为外围器件功能使用,即按键的输入口P1DIR=0X00; //P1.0-P1.7引脚设置为输入P1SEL=0X08; //选择P1.3为外围器件功能使用P1IE=0X08; //P1.3中断使能P1IES=0X08; // 下降沿中断标志置位U0CTL=SWRST; //UART逻辑为复位状态,可以设置串口U0CTL=CHAR+SYNC+MM; //8位数据位,SPI模式,地址位多机协议U0TCTL=SSEL1+SSEL0+STC;//选择主时钟MCTL,3端SPI,STE禁止U0TCTL=CKPH; //UCTL时钟信号延迟半个周期U0TCTL=~CKPL; //CKPL=1,时钟信号的高电平位无效电平U0BR0=0X02; //波特率2分频U0BR1=0X00;U0MCTL=0X00;ME1|=USPIE0; //串口0同步模块使能U0CTL&=~SWRST; //UART处于工作状态while(1){for(i=0;i<8;i++){if((P4IN&0x01<<i)==0X00) //按下1键(低电平)1111 1110&0000 0001=00000 0000==0x00//按下2键(低电平)1111 1101&0000 0010=0000 0000==0x00{keyvalue=table[i]; //按下1键keyvalue=0x3f 按下2键eyvalue=0x06U0TXBUF=keyvalue; //接收数据缓存//while((IFG1&UTXIFG0)==0);//IFG1&=~UTXIFG0;}}}}#pragma vector=PORT1_VECTOR //进入中断程序__interrupt void port1_vr(void){P3OUT=0X00; //P3输出低电平}六、实验小结时间过的很快,这个学期的MSP430单片机结束了,随之而来的课程设计也要结束了。

走马灯动画实训报告

走马灯动画实训报告

一、实训背景随着多媒体技术的发展,幻灯片动画在各类演示文稿、教学课件以及节日庆典活动中扮演着越来越重要的角色。

走马灯动画因其独特的视觉效果和丰富的娱乐性,成为众多设计者喜爱的动画效果之一。

本次实训旨在通过学习走马灯动画的制作方法,提升自身在PPT制作方面的技能,同时为今后的教学和演示工作积累经验。

二、实训目标1. 熟悉走马灯动画的基本原理和制作流程。

2. 掌握利用PPT软件制作走马灯动画的方法。

3. 通过实际操作,提高动画制作技能和审美能力。

4. 将走马灯动画应用于实际工作中,提升演示效果。

三、实训内容1. 理论学习首先,我们对走马灯动画进行了深入的理论学习。

了解其起源、发展历程以及在各类场合的应用。

同时,学习了动画的基本概念,如动画类型、动画效果、动画路径等。

2. 软件操作本次实训主要使用Microsoft PowerPoint软件进行走马灯动画的制作。

以下是具体操作步骤:(1)启动PPT软件,新建一张幻灯片,删除默认的文本框。

(2)插入走马灯要展示的动物或人物图片,使之位于幻灯片中间水平线上。

确保图片分布范围不超出幻灯片,图片之间适当间隔距离。

(3)选取全部图片,使之组合在一起。

(4)复制图片,将复制出的图片置于原图片的后面,前后相接。

确保两张图片的大小与幻灯片大小一致。

(5)设置动画。

两张图片均按自定义路径设计由右至左运动。

注意运动路径起始位置,以确保走马灯效果前后相接。

速度设计为慢速。

(6)将设计好的幻灯片复制多张,并设计切换方式为自动,时间为1-3秒。

3. 实践操作在理论学习和软件操作的基础上,我们进行了实际操作。

通过不断尝试和修改,最终成功制作出效果满意的走马灯动画。

四、实训成果通过本次实训,我们掌握了走马灯动画的制作方法,并成功应用于实际工作中。

以下是我们制作的走马灯动画效果:(1)展示节日氛围的走马灯动画,用于庆典活动。

(2)教学课件中的走马灯动画,提高教学效果。

(3)演示文稿中的走马灯动画,丰富演示内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《嵌入式系统技术》实训报告1、实验目的z熟悉A DS 开发环境调试环境。

z掌握简单的A RM 汇编指令的使用方法。

z掌握S3C2440A 的I/O 控制寄存器的配置。

z掌握A RM 汇编指令和C语言相互调用的方法2、实验设备z PC 机、ARM 仿真器、2440 实验箱、串口线。

3、实验内容z熟悉A RM 开发环境的建立。

z使用A RM 汇编和C语言设置G PIO 口的相应寄存器。

z编写跑马灯程序。

4、实验原理C 程序与汇编程序相互调用规则为了使单独编译的C 语言程序和汇编程序之间能够相互调用,必须为子程序间的调用规定一定的规则。

ATPCS ,即ARM ,Thumb 过程调用标准(ARM/Thumb Procedure Call Standard),是A RM 程序和T humb 程序中子程序调用的基本规则,它规定了一些子程序间调用的基本规则,如子程序调用过程中的寄存器的使用规则,堆栈的使用规则,参数的传递规则等。

下面结合实际介绍几种A TPCS 规则,如果读者想了解更多的规则,可以查看相关的书籍。

1.基本A TPCS基本A TPCS 规定了在子程序调用时的一些基本规则,包括下面3方面的内容:(1)各寄存器的使用规则及其相应的名称。

(2)数据栈的使用规则。

(3)参数传递的规则。

相对于其它类型的A TPCS,满足基本A TPCS 的程序的执行速度更快,所占用的内存更少。

但是它不能提供以下的支持:ARM 程序和T humb 程序相互调用,数据以及代码的位置无关的支持,子程序的可重入性,数据栈检查的支持。

而派生的其他几种特定的ATPCS 就是在基本ATPCS 的基础上再添加其他的规则而形成的。

其目的就是提供上述的功能。

2.寄存器的使用规则寄存器的使用必须满足下面的规则:(1) 子程序间通过寄存器R0~R3 来传递参数。

这时,寄存器R0~R3 可以记作A0~A3。

被调用的子程序在返回前无需恢复寄存器R0~R3 的内容。

(2) 在子程序中,使用寄存器R4~Rll 来保存局部变量。

这时,寄存器R4~R11 可以记作V1~V8。

如果在子程序中使用到了寄存器V1~V8 中的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器则不必进行这些操作。

在T humb 程序中,通常只能使用寄存器R4~R7 来保存局部变量。

(3) 寄存器R12 用作子程序间s cratch 寄存器,记作I P。

在子程序间的连接代码段中常有这种使用规则。

(4) 寄存器R13 用作数据栈指针,记作S P。

在子程序中寄存器R13 不能用作其他用途。

寄存器S P 在进入子程序时的值和退出子程序时的值必须相等。

(5) 寄存器R14称为连接寄存器,记作LR。

它用于保存子程序的返回地址。

如果在子程序中保存了返回地址,寄存器R14则可以用作其他用途。

(6) 寄存器R15 是程序计数器,记作P C。

它不能用作其他用途。

3.参数传递规则根据参数个数是否固定可以将子程序分为参数个数固定的(nonvariadic)子程序和参数个数可变的(variadic)子程序。

这两种子程序的参数传递规则是不同的。

(1)参数个数可变的子程序参数传递规则对于参数个数可变的子程序,当参数不超过4个时,可以使用寄存器R0~R3 来传递参数;当参数超过4个时,还可以使用数据栈来传递参数。

在参数传递时,将所有参数看作是存放在连续的内存字单元中的字数据。

然后,依次将各字数据传送到寄存器R0、R1、R2、R3 中,如果参数多于4个,将剩余的字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。

按照上面的规则,一个浮点数参数可以通过寄存器传递,也可以通过数据栈传递,也可能一半通过寄存器传递,另一半通过数据栈传递。

(2)参数个数固定的子程序参数传递规则对于参数个数固定的子程序,参数传递与参数个数可变的子程序参数传递规则不同。

如果系统包含浮点运算的硬件部件,浮点参数将按照下面的规则传递:·各个浮点参数按顺序处理。

·为每个浮点参数分配F P 寄存器。

·分配的方法是,满足该浮点参数需要的且编号最小的一组连续的FP 寄存器。

第一个整数参数,通过寄存器R0~R3 来传递。

其他参数通过数据栈传递。

(3)子程序结果返回规则子程序中结果返回的规则如下:·结果为一个32 位的整数时,可以通过寄存器R0 返回。

·结果为一个64 位整数时,可以通过寄存器R0 和R l 返回,依次类推。

·结果为一个浮点数时,可以通过浮点运算部件的寄存器f0、d0 或者s0 来返回。

·结果为复合型的浮点数(如复数)时,可以通过寄存器f0~fN 或者d0~dN 来返回。

·对于位数更多的结果,需要通过内存来传递。

4.C 语言函数和A RM 汇编语言函数间相互调用高级语言函数与汇编语言函数的混合调用也要遵循A TPCS 规则,保证程序调用时参数的正确传递。

在汇编程序中使用EXPORT 伪指令声明本子程序,使其它程序可以调用此子程序,而在C语言程序中使用ex tern 关键字声明外部函数(声明要调用的汇编子程序),即可调用此汇编子程序。

下面给出两个例子来介绍函数相互调用。

例 C 函数中调用汇编示例中汇编子程序strcopy 使用两个参数,一个表示目标字符串地址,一个表示源字符串的地址,参数分别存放R0,R1 寄存器中。

#include <stdio.h>extern void strcopy(char*d,const char*s) //声明外部函数。

即要调用的汇编子程序int mian (void){const char *srcstr= "First string-source";//定义字符串常量char dstsrt[] = "Second string-destination";//定义字符串变量printf( "Before copying:/n" );printf ( "'%s' \n `%s/n," srcstr,dststr) ;//显示源字符串和目标字符串的内容strcopy(dststr,srcstr) ;//调用汇编子程序,R0=dststr,R1=srcstrprintf( "After copying:\n" )printf ( "' %s' \n '%s\n," srcstr,dststr) ;//显示s trcopy 复制字符串结果return(0);}被调用汇编子程序:AREA SCopy,CODE,READONL YEXPORT strcopy ;声明s trcopy,以便外部程序引用strcopy;R0 为目标字符串的地址;R1 为源字符串的地址LDRB R2,[R1],#1 ;读取字节数据,源地址加lSTRB R2,[R0],#1 ;保存读取的1字节数据,目标地址加1CMP r2,#0 ;判断字符串是否复制完BNE strcopy ;没有复制完毕,继续循环MOV pc,1r ;返回END例汇编程序调用C程序汇编程序的设置要遵循A TPCS 规则,保证程序调用时参数的正确传递。

在汇编程序中使用I MPORT 伪指令声明将要调用的C程序函数。

在调用C程序时,要正确设置入口参数,然后使用B L 调用。

示例程序中使用了5个参数,分别使用寄存器R0 存储第1个参数,R1 存储第2个数,R2 存储第3个参数,R3 存储第4个参数,第5个参数利用堆栈传送。

由于利用了堆栈传递参数,在程序调用结果后要调整堆栈指针。

汇编调用C程序的汇编程序/*函数s um ()返回5个整数的和*/int sum (int a,lit b,int c,int d,int e){return(a+b+c+d+e);//返回5个变量的和}EXPORT CALLSUMAREA Example,CODE,READONLYIMPORT sum ;声明外部标号s um5,即C函数s um5() CALLSUM STMFD SP!{LR} ;LR 寄存器堆栈ADD R1,R0,R0 ;设置s um 函数入口参数,R0 为参数aADD R2,R1,R0 ;R1 为参数b,R2 为参数cADD R3,R1,R2,STR R3,[SP,#-4]! ;参数e要通过堆栈传递ADD R3,R1,R1 ;R3 为参数dBL sum ;调用s um(),结果保存在R0ADD SP,SP#4 ;修正S P 指针LDMFD SP,PC ;子程序返回END5、实验相关寄存器GPBCON――端口配置寄存器GPBDAT――端口数据寄存器GPBUP――端口上拉电阻使能寄存器6、实验电路图7、实验程序实现7.1利用C语言实现跑马灯程序/**** led_asm_c.c ****//*C 语言函数*//* 定义端口寄存器 */#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data#define rGPBUP (*(volatile unsigned *)0x56000018) //Pull-up controlB/* 延迟程序 */extern void delay(int times);/* 主程序 */void xmain(void){rGPBCON= (rGPBCON & ~(0xff<<10)) | (0x55<<10);//GPB5-8 setoutputrGPBUP = (rGPBUP & ~(0xf<<5)) | (0xf<<5); //disable GPB pullupwhile(1){rGPBDAT=(rGPBDAT|(0xf<<5))& (~(0x1<<7));//GPB7 output 0 delay(0x5000000);//调用汇编语言编写的延时程序rGPBDAT=(rGPBDAT|(0xf<<5))& (~(0x1<<8));//GPB8 output 0delay(0x5000000);//调用汇编语言编写的延时程序0rGPBDAT= rGPBDAT & ~(0x3<<7);//GPB7-8 output 0delay(0x5000000);//调用汇编语言编写的延时程序rGPBDAT= rGPBDAT|(0x3<<7);//GPB7-8 output 1delay(0x5000000);//调用汇编语言编写的延时程序}}7.2 ARM汇编指令编写的延时程序/**** delay.s ****/EXPORT delayAREA DELAY,CODE,READONLY ;该伪指令定义了一个代码段,段名为Init,属性只读;下面是延迟子程序delaysub r0,r0,#1 ;r0=r0-1cmp r0,#0x0 ;将r0 的值与0 相比较bne delay ;比较的结果不为0(r0 不为0),继续调用delay,否则执行下一条语句mov pc,lr ;返回END ;程序结束符8、实验步骤1. 连接好实验环境,将仿真器的一端通过并口连接到P C 机,将仿真器的另一端通过J TAG线连接到2440 实验箱的J TAG 接口。

相关文档
最新文档