单片机实验2【完整】代码

上传人:mg****85 文档编号:34140111 上传时间:2018-02-21 格式:DOC 页数:10 大小:273KB
返回 下载 相关 举报
单片机实验2【完整】代码_第1页
第1页 / 共10页
单片机实验2【完整】代码_第2页
第2页 / 共10页
单片机实验2【完整】代码_第3页
第3页 / 共10页
单片机实验2【完整】代码_第4页
第4页 / 共10页
单片机实验2【完整】代码_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《单片机实验2【完整】代码》由会员分享,可在线阅读,更多相关《单片机实验2【完整】代码(10页珍藏版)》请在金锄头文库上搜索。

1、电子系统综合设计报告学 号 201009120229 姓 名 李文海 年级专业 2010 级电子信息工程(二) 指导教师 刘怀强 学 院 理学院 走马灯实验论文-嵌入式系统技术1、实验目的1、学会DP-51PRO实验仪监控程序下载、动态调试等联机调试功能的使用;2、理解和学会单片机并口的作为通用I/O的使用;3、理解和学会单片机外部中断的使用;4、了解单片机定时器/计数器的应用。2、 实 验 设 备z PC 机、ARM 仿真器、2 440 实 验 箱 、 串口线。3、 实 验 内 容z 熟悉 ARM 开 发环境的建立。z 使用 ARM 汇 编和 C 语言设置 GPIO 口 的相应寄存器。z 编

2、写跑马灯程序。5、实验原理走马灯实验是一个硬件实验,因此要求使用 DP-51PRO 单片机综合仿真实验仪进行硬件仿真,首先要求先进行软件仿真,排除软件语法错误,保证关键程序段的正确。然后连接仿真仪,下载监控程序,进行主机与实验箱联机仿真。为了使单独编译的 C语言程序和汇编程序之间能够相互调用, 必须为子程序间的调用规 定 一 定 的 规 则 。 ATPCS , 即 ARM , Thumb 过 程 调 用 标 准 (ARM/Thumb Procedure Call Standard), 是 ARM程序 和 Thumb程 序中子程序调用的基本规则, 它规定了一些子程序间调用 的基本规则, 如子程序

3、调用过程中的寄存器的使用规则, 堆栈的使用规则, 参数的传递规则 等。下面结合实际介绍几种 ATPCS 规则 , 如果读者想了解更多的规则 , 可以查看相关的书籍。1 基 本 ATPCS基本 ATPCS 规定了在子程序调用时的一些基本规则,包括下面 3方面的内容:(1)各寄存器 的使用规则及其相应的名称。(2)数据栈的 使用规则。 (3)参数传递 的规则。相对于其它类型的 ATPCS, 满足基本 ATPCS的程序 的执行速度更快, 所占用的内存更少。 但是它不能提供以下的支持: ARM 程序和 Thumb程序相互调用, 数据以 及代码的位置无关的支持,子程序的可重入性,数据栈检查的支持。而派生

4、的其他几种特定的 ATPCS 就是在基本 ATPCS 的基础上再添加其他的规则而形成 的。其目的就是提供上述的功能。2 寄 存 器的 使 用 规则寄存器的使用必须满足下面的规则:(1) 子程序 间通过寄存器 R0R3来 传递参数。 这时, 寄存器 R0R3可以记 作 A0A3。 被调用的子程序在返回前无需恢复寄存器 R0R3的内容。(2) 在子程 序中,使用寄存器 R4 Rll 来保存局 部变量。这时,寄存器 R4R11 可以 记作 V1V8。 如果在子程序中使用到了寄存器 V1V8 中的某 些寄存器, 子程序进入时必须 保存这些寄存器的值, 在返回前必须恢复这些寄存器的值; 对于子程序中没有

5、用到的寄存器 则不必进行这些操作。在 Thumb程 序中,通常只能使用寄存器 R4R7 来保存局部变量。(3) 寄存器 R12用作子程 序间 scratch寄存器, 记作 IP。 在子 程序间的连接代码段中 常有这种使用规则。(4) 寄存器 R13用作数据 栈指针, 记作 SP。 在子 程序中寄存器 R13不能 用作其他用途。寄存器 SP在进入子程序时的值和退出子程序时的值必须相等。(5) 寄存器 R14 称为连接寄存器 , 记作 LR。 它用于保存子程序的返回地址。 如果在子程序 中 保 存了返 回 地 址,寄存器 R14 则可以用作其他 用 途。(6) 寄存器R 15 是程序 计数器,记作

6、 PC。它不能用作其他用途。3.参 数 传 递 规则 根据参 数个 数是否 固定 可以将 子程 序分为 参数 个数固 定的(nonvariadic)子 程序 和参 数个数可变的(variadic)子 程序。这两种子程序的参数传递规则是不同的。(1 )参数个数可变的子程序参数传递规则对于参数个数可变的子程序,当参数不超过 4 个时,可以使用寄存器 R0R3 来传递参 数;当参数超过 4个时,还可以使用数据栈来传递参数。在参数传递时, 将所有参数看作是存放在连续的内存字单元中的字数据。 然后, 依 次将 各字数据传送到寄存器 R0、R1、 R2、 R3 中,如果 参数多于 4 个,将剩余的字数据传

7、送到数 据栈中, 入栈的顺序与参数顺序相反, 即最后一个字数据先入栈。 按照上面的规则,一个浮 点数参数可以通过寄存器传递, 也可以通过数据栈传递, 也可能一半通过寄存器传递, 另一 半通过数据栈传递。(2)参数个数 固定的子程序参数传递规则 对于参数个数固定的子程序,参数传递与参数个数可变的子程序参数传递规则不同。如果系统包含浮点运算的硬件部件,浮点参数将按照下面的规则传递: 各个浮 点参数按顺序处理。 为每个 浮点参数分配 FP寄存器。 分配的 方法是,满足该浮点参数需要的且编号最小的一组连续的 FP 寄存器。第一 个整数参数,通过寄存器 R0R3来 传递。其他参数通过数据栈传递。(3)子

8、程序结 果返回规则 子程序中结果返回的规则如下: 结果为 一个 32位的整数时,可以通过寄存器 R0返回。 结果为 一个 64位整数时,可以通过寄存器 R0和 Rl返回 ,依次类推。 结果为 一个浮点数时,可以通过浮点运算部件的寄存器 f0、d0或 者 s0来返回。 结果为 复合型的浮点数(如复数)时,可以通过寄存器 f0fN或者 d0dN来返回 。 对于位 数更多的结果,需要通过内存来传递。4.C 语 言 函 数和 ARM 汇 编 语 言 函数间 相 互 调用 高级语言函数与汇编语言函数的混合调用也要遵循 ATPCS 规则, 保证程序调用时参数的正确传递。在汇编程序中使用 EXPORT 伪指

9、令声明本子程序,使其它程序可以调用此子程 序, 而在 C 语言程序中使用e x tern 关键字声明外部函数( 声 明要调用的汇编子程序) , 即可调 用此汇编子程序。下面给出两个例子来介绍函数相互调用。6、实验步骤1 编写一段程序,用 P1口作为控制端口,使D1区的LED 轮流点亮。原理图如下图。图3-1 走马灯实验原理图仿照实验一的过程,编写程序、汇编、连接、软件仿真,基本达到功能要求。ORG 0000HLJMP MAINORG 0100HMAIN: MOV A,#0FEH ;准备点亮第一只发光管NEXT: MOV P1,AACALL DELAYRL A ; 准备点亮下一只发光管SJMP

10、NEXT; 延时子程序DELAY: MOV R2,#5DELAY2: MOV R3,#100DELAY3: MOV R4,#100DJNZ R4,$DJNZ R3,DELAY3DJNZ R2,DELAY2RETEND调试成功以后,将程序中的ORG部分的偏移地址再加上8000H,重新编译。 按照原理图,将A1区P1口的引线分别连接到D1区J52上。下载监控程序到实验仪上。短接A1区的JP15 ,连接实验仪串口和主机的串口,将MOD-SW1拨到LOAD一边,FLASH-E和SRAM-E 断开,运行主机上DPFLASH,下载MON51.HEX到实验仪上。在Keil系统上,完成程序的动态调试。在主菜单

11、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 口作为控制

12、端口,使 D1 区的LED 轮流点亮。用外部中断0控制走马灯的 暂停/继续。(此实验也可脱机运行)ORG 0000HLJMP MAINORG 0003LJMP ZEX0ORG 0100HMAIN: MOV SP,#60HSETB IT0SETB EX0SETB EAMOV A,#0FEH ;准备点亮第一只发光管MOV R5,#00HNEXT: CJNE R5,#00H,NEXT ;00表示继续,FF表示暂停MOV P1,AACALL DELAYRL A ;准备点亮下一只发光管SJMP NEXT; 延时子程序DELAY: MOV R2,#5DELAY2: MOV R3,#100DELAY3: M

13、OV R4,#100DJNZ R4,$DJNZ R3,DELAY3DJNZ R2,DELAY2RET;外部中断0服务子程序ZEX0: PUSH ACCMOV A,R5XRL A,#0FFHMOV R5,APOP ACCRETIEND将A1区P1口的引线分别连接到D1区J52上,将D1区的J53的KEY1连接到A1区的外部中断0 上。 观察实验结果,解释如何实现走马灯的暂停和继续。 比较电平触发和边沿触发时走马灯控制的难易程度。3编写一段程序,用P1 口作为控制端口,使 D1 区的LED 轮流点亮。用定时/ 计数器0 控制走马灯的闪烁速度。(此实验也可脱机运行)ORG 0000HLJMP MAI

14、NORG 000BHLJMP ZIT0ORG 0100HMAIN: MOV SP,#60HMOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV R6,#20 /循环次数MOV R7,#0FEH ;准备点亮第一只发光管SETB ET0SETB EASETB TR0SJMP $;定时中断0服务子程序ZIT0: DJNZ R6,ZRET /为零时 , 跳转 !MOV A,R7MOV P1,ARL AMOV R7,AMOV R6,#20 /循环次数ZRET: MOV TH0,#3CHMOV TL0,#0B0HRETIEND 修改R6=0或1 时,观察走马灯的速度快慢。 Z

15、RET:处没有重置初值时的走马灯的速度与 ZRET处有重置初值时的走马灯的速度的比较。 R6=50时,改变T0的初值,设为最大、最小时,比较走马灯的速度。 去掉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 (*(v

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号