单片机原理及其应用实验报告
单片机原理及其应用单片机原理及其应用 实验指导书实验指导书 南通大学电气工程学院南通大学电气工程学院 自动化教研室自动化教研室 2011 年年 3 月月 I 前前 言言 单片机目前已广泛应用在智能仪表、工业控制、家用电器等各个领域,成为现代电子系统的一个极其重要的组成部分,对于电类专业学生来说,掌握单片机知识,具备基本应用技能,才能符合当前社会对专业人才的要求。 单片机是一门应用性极强的课程, 学生在掌握基本理论知识的基础上,更要通过实验训练,提高其调试动手能力,学会解决具体问题的思路和手段,具备初步的系统设计和调试能力。 因此,为了更好地做好单片机课程的软硬件实验,特编写本实验指导书,书中叙述了各实验的目的、要求,对于设计性实验,给出了列出了接线图、程序结构框图和清单。学生按要求完成本实验指导书中的实验,可基本掌握 MCS-51 单片机的结构原理、接口技术以及程序设计技巧。另外: 一、所有实验都是相互独立的,次序上也没有固定的先后关系,在使用本书进行教学时,教师可根据教学要求,选择相应实验。 二、对同一问题的解决方法往往不是唯一的,欢迎各位指导教师在使用本实验指导书的过程中提出更完善的实验方案, 指出书中的错误和不足,并希望大家反馈给我们,以便及时修改。 II 目目 录录 第一章第一章 集成开发环境简介集成开发环境简介 1 第第二二章章 演示程序演示程序 9 第第三三章章 实验项目实验项目 15 实验一实验一 仿真环境熟悉, 清零、 拆字程序设计仿真环境熟悉, 清零、 拆字程序设计 15 实验二实验二 内部、 外部内部、 外部 RAM数据传送程序设计数据传送程序设计 17 实验三实验三 单片机单片机 I/O 口实验口实验 18 实验四实验四 A/D、D/A转换实验转换实验 20 实验五实验五 并行接口并行接口扩展实验扩展实验 24 1 第一章第一章 集成开发环境简介集成开发环境简介 Super ICES-51 80C51 单片机实验仪使用当前流行的 Keil C51 开发软件,采用 uVision2 集成开发环境。 1.1 Keil C51 简介简介 Keil C51 软件是德国 Keil 公司开发的功能完善的 C51 开发软件,近年来在国内得到了迅速普及。Keil 包括以下几个部分:uVision2 IDE、C51 编译器、A51汇编器、LIB 库管理器、BL51 连接器/定位器、uVision 硬件调试器、RTX51 实时多任务操作系统。 Keil 软件的最新版本是 7.50。 用户可以向 Keil公司或国内代理商购买正版软件或索取 Demo 版本,也可以直接到 Keil 公司网站(http:/www.keil.com)下载。 1.2 uVision2 集成开发环境集成开发环境 uVision2 集成开发环境如图 1-1 所示,有编辑、项目、输出等 3 个大窗口和 File、Edit、View、Project、Debug、Periherals、Tools、SVCS、Windows、Help等下拉菜单。 变量观察区 存储器观察输出信息窗编辑区 工程项目窗口 项目名称栏 工具菜单栏 快捷图标 图 1-1 uVision2 集成开发环境 2 1.2.1 创建、保存工程文件创建、保存工程文件 在 uVision2 环境下,使用工程来管理各个文件。为了开始新的工程,选择“Project/New Projiect”选项,出现如图 1-2 所示界面。 然后选择此新工程要保存的路径,键入项目名称并保存,项目名称将会出现在集成环境的左上端,名称后缀为“.uv2” ,如图 1-3 所示。 注意项目名称最好不要超过 8 个字符、尽量不采用中文,与软件编程时变量的命名习惯一致。 图 1-2 创建新工程 图 1-3 保存新工程 3 1.2.2 MCU 选择选择 接着系统出现“Select Device for Target”界面,要求选择目标硬件系统的MCU,如图 1-4 所示。选择要开发的目标硬件系统的 MCU,点击“确定”即可。 对于 Super ICES-51 实验仪,应选择 Atlmel的 AT89C51。 1.2.3 添加源文件添加源文件 如图 1-5 所示,在“Target 1/Source Group 1”上点击右键,选择“/Add Files to Group Source Group 1” 后,出现如图 1-6 所示界面,添加所要的源程序。 源程序包括“*.C” 、 “*.ASM” 、 “*.LIB” 、 “*.A51”等。 图 1-4 MCU 选择 4 图 1-6 选择待添加的源文件 图 1-5 添加源文件 5 1.2.4 目标硬件系统配置目标硬件系统配置 源程序添加完毕后,进行“Option for Target”的设定。在菜单栏中,选择“Project/Option for Target” ,出现如图 1-7 所示界面。 点击 Target 选项卡, 输入目标硬件系统的晶振频率, 本实验仪为 11.0592 MHz; 点击 Output 选项卡,选中 Crest Hex File 选项,在编译时系统将会自动生成目标代码文件*.HEX; 点击 Debug选项卡,如图 1-8 所示,选择仿真模式等。 图 1-7 目标硬件系统配置 6 uVision2 的仿真模式分为 Use Simulator(软件仿真)和 Use(硬件仿真)2种。 其中 Use Simulator 选项是将 uVision2 调试器设置成软件模拟仿真模式,在此模式下不需要实际的目标硬件就可以模拟 8051 单片机的很多功能。Use Simulator 中的“Load Application at Start”是装入程序的复选框, “Go till main()”是表示从应用程序的主函数开始执行的复选框。除非有特殊情况,一般都同时使用这两复选框。 Use 选项有高级的 GDI 驱动(ICES 仿真器)和 Keil Monitor-51 驱动。运用此功能可以把 Keil C51 嵌入到自己的系统中去,从而实现在目标硬件上调试程序。实验仪选择“use keil Monitor-51 Driver” 。 选择 “load Application at start” , 在启动时直接装载程序, 选择 “Go till main” ,C51 开发时,装载后直接运行到 main函数。 7 硬件仿真模式下还需配置波特率等,点击“Settings”选项,如图 1-9 所示。 选择“serial interrupt” ,在前面打勾,否则装载过程中,仿真器会发出“嘀”一声长声报警,仿真结果将可能不正确。 选择正确的串口号,波特率最高为 38400; 建议只选 cache code。 1.2.5 程序编译、程序编译、连接连接与下载与下载 使用“Project”下拉菜单中的编译命令, “Build Target” ()只编译和连接在项目窗口中的修改过的程序; “Rebuild all Target File” ()编译和连接项目里所有的源程序文件。 图 1-9 串口等配置 8 编译等无误后,使用菜单栏中的“Debug”下“/start/stop Debug Session”或使用快捷方式()进入硬件调试系统,如图 1-10 所示。 “Debug”下“Step”或用快捷方式()进行单步(进子程序)调试; “Debug”下“Step Over”或用快捷方式()进行单步(不进子程序)调试; “Debug”下“Run to cursor line”或用快捷方式()进行运行到当前光标处调试; “Debug” 下 “Go” 或用快捷方式()进行全速运行, 直到下一个有效断点; “Debug”下“/start/stop Debug Session”进入、退出硬件调试系统环境。 另外, “Debug”下还有“stop running” 、 “rst”等操作。 图 1-10 硬件调试系统界面 9 第第二二章章 演示程序演示程序 为了更好地熟悉uVision2集成开发环境仿真开发系统的应用,本指导书提供了一个完整的程序编译、调试例子,详细说明集成环境下的各种操作。 程序内容:程序内容:将110十个数相加,并把其和放入内部 RAM 30H 单元。 这个问题有好几种算法,如果单纯从算法上来说,下面所列算法并不是最优的,因为其目的在于让你熟悉仿真系统的各种操作。 算法介绍:算法介绍: 1加数、被加数、和最终单元(SUM)首先设置初始值,分别为1、0、0,加法次数单元(R2)设为10; 2每次加法所得中间结果存放在被加数单元中(累加器ACC),同时将加数单元增1; 3做完一次加法后,加法次数单元减1,并判断是否已为0(即已做完10次加法),如果不为0,继续做下次加法,若为0,则将累加器内容赋值给和最终单元; 4做完后,程序原地循环。 算法流程图及源程序分别如下: 10 加数、被加数(和中 间结果) 、和最终结果单元、加法次数单 元初始化 被加数+加数,结果 放在被加数(和中间结果)单元 结果放入 和最终单元 已做完 10 次加法? N Y 加数增 1 堆 栈 初 始11 源源程序:程序: ;变量DATA_REG中的内容为加数(1-10); ;ACC中的内容为被加数,同时也是每一次加法后的和中间结果存放单元; ;做完10次加法后,再将ACC内容放入指定的和单元SUM中。 ;* DATA_REG EQU 31H ;定义加数单元 SUM EQU 30H ;定义和单元 ;= ORG 0000H ;复位后PC指针 LJMP MAIN ;- ORG 0100H ;从程序存储空间 0100H 单元放程序 MAIN: MOV SP, #70H ;堆栈指针从复位后的 07H 调整到 70H MOV DATA_REG, #1 ;加数单元初始值为1 MOV SUM, #00H ;和单元初始值为0 MOV R2, #10 ;加法循环次数为10 CLR A 被加数单元初始值为0 CLR C ;进位初始值为0 ADD_LOOP: ADDC A, DATA_REG ;被加数+加数,结果放入ACC INC DATA_REG ;加数增1 DJNZ R2, ADD_LOOP ;10次加法未做完,继续做 MOV SUM,A ;10次加法已做完,将和放入SUM单元 LJMP $ ;原地循环 ;* END 12 2.1 打开仿真环境打开仿真环境,新建一个工程文件,新建一个工程文件 按第一章介绍建立一个工程名为“test.uv2”的工程文件,选择目标硬件系统的 MCU 为 Atlmel的 AT89C51;目标硬件系统配置选择“Use Simulator” ,其余配置参考第一章介绍。 2.2 输入源程序输入源程序 单击菜单“File/New”,出现源程序编辑窗口,输入源程序,以“*.asm”保存,选择“/Add Files to Group Source Group 1” ,将此源程序添加到工程