已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子系统综合设计报告学 号 201009120229 姓 名 李文海 年级专业 2010级电子信息工程(二) 指导教师 刘怀强 学 院 理学院 走马灯实验论文-嵌入式系统技术1、 实验目的1、学会DP-51PRO实验仪监控程序下载、动态调试等联机调试功能的使用;2、理解和学会单片机并口的作为通用I/O的使用;3、理解和学会单片机外部中断的使用;4、了解单片机定时器/计数器的应用。2、实验设备zPC 机、ARM 仿真器、2440 实验箱、串口线。3、实验内容z熟悉 ARM 开发环境的建立。z使用 ARM 汇编和 C 语言设置 GPIO 口的相应寄存器。z编写跑马灯程序。5、实验原理 走马灯实验是一个硬件实验,因此要求使用DP-51PRO 单片机综合仿真实验仪进行硬件仿真,首先要求先进行软件仿真,排除软件语法错误,保证关键程序段的正确。然后连接仿真仪,下载监控程序,进行主机与实验箱联机仿真。为了使单独编译的 C 语言程序和汇编程序之间能够相互调用,必须为子程序间的调用规 定一定的规则。ATPCS ,即 ARM , Thumb 过程调用标准(ARM/Thumb Procedure Call Standard),是 ARM 程序和 Thumb 程序中子程序调用的基本规则,它规定了一些子程序间调用 的基本规则,如子程序调用过程中的寄存器的使用规则,堆栈的使用规则,参数的传递规则 等。下面结合实际介绍几种 ATPCS 规则,如果读者想了解更多的规则,可以查看相关的书籍。1 基本 ATPCS基本 ATPCS 规定了在子程序调用时的一些基本规则,包括下面 3 方面的内容: (1)各寄存器的使用规则及其相应的名称。(2)数据栈的使用规则。 (3)参数传递的规则。相对于其它类型的 ATPCS,满足基本 ATPCS 的程序的执行速度更快,所占用的内存更少。 但是它不能提供以下的支持: ARM 程序和 Thumb 程序相互调用, 数据以及代码的位置无关的支持,子程序的可重入性,数据栈检查的支持。而派生的其他几种特定的 ATPCS 就是在基本 ATPCS 的基础上再添加其他的规则而形成 的。其目的就是提供上述的功能。2 寄存器的使用规则寄存器的使用必须满足下面的规则:(1)子程序间通过寄存器 R0R3 来传递参数。这时,寄存器 R0R3 可以记作 A0A3。 被调用的子程序在返回前无需恢复寄存器 R0R3 的内容。(2)在子程序中,使用寄存器 R4Rll 来保存局部变量。这时,寄存器 R4R11 可以 记作 V1V8。如果在子程序中使用到了寄存器 V1V8 中的某些寄存器,子程序进入时必须 保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器 则不必进行这些操作。在 Thumb 程序中,通常只能使用寄存器 R4R7 来保存局部变量。(3)寄存器 R12 用作子程序间 scratch 寄存器,记作 IP。在子程序间的连接代码段中 常有这种使用规则。(4) 寄存器 R13 用作数据栈指针,记作 SP。在子程序中寄存器 R13 不能用作其他用途。 寄存器 SP 在进入子程序时的值和退出子程序时的值必须相等。(5) 寄存器 R14 称为连接寄存器,记作 LR。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器 R14 则可以用作其他用途。(6)寄存器 R15 是程序计数器,记作 PC。它不能用作其他用途。3.参数传递规则 根据参数个数是否固定可以将子程序分为参数个数固定的(nonvariadic)子程序和参数个数可变的(variadic)子程序。这两种子程序的参数传递规则是不同的。(1)参数个数可变的子程序参数传递规则对于参数个数可变的子程序,当参数不超过 4 个时,可以使用寄存器 R0R3 来传递参 数;当参数超过 4 个时,还可以使用数据栈来传递参数。在参数传递时,将所有参数看作是存放在连续的内存字单元中的字数据。然后,依次将 各字数据传送到寄存器 R0、R1、R2、R3 中,如果参数多于 4 个,将剩余的字数据传送到数 据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。按照上面的规则,一个浮 点数参数可以通过寄存器传递,也可以通过数据栈传递,也可能一半通过寄存器传递,另一 半通过数据栈传递。(2)参数个数固定的子程序参数传递规则 对于参数个数固定的子程序,参数传递与参数个数可变的子程序参数传递规则不同。如果系统包含浮点运算的硬件部件,浮点参数将按照下面的规则传递:各个浮点参数按顺序处理。为每个浮点参数分配 FP 寄存器。分配的方法是,满足该浮点参数需要的且编号最小的一组连续的 FP 寄存器。第一 个整数参数,通过寄存器 R0R3 来传递。其他参数通过数据栈传递。(3)子程序结果返回规则 子程序中结果返回的规则如下:结果为一个 32 位的整数时,可以通过寄存器 R0 返回。结果为一个 64 位整数时,可以通过寄存器 R0 和 Rl 返回,依次类推。结果为一个浮点数时,可以通过浮点运算部件的寄存器 f0、d0 或者 s0 来返回。结果为复合型的浮点数(如复数)时,可以通过寄存器 f0fN 或者 d0dN 来返回。对于位数更多的结果,需要通过内存来传递。4.C 语言函数和 ARM 汇编语言函数间相互调用 高级语言函数与汇编语言函数的混合调用也要遵循 ATPCS 规则,保证程序调用时参数的正确传递。在汇编程序中使用 EXPORT 伪指令声明本子程序,使其它程序可以调用此子程 序,而在 C 语言程序中使用ex tern 关键字声明外部函数(声明要调用的汇编子程序),即可调 用此汇编子程序。下面给出两个例子来介绍函数相互调用。6、实验步骤 1 编写一段程序,用P1口作为控制端口,使D1区的LED 轮流点亮。原理图如下图。图3-1 走马灯实验原理图仿照实验一的过程,编写程序、汇编、连接、软件仿真,基本达到功能要求。ORG0000HLJMPMAINORG0100HMAIN:MOVA,#0FEH;准备点亮第一只发光管NEXT:MOVP1,AACALLDELAYRLA; 准备点亮下一只发光管SJMPNEXT; 延时子程序DELAY:MOVR2,#5DELAY2:MOVR3,#100DELAY3:MOVR4,#100DJNZR4,$DJNZR3,DELAY3DJNZR2,DELAY2RETEND调试成功以后,将程序中的ORG部分的偏移地址再加上8000H,重新编译。 按照原理图,将A1区P1口的引线分别连接到D1区J52上。下载监控程序到实验仪上。短接A1区的JP15,连接实验仪串口和主机的串口,将MOD-SW1拨到LOAD一边,FLASH-E和SRAM-E断开,运行主机上DPFLASH,下载MON51.HEX到实验仪上。在Keil系统上,完成程序的动态调试。在主菜单DEBUG下的Options for Target Target 1,点击Debug,选择Use Keil Monitor-51 Driver,并且设置其他参数,将MOD-SW1拨到RUN一边,按复位键,再按DEBUG下的全速运行命令运行监控程序后,就可以进行动态调试了。观察和记录各个寄存器内容的变化,端口P1的内容变化,以及对应的LED的变化。全速运行时,观察LED的变化和闪烁速度。7、实验相关寄存器GPBCON端口配置寄存器GPBDAT端口数据寄存器GPBUP端口上拉电阻使能寄存器8、实验电路图2编写一段程序,用P1 口作为控制端口,使D1 区的LED 轮流点亮。用外部中断0控制走马灯的暂停/继续。(此实验也可脱机运行)ORG0000HLJMPMAINORG0003LJMP ZEX0ORG0100HMAIN:MOVSP,#60HSETBIT0SETBEX0SETB EAMOVA,#0FEH;准备点亮第一只发光管MOVR5,#00HNEXT:CJNER5,#00H,NEXT;00表示继续,FF表示暂停MOVP1,AACALLDELAYRLA;准备点亮下一只发光管SJMPNEXT; 延时子程序DELAY:MOVR2,#5DELAY2:MOVR3,#100DELAY3:MOVR4,#100DJNZR4,$DJNZR3,DELAY3DJNZR2,DELAY2RET;外部中断0服务子程序ZEX0:PUSH ACCMOVA,R5XRLA,#0FFHMOVR5,APOPACCRETIEND将A1区P1口的引线分别连接到D1区J52上,将D1区的J53的KEY1连接到A1区的外部中断0上。u 观察实验结果,解释如何实现走马灯的暂停和继续。u 比较电平触发和边沿触发时走马灯控制的难易程度。3编写一段程序,用P1 口作为控制端口,使D1 区的LED 轮流点亮。用定时/计数器0控制走马灯的闪烁速度。(此实验也可脱机运行)ORG0000HLJMPMAINORG000BHLJMP ZIT0ORG0100HMAIN:MOVSP,#60HMOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HMOVR6,#20 /循环次数MOVR7,#0FEH;准备点亮第一只发光管SETBET0SETB EASETB TR0SJMP$;定时中断0服务子程序ZIT0:DJNZR6,ZRET /为零时 , 跳转 !MOVA,R7MOVP1,ARLAMOVR7,AMOVR6,#20 /循环次数ZRET:MOVTH0,#3CHMOVTL0,#0B0HRETIENDu 修改R6=0或1时,观察走马灯的速度快慢。u ZRET:处没有重置初值时的走马灯的速度与 ZRET处有重置初值时的走马灯的速度的比较。u R6=50时,改变T0的初值,设为最大、最小时,比较走马灯的速度。u 去掉R6的软件辅助延时,是否可以,速度怎样?9、实验记录第一个程序走马灯逐步地闪亮第二个程序当按下D1区k1时, 走马灯暂停, 再按下时就又开始了 !第三个程序把 R6值改大了 , 那间隔时间就增大 ! 走马灯越来越慢!10、实验结果分析程序运行后,LED 灯 D3、D4不断闪烁,跑马灯程序运行。11、实训分析与总结: 1、简述LED灯点亮的原理 2、观察并描述实验现象,尝试修改参数,使得LED灯变化的更快或者更慢。3、实验的体会。实验现象: 1号灯亮 2号灯亮 1、2号灯亮 3号灯亮 1、2、3号灯亮 4号灯亮 4个灯全亮 4个灯全灭 4号灯亮 3号灯亮 2号灯亮 1号灯亮 1、2号灯亮 1、2、3号灯亮 4个灯全亮 4个灯全灭 4号灯亮 3、4号灯亮 2、3、4号灯亮 4个灯全亮 全灭 1、2号灯亮 1、2、3号灯亮 全亮 全灭。12、实验程序:/* 定义端口寄存器 */#define rGPBCON (*(volatile unsigned *)0x56000010) /Port B control#define rGPBDAT (*(volatile unsigned *)0x56000014) /Port B data#define rGPBUP (*(volatile unsigned *)0x56000018) /Pull-up control B/* 延迟程序 */extern void delay(int times);/* 主程序 */void xmain(void) rGPBCON= (rGPBCON & (0xff10) | (0x5510);/GPB5-8 set output rGPBUP = (rGPBUP & (0xf5) | (0xf5); /disable GPB pull up while(1) rGPBDAT=(rGPBDAT|(0xf5)& (0x15);/GPB7 output 0 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT=(rGPBDAT|(0xf5)& (0x16);/GPB7 output 0 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT= rGPBDAT & (0x35);/1.2两个个灯亮 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT=(rGPBDAT|(0xf5)& (0x17);/GPB7 output 0 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT= rGPBDAT & (0x75);/1.2.3 亮 delay(0x2000000);/调用汇编语言编写的延时程序 rGPBDAT=(rGPBDAT|(0xf5)& (0x18);/GPB8 output 0 delay(0x1000000);/调用汇编语言编写的延时程序0 rGPBDAT= rGPBDAT & (0xf5);/4灯全亮 delay(0x2000000);/调用汇编语言编写的延时程序 rGPBDAT= rGPBDAT|(0xf5);/全灭 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT=(rGPBDAT|(0xf5)& (0x18);/GPB8 output 0 delay(0x1000000);/调用汇编语言编写的延时程序0 rGPBDAT=(rGPBDAT|(0xf5)& (0x17);/GPB7 output 0 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT=(rGPBDAT|(0xf5)& (0x16);/GPB7 output 0 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT=(rGPBDAT|(0xf5)& (0x15);/GPB7 output 0 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT= rGPBDAT & (0x35);/1.2两个个灯亮 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT= rGPBDAT & (0x75);/1.2.3 亮 delay(0x1000000);/调用汇编语言编写的延时程序 rGPBDAT= rGPBDAT & (0xf5);/4灯全亮 delay(0x1000000);/调用汇编语言编写的延时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国新能源新能源电池回收行业市场供需分析及投资评估规划分析研究报告
- 2026中国物流快递行业发展趋势评估与投资需求规划研究报告
- 2026全球工业自动化控制设备市场细分分析及竞争格局发展趋势报告
- 2026汽车电子产业市场发展趋势及产业升级与投资发展分析报告
- 2026汽车行业市场竞争格局及未来发展趋势研究
- 2026年初中化学期中测试卷冲刺押题
- 2026尼日利亚移动通信行业市场供需分析及投资评估规划分析研究报告
- 外墙保温工程监理实施细则
- 2026中国G基站建设行业市场发展趋势与前景展望战略研究报告
- 2026日本工业级硅烷气体生产技术基准测试-产能投放结构需求调研及投资规划
- 竖井风管安装与调试方案
- 华为芯片封装工程师高频常见面试题包含详细解答+避坑指南
- 国家安全法专题讲座课件
- 2025 年高职播音与主持艺术(新媒体主持)期末考核试卷
- 市场反恐应急预案
- 新生儿动静脉采血课件
- 山东东营三力测试题库及答案
- T/CCS 025-2023煤矿防爆锂电池车辆动力电源充电安全技术要求
- 《农业法规普及讲座》课件
- 北京市科技计划项目(课题)结题经费审计工作底稿-参考文本
- 中医技术操作并发症的预防及处理
评论
0/150
提交评论