1
《单片机系统及应用》
实验讲义
2011 年 10 月
2
前言
单片机又称微控制器,它是把中央处理器(CPU)、存储器、中断系统、定时
器/计数器、川行接口、并行接口等功能部件集成在一个芯片上的微型计算机。
其特点是功能强、价格低、体积小、易扩展、可靠性高、灵活等被广泛应用于航
空航天、军事、医疗、家电、工业控制、智能仪表等领域。
作为人才培养的高等学校,其计算机和电子信息类专业都开设了单片机方面
的课程。单片机是一门应用性很强的课程,需要通过大量的实验和实践,学生才
能进一步消化和理解课堂上讲授的单片机基本结构和基础理论,掌握单片机各功
能部件的工作原理及其各功能部件之间相互协调的工作关系,进而掌握这门技术。
编者根据多年从事单片机教学和工程实践的经验,遵从“循序渐进,理论联
系实际”的原则,从培养学生学习单片机的兴趣入手,先进行功能部件的原理性
单元实验,后进行系统性设计实验,以逐步提高学生的应用开发能力。
为此,我们开发了单片机系统主机板和单片机系统键盘、显示板,后续我们
还将开发 A/D、D/A 转换板,存储器扩充板等。
本实验讲义设定的实验的目的,使学生能充分理解单片机各功能部件的工作
原理,理解软件与硬件之间相辅相成的关系,掌握单片机应用系统的开发方法,
为后续嵌入式系统课程的学习打下良好的理论与实践基础。
本实验讲义具有如下特点:
1、依据三本学生形象化思维较好的特点,使用单元电路板实物进行实验,
调动学生学习的积极性;
2、先验证性实验,后设计性实验;
3、实验内容由简到繁,由易到难;
4、以设计性实验为主,验证性实验为辅;
5、以功能部件原理性单元实验为主,系统性实验为辅;
6、以软硬件结合的实验为主,单纯的语言性实验为辅。
3
实验一 MCS-51 单片机汇编语言编程练习
一. 实验目的
1. 熟悉单片机开发软件 Keil 系统的使用方法。
2. 理解单片机汇编语言指令的基本语法以及汇编语言程序设计的基本结构和编程方法。
3. 掌握单片机汇编语言顺序结构、分支结构和循环结构程序的设计方法。
4. 能够独立使用单片机汇编语言进行顺序结构、分支结构和循环结构程序的设计能力。
对实际应用问题能够抽象出数学模型,并通过编程来实现数学模型所要完成的功能。
5. 掌握顺序结构、分支结构和循环结构程序的流程图绘制方法。
二.预习与思考
1. 预习理论教材中“顺序结构”、“分支结构”和“循环结构”等相关内容,掌握它们
的实现方法。
2. 思考如何使用不同类型的单片机汇编语言指令,来完成分支、循环结构程序的设计,
并总结归纳出所有具备类似分支循环功能的汇编指令。
三. 实验原理
1. 单片机汇编语言的指令分类
全球生产单片机的芯片厂商有数百家,不同厂商生产的单片机芯片都有自己特定的汇编
语言指令系统对其进行支持,那么在众多不同类型的单片机汇编语言指令系统中,作为单片
机的初学者是不是要一一来学,是不是需要面面俱到呢?回答是不需要。因为,尽管单片机
芯片的生产厂商、芯片类型以及处理位数都不尽相同,但是所有的单片机芯片都有一个共同
的祖先,那就是 Intel 公司生产的 MCS-51 系列单片机芯片。因此,只要掌握好 MCS-51 系列
单片机的汇编语言指令,就可以举一反三、触类旁通,从而理解其他类型单片机芯片的汇编
语言指令系统。
MCS-51 系列单片机的汇编语言指令,一共有 111 条,按照指令实现的功能不同,将这 111
条指令分成了五大类即:数据传送类指令、算术运算类指令、逻辑运算类指令、控制转移类
指令以及位操作指令(也叫布尔变量操作指令)。
数据传送类指令的作用是将数据在单片机芯片内部或外部的不同部件间进行传送,它是
五大类指令当中最基础、最重要,也是指令条数最多的一类指令。
算术运算类指令是使单片机进行加、减、乘、除、加 1、减 1 等不同功能的算术运算。
逻辑运算类指令单片机进行与、或、非、异或、左移、右移等不同功能的逻辑运算。
控制转移类指令的作用是控制程序的执行顺序,即控制程序是否顺序执行,何时进行分
支,何时进行子程序的调用以及如何使程序不断循环执行等操作。
位操作类指令的作用是把二进制位由 1 变成 0 或者由 0 变成 1,另外还可以根据某些二
进制位的值进行程序的控制与转移,位操作类是单片机特有的一类指令。
本次实验的内容,主要就是针对这些指令进行重点的练习。为了方便记忆,根据这五类
指令的不同功能,将五大类指令编成了“顺口溜”,有助于初学者对五大类指令及功能的理
解和记忆,总结如下:
(1)数据传送指令:28 条,作用是“传来传去”。
(2)算术操作指令:24 条,作用是“算来算去”(加减乘除等算术运算)。
(3)逻辑操作指令:25 条,作用也是“算来算去”(与、或、非、移位等逻辑运算)。
4
(4)控制转移指令:17 条,作用是“跳来跳去”。
(5)位操作指令: 17 条,作用是“变来变去”。
2. 单片机汇编语言程序设计的基本结构
在进行单片机汇编语言的程序设计时,通常有 4 种应用程序结构,即顺序结构、分支结
构、循环结构以及主子调用结构。在具体程序设计的过程中,要根据实际情况灵活运用各种
结构,有时在一个程序中需要将多种结构进行组合应用。这 4 种程序结构,如图 3.1 所示。
本次实验着重顺序结构、分支结构以及主子调用结构汇编程序的设计,实验四将重点进行循
环结构的汇编程序设计。
图 1.1 单片机汇编语言程序设计的的 4 种结构图
3. 单片机汇编语言程序设计的基本步骤
在掌握了单片机汇编语言的指令以及程序结构后,就要将两者结合起来进行汇编语言的
程序设计了。汇编语言的程序设计是针对实际应用问题,使用 MCS-51 系列单片机的指令系
统并结合汇编语言程序的设计结构,来编制汇编语言程序的过程。在程序设计的过程中,应
该在保证实现程序功能的前提下,使程序占用的空间越小越好,执行速度越快越好。
汇编语言程序设计的基本步骤如下:
(1)分析应用问题,明确单片机系统的功能要求与设计目标,确定根据应用问题抽象出
的算法数学模型以及具体设计思路。
(2)根据算法数学模型以及设计思路,绘制出程序实现的软件流程图。
(3)分配内、外存单元,即应用问题中的原始数据、中间数据、结果以及程序代码如何
在存储器中进行存放。
5
(4)按照软件程序流程图,进行汇编语言源程序的设计。
(5)使用 Keil μVision2 集成开发环境,在宿主计算机上输入程序,进行程序的汇编
和调试运行,并在调试运行过程中找出错误进行更正,然后再次进行调试运行,直到程序顺
利通过,得到正确的运行结果。
(6)在程序调试运行正确后,一定要及时编写程序设计文档说明,以备遗忘。
4. 实现分支结构的汇编语言指令
本次实验侧重练习分支结构的汇编语言程序设计,因此控制转移类指令是这些程序设计
的核心,在这里对控制转移类指令进行简要的总结,指令的具体分类情况如下:
(1)无条件转移指令:主要包括 JMP、LJMP、SJMP 以及 AJMP 指令。
(2)条件转移指令:主要包括以下 4 小类指令。
① 累加器判 0 转移指令,JZ 和 JNZ;
② 循环转移指令,DJNZ;
③ 比较转移指令,CJNE;
④ 位转移指令,JC、JNC、JB、JNB 和 JBC 等;
(3)调用与返回指令:主要包括 LCALL、ACALL 以及 RET 指令。
从上面的总结可以看出,控制转移类指令主要包括 3 小类,即无条件转移指令、条件转
移指令以及调用与返回指令。其中,无条件转移指令的作用是不需要任何条件,只要程序中
遇到这样的指令,程序就会无条件转移到新的位置取指令继续执行,常用的无条件转移指令
有 JMP、LJMP、SJMP、AJMP,它们的用法基本相同,不一一详细介绍。条件转移指令是
最重要的也是最不容易理解的控制转移指令,它们的作用是当满足某个条件时,程序才会转
移到某个新的标号地址指示的位置来执行新的程序指令,常用的条件转移指令有 4 种,前面
已经叙述。子程序的调用与返回指令的作用主要用于主子结构的汇编语言程序设计。
四. 实验设备和器件
1. PC 机一台,操作系统为 Windows XP,内存 256MB 以上,硬盘 10GB 以上。
2. Keil μVision2 集成开发环境的安装软件(绿色版本和安装版本均可),并将该软件
安装到 PC 机上正常工作。
五. 实验内容
1. 顺序结构的汇编语言程序设计
已知单片机片内 ROM 的 50H 单元中存储的数据是 27H,请将此数据读入到单片机片内
RAM 的 60H 单元中,然后再从片内 RAM 的 60H 单元中,将这个数据写入到单片机片外 RAM 的
70H 单元中。请设计汇编语言程序、画出流程图,并调试出正确结果。具体调试要求:
(1)在 Keil μVision2 集成开发环境中,查询累加器 A、数据指针寄存器 DPTR、程序
计数器 PC、通用寄存器 R0~R7 以及程序状态字寄存器 PSW 的内容。
(2)在 Keil μVision2 集成开发环境中,在存储器窗口中查询片内 RAM 和片外 RAM 存
储单元的值,并给片内 ROM 的 50H 单元赋值为 27H。
(3)使用单步调试的方式来执行程序。在调试过程中,配合观察寄存器和存储器器窗口,
检验程序的运行结果是否正确。
(4)连续执行程序,配合观察寄存器和存储器的窗口,检验运行结果是否正确。
【实验提示】:
此题虽然是比较简单的顺序结构汇编程序设计,不超过 10 条汇编指令就可以设计出来。
但是,该题目却包含了 3 类主要的数据传输指令,即 MOV、MOVX 以及 MOVC 指令,而这 3 类
指令恰好可以分别实现单片机片内 RAM、片外 RAM 以及片内和片外 ROM 中数据的传输。因此