中国高校课件下载中心 》 教学资源 》 大学文库

大连理工大学:《单片机系统及应用》课程教学资源(实验讲义,共十二个)

文档信息
资源类别:文库
文档格式:PDF
文档页数:62
文件大小:3.32MB
团购合买:点击进入团购
内容简介
实验一 MCS-51 单片机汇编语言编程练习.1 实验二 MCS-51 单片机 C 语言编程练习.12 实验三 单片机流水灯实验.21 实验四 外中断实验.23 实验五 定时器实验一.25 实验六 定时器实验二.27 实验七 A/D 转换实验.28 实验八 D/A 转换实验.32 实验九 并口与存储器扩充实验.35 实验十 键盘输入接口实验.49 实验十一 单片机应用系统综合实验一.51 实验十二 单片机应用系统综合实验二.53
刷新页面文档预览

《单片机系统及应用》实验讲义2019-

1 《单片机系统及应用》 实验讲义 2019

目录实验一MCS-51单片机汇编语言编程练习·实验二MCS-51单片机C语言编程练习.12实验三单片机流水灯实验21实验四外中断实验·23实验五定时器实验·25实验六定时器实验··27实验七A/D转换实验.··28实验八D/A转换实验·32实验九并口与存储器扩充实验··35实验十键盘输入接口实验·49实验十一单片机应用系统综合实验...51实验十二单片机应用系统综合实验工·533

3 目 录 实验一 MCS-51 单片机汇编语言编程练习.1 实验二 MCS-51 单片机 C 语言编程练习.12 实验三 单片机流水灯实验.21 实验四 外中断实验.23 实验五 定时器实验一.25 实验六 定时器实验二.27 实验七 A/D 转换实验.28 实验八 D/A 转换实验.32 实验九 并口与存储器扩充实验.35 实验十 键盘输入接口实验.49 实验十一 单片机应用系统综合实验一.51 实验十二 单片机应用系统综合实验二.53

实验一MCS-51单片机汇编语言编程练习一。实验目的1.熟悉单片机KeilμVision2集成开发环境的使用方法。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条,作用是“算来算去”(加减乘除等算术运算)。4

4 实验一 MCS-51 单片机汇编语言编程练习 一. 实验目的 1. 熟悉单片机 Keil μVision2 集成开发环境的使用方法。 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)控制转移指令:17条,作用是“跳来跳去”(5)位操作指令:17条,作用是“变来变去”。2.单片机汇编语言程序设计的基本结构在进行单片机汇编语言的程序设计时,通常有4种应用程序结构,即顺序结构、分支结构、循环结构以及主子调用结构。在具体程序设计的过程中,要根据实际情况灵活运用各种结构,有时在一个程序中需要将多种结构进行组合应用。这4种程序结构,如图3.1所示。本次实验着重顺序结构、分支结构以及主子调用结构汇编程序的设计,实验四将重点进行循环结构的汇编程序设计。(b)分支结构(a)顺序结构主程序子程序(c)循环结构(d)主子结构图1.1单片机汇编语言程序设计的的4种结构图3.单片机汇编语言程序设计的基本步骤在掌握了单片机汇编语言的指令以及程序结构后,就要将两者结合起来进行汇编语言的程序设计了。汇编语言的程序设计是针对实际应用问题,使用MCS-51系列单片机的指令系统并结合汇编语言程序的设计结构,来编制汇编语言程序的过程。在程序设计的过程中,应该在保证实现程序功能的前提下,使程序占用的空间越小越好,执行速度越快越好。汇编语言程序设计的基本步骤如下:(1)分析应用问题,明确单片机系统的功能要求与设计目标,确定根据应用问题抽象出的算法数学模型以及具体设计思路。(2)根据算法数学模型以及设计思路,绘制出程序实现的软件流程图。(3)分配内、外存单元,即应用问题中的原始数据、中间数据、结果以及程序代码如何5

5 (3)逻辑操作指令:25 条,作用也是“算来算去”(与、或、非、移位等逻辑运算)。 (4)控制转移指令:17 条,作用是“跳来跳去”。 (5)位操作指令: 17 条,作用是“变来变去”。 2. 单片机汇编语言程序设计的基本结构 在进行单片机汇编语言的程序设计时,通常有 4 种应用程序结构,即顺序结构、分支结 构、循环结构以及主子调用结构。在具体程序设计的过程中,要根据实际情况灵活运用各种 结构,有时在一个程序中需要将多种结构进行组合应用。这 4 种程序结构,如图 3.1 所示。 本次实验着重顺序结构、分支结构以及主子调用结构汇编程序的设计,实验四将重点进行循 环结构的汇编程序设计。 图 1.1 单片机汇编语言程序设计的的 4 种结构图 3. 单片机汇编语言程序设计的基本步骤 在掌握了单片机汇编语言的指令以及程序结构后,就要将两者结合起来进行汇编语言的 程序设计了。汇编语言的程序设计是针对实际应用问题,使用 MCS-51 系列单片机的指令系 统并结合汇编语言程序的设计结构,来编制汇编语言程序的过程。在程序设计的过程中,应 该在保证实现程序功能的前提下,使程序占用的空间越小越好,执行速度越快越好。 汇编语言程序设计的基本步骤如下: (1)分析应用问题,明确单片机系统的功能要求与设计目标,确定根据应用问题抽象出 的算法数学模型以及具体设计思路。 (2)根据算法数学模型以及设计思路,绘制出程序实现的软件流程图。 (3)分配内、外存单元,即应用问题中的原始数据、中间数据、结果以及程序代码如何

在存储器中进行存放。(4)按照软件程序流程图,进行汇编语言源程序的设计。(5)使用KeilμVision2集成开发环境,在宿主计算机上输入程序,进行程序的汇编和调试运行,并在调试运行过程中找出错误进行更正,然后再次进行调试运行,直到程序顺利通过,得到正确的运行结果。(6)在程序调试运行正确后,一定要及时编写程序设计文档说明,以备遗忘。4.实现分支结构的汇编语言指令本次实验侧重练习分支结构的汇编语言程序设计,因此控制转移类指令是这些程序设计的核心,在这里对控制转移类指令进行简要的总结,指令的具体分类情况如下:(1)无条件转移指令:主要包括JMP、LJMP、SJMP以及AJMP指令。(2)条件转移指令:主要包括以下4小类指令。①累加器判O转移指令,JZ和JNZ:②循环转移指令,DJNZ:③比较转移指令,CJNE;④位转移指令,JC、JNC、JB、JNB和JBC等;(3)调用与返回指令:主要包括LCALL、ACALL以及RET指令。从上面的总结可以看出,控制转移类指令主要包括3小类,即无条件转移指令、条件转移指令以及调用与返回指令。其中,无条件转移指令的作用是不需要任何条件,只要程序中遇到这样的指令,程序就会无条件转移到新的位置取指令继续执行,常用的无条件转移指令有JMP、LJMP、SJMP、AJMP,它们的用法基本相同,不一一详细介绍。条件转移指令是最重要的也是最不容易理解的控制转移指令,它们的作用是当满足某个条件时,程序才会转移到某个新的标号地址指示的位置来执行新的程序指令,常用的条件转移指令有4种,前面已经叙述。子程序的调用与返回指令的作用主要用于主子结构的汇编语言程序设计。四.实验设备和器件1.PC机一台,操作系统为WindoWSXP,内存256MB以上,硬盘10GB以上。2.KeilμVision2集成开发环境。五.实验内容1.顺序结构的汇编语言程序设计已知单片机片内ROM的5OH单元中存储的数据是27H.请将此数据读入到单片机片内RAM的60H单元中,然后再从片内RAM的60H单元中,将这个数据写入到单片机片外RAM的70H单元中。请设计汇编语言程序、画出流程图,并调试出正确结果。具体调试要求:(1)在KeilμVision2集成开发环境中,查询累加器A、数据指针寄存器DPTR、程序计数器PC、通用寄存器ROR7以及程序状态字寄存器PSW的内容。(2)在KeilμVision2集成开发环境中,在存储器窗口中查询片内RAM和片外RAM存储单元的值,并给片内ROM的50H单元赋值为27H。(3)使用单步调试的方式来执行程序。在调试过程中,配合观察寄存器和存储器器窗口,检验程序的运行结果是否正确。(4)连续执行程序,配合观察寄存器和存储器的窗口,检验运行结果是否正确。【实验提示】:此题虽然是比较简单的顺序结构汇编程序设计,不超过10条汇编指令就可以设计出来。但是,该题目却包含了3类主要的数据传输指令,即MOV、MOVX以及MOVC指令,而这3类指令恰好可以分别实现单片机片内RAM、片外RAM以及片内和片外ROM中数据的传输。因此6

6 在存储器中进行存放。 (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 集成开发环境。 五. 实验内容 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 中数据的传输。因此

本题的设计关键,在于理解好这3类汇编语言指令。此题参考源程序如下:这里要注意,片内ROM的5OH单元的数据,可以通过Kei1软件在进入调试状态以后事先设定好。例如,本题可以在存储器的窗口中输入命令c:0x50然后回车,在显示出来的存储单元中找到片内ROM的50H单元,该单元通常默认的值为00,用右键点击00后就会出现一个菜单,选择菜单的最后一项“更新存储器的值”,点击鼠标左键(如图3.2所示),在弹出的对话框中(如图3.3所示),输入题目中要求在片内ROM的50H单元中存放的数值27H,然后点击确定,这时片内ROM的50H单元的值就设定好了(如图3.4所示)。XA地址::0x50nnnnnn00000 : 0x0050:十进制000C: 0x0055:无符号有符号30C : 0x005A:0Ascii码存储器人存储器浮点R/W行:10列:1双精型更新存储器C:0x0050图1.2准备修改片内ROM的50H单元中的数值在C:0x0050输入字节输入项目条:例如:1,2,a,"Texas,-1,-227H0确定C取消图1.3修改片内ROM的50H单元中的数值K地址:e:0x502700000000C : 0x0050 :0000000000 : 0x0055 :0000000000C : 0x005A :存储器存储器#2人存储器#3人存储器#4数字行:10列:19R/W图1.4修改后片内ROM的50H单元中的数值为27H2.分支结构的汇编语言程序设计请完成如图3.5所示的符号函数功能设计。假定已知数据X,存放在片内RAM的50H单元(X的范围是一128~+127),通过符号函数表达式得到的结果Y,存放在片内RAM的51H7

7 本题的设计关键,在于理解好这 3 类汇编语言指令。此题参考源程序如下: 这里要注意,片内 ROM 的 50H 单元的数据,可以通过 Keil 软件在进入调试状态以后事 先设定好。例如,本题可以在存储器的窗口中输入命令 c:0x50 然后回车,在显示出来的存 储单元中找到片内 ROM 的 50H 单元,该单元通常默认的值为 00,用右键点击 00 后就会出现 一个菜单,选择菜单的最后一项“更新存储器的值”,点击鼠标左键(如图 3.2 所示),在弹 出的对话框中(如图 3.3 所示),输入题目中要求在片内 ROM 的 50H 单元中存放的数值 27H, 然后点击确定,这时片内 ROM 的 50H 单元的值就设定好了(如图 3.4 所示)。 图 1.2 准备修改片内 ROM 的 50H 单元中的数值 图 1.3 修改片内 ROM 的 50H 单元中的数值 图 1.4 修改后片内 ROM 的 50H 单元中的数值为 27H 2. 分支结构的汇编语言程序设计 请完成如图 3.5 所示的符号函数功能设计。假定已知数据 X,存放在片内 RAM 的 50H 单 元(X 的范围是-128~+127),通过符号函数表达式得到的结果 Y,存放在片内 RAM 的 51H

单元,请使用汇编语言的分支结构,根据图3.6所示的软件流程图编写程序。注意:在Kei1软件中,负数使用补码表示,一1的补码是OFFH。具体调试要求:(1)在KeilμVision2集成开发环境中,查询累加器A、程序计数器PC、通用寄存器ROR7以及程序状态字寄存器PSW各个标志位的数据。(2)在Kei1μVision2集成开发环境中,查询片内RAM的50H和51H中的数据。(3)使用单步调试的方式来执行不同分支的程序。在调试过程中,配合观察寄存器和存储器器窗口,检验程序的运行结果是否正确。(4)连续执行程序,配合观察寄存器和存储器的窗口,检验运行结果是否正确。当Y>01,y0,当X=0(-128≤X≤127)-1,当X<0图1.5符号函数的表达式【实验提示】:通常,符号函数仅仅是一个数学问题,但许多实际的单片机应用问题可以使用它作为数学模型。例如:关于产品的分类、包装、质量的鉴定都可以应用符号函数。如:成品打印“1”,半成品打印“0”,废品打印“-1”等等。这里可以使用JZ、JNB、SJMP等控制转移类指令,进行合理的搭配组合,从而完成多分支结构的程序设计,但要注意分支结构的执行顺序以及分支结果的保存,不要顺序混乱和结果丢失。另外,还要注意KeilμVision2集成开发环境中,负数使用补码来进行表示,调试过程中要特别留心。开始A-XX与O相比较YesX=0?INo+YesX<0?No★Y-OFFHY+1Y-0结束图1.6汇编语言程序实现符号函数的软件流程图3.选做题8

8 单元,请使用汇编语言的分支结构,根据图 3.6 所示的软件流程图编写程序。注意:在 Keil 软件中,负数使用补码表示,-1 的补码是 0FFH。具体调试要求: (1)在 Keil μVision2 集成开发环境中,查询累加器 A、程序计数器 PC、通用寄存器 R0~R7 以及程序状态字寄存器 PSW 各个标志位的数据。 (2)在 Keil μVision2 集成开发环境中,查询片内 RAM 的 50H 和 51H 中的数据。 (3)使用单步调试的方式来执行不同分支的程序。在调试过程中,配合观察寄存器和存 储器器窗口,检验程序的运行结果是否正确。 (4)连续执行程序,配合观察寄存器和存储器的窗口,检验运行结果是否正确。 图 1.5 符号函数的表达式 【实验提示】: 通常,符号函数仅仅是一个数学问题,但许多实际的单片机应用问题可以使用它作为数 学模型。例如:关于产品的分类、包装、质量的鉴定都可以应用符号函数。如:成品打印“1”, 半成品打印“0”,废品打印“-1”等等。这里可以使用 JZ、JNB、SJMP 等控制转移类指令, 进行合理的搭配组合,从而完成多分支结构的程序设计,但要注意分支结构的执行顺序以及 分支结果的保存,不要顺序混乱和结果丢失。另外,还要注意 Keil μVision2 集成开发环 境中,负数使用补码来进行表示,调试过程中要特别留心。 图 1.6 汇编语言程序实现符号函数的软件流程图 3. 选做题

在片内RAM的3OH开始的单元中存放5个2位十六进制数,编程将它们转换成ASCII码,并存放在40H开始的单元中。六。实验报告1.通过本次实验,总结汇编语言的顺序及分支结构程序的设计方法和注意事项。2.写出汇编程序的源代码,给每行语句加上详细的注释,并画出程序的流程图。3.掌握Keil软件如何进行程序的分支以及给存储单元进行赋值操作。4.叙述程序调试过程中遇到的困难以及解决方法,写出本次实验的收获和心得体会。七、实验和考核内容1.每人一组,独立完成。学会使用KeilμVision2集成开发环境之汇编语言的编程与调试,进行汇编语言源程序的设计、编译,掌握源程序编译出错提示信息的含义并加以改正,掌握目标代码的单步调试、测试数据的选择,了解运行结果是否反映程序的正确性。2.完成实验任务1(顺序结构的汇编语言程序设计),结果正确,给60分(百分制)。3.完成实验任务2(分支结构的汇编语言程序设计),结果正确,加20分。4.完成实验任务3(选做题),结果正确,加20分。9

9 在片内 RAM 的 30H 开始的单元中存放 5 个 2 位十六进制数,编程将它们转换成 ASCII 码, 并存放在 40H 开始的单元中。 六. 实验报告 1. 通过本次实验,总结汇编语言的顺序及分支结构程序的设计方法和注意事项。 2. 写出汇编程序的源代码,给每行语句加上详细的注释,并画出程序的流程图。 3. 掌握 Keil 软件如何进行程序的分支以及给存储单元进行赋值操作。 4. 叙述程序调试过程中遇到的困难以及解决方法,写出本次实验的收获和心得体会。 七、实验和考核内容 1. 每人一组,独立完成。学会使用 Keil μVision2 集成开发环境之汇编语言的编程与 调试,进行汇编语言源程序的设计、编译,掌握源程序编译出错提示信息的含义并加以改正, 掌握目标代码的单步调试、测试数据的选择,了解运行结果是否反映程序的正确性。 2. 完成实验任务 1(顺序结构的汇编语言程序设计),结果正确,给 60 分(百分制)。 3. 完成实验任务 2(分支结构的汇编语言程序设计),结果正确,加 20 分。 4. 完成实验任务 3(选做题),结果正确,加 20 分

实验二MCS-51单片机C语言编程练习一。实验目的1.掌握单片机KeilμVision2集成开发环境的使用方法。2.掌握使用C51语言进行顺序、分支、循环结构的程序设计方法。3.能够使用C51语言,独立设计出具有一定综合性的单片机应用程序,并与汇编语言的相应程序进行比较,加深理解。4.对应用问题能抽象出数学模型,绘制软件程序的流程图,并能用C51语言实现。二.预习与思考1.预习理论教材中“C51语言程序设计”的相关内容,掌握C51程序设计的基本方法、思路以及设计规范。2.预习理论教材中“C51程序设计”的相关例程。3.掌握单片机C51语言的调试方法,体会与标准C语言的异同。4.思考如何使用C51语言,对顺序、分支、循环结构的单片机应用程序进行设计,重点体会C51语言特有的设计方法与思想。三.实验原理1.单片机的C51语言简介通常,将一些能够对MCS一51系列单片机进行硬件操作的C语言统称为C51语言。在众多的C51语言中,功能最强、最受用户欢迎的是德国KEIL公司的KeilC51语言。单片机应用系统的程序设计,既可以采用汇编语言,也可以采用C51语言,两者各具特色。其中,汇编语言是一种用助记符来代表机器语言的符号语言。因为它最接近机器语言,所以汇编语言对单片机的操作直接、简捷,编写的程序紧凑、执行效率较高。但是,不同种类的单片机其汇编语言存在一定的差异。在一种单片机上开发的应用程序,通常不能直接应用到另一种单片机芯片上,如果进行程序的移植,难度也比较大。与此同时,汇编语言开发的程序可读性较差,不容易理解,特别是当单片机应用系统的规模比较大时,汇编语言的编程工作量非常大,从而影响应用系统的开发效率。相对而言,C51语言恰好可以克服汇编语言的一些缺欠。例如,C51语言可读性好、可移植性高,与自然语言比较接近,并且相同功能的程序使用C51语句的数量要远小于汇编语句。通常,C51语言的入门学习相对于汇编语言更容易,而且在C51语言的程序中还可以嵌套汇编语言,从而满足对执行效率或操作的一些特殊要求。因此在单片机应用系统的开发过程中,C51语言逐渐成为了主要的编程语言。2.单片机C51语言的数据类型C51语言的数据类型,既有与ANSIC语言通用的数据类型,也有自已所特有的数据类型。C51语言的具体数据类型见表5-1所示。从表中可以看出C51语言增加了bit、sfr、sfr16、sbit四种新的数据类型,分别用手定义2进制变量、特殊功能寄存器变量、16位特殊功能寄存器变量以及特殊功能位。另外,C51语言还有自己特有的变量存储类型以及存储模式,这里就不一一详述,具体可以参考理论教材的相关内容。10

10 实验二 MCS-51 单片机 C 语言编程练习 一. 实验目的 1. 掌握单片机 Keil μVision2 集成开发环境的使用方法。 2. 掌握使用 C51 语言进行顺序、分支、循环结构的程序设计方法。 3. 能够使用 C51 语言,独立设计出具有一定综合性的单片机应用程序,并与汇编语言 的相应程序进行比较,加深理解。 4. 对应用问题能抽象出数学模型,绘制软件程序的流程图,并能用 C51 语言实现。 二.预习与思考 1. 预习理论教材中“C51 语言程序设计”的相关内容,掌握 C51 程序设计的基本方法、 思路以及设计规范。 2. 预习理论教材中“C51 程序设计”的相关例程。 3. 掌握单片机 C51 语言的调试方法,体会与标准 C 语言的异同。 4. 思考如何使用 C51 语言,对顺序、分支、循环结构的单片机应用程序进行设计,重 点体会 C51 语言特有的设计方法与思想。 三. 实验原理 1. 单片机的 C51 语言简介 通常,将一些能够对 MCS—51 系列单片机进行硬件操作的 C 语言统称为 C51 语言。在 众多的 C51 语言中,功能最强、最受用户欢迎的是德国 KEIL 公司的 Keil C51 语言。单片 机应用系统的程序设计,既可以采用汇编语言,也可以采用 C51 语言,两者各具特色。其中, 汇编语言是一种用助记符来代表机器语言的符号语言。因为它最接近机器语言,所以汇编语 言对单片机的操作直接、简捷,编写的程序紧凑、执行效率较高。但是,不同种类的单片机 其汇编语言存在一定的差异。在一种单片机上开发的应用程序,通常不能直接应用到另一种 单片机芯片上,如果进行程序的移植,难度也比较大。与此同时,汇编语言开发的程序可读 性较差,不容易理解,特别是当单片机应用系统的规模比较大时,汇编语言的编程工作量非 常大,从而影响应用系统的开发效率。 相对而言,C51 语言恰好可以克服汇编语言的一些缺欠。例如,C51 语言可读性好、可 移植性高,与自然语言比较接近,并且相同功能的程序使用 C51 语句的数量要远小于汇编语 句。通常,C51 语言的入门学习相对于汇编语言更容易,而且在 C51 语言的程序中还可以嵌 套汇编语言,从而满足对执行效率或操作的一些特殊要求。因此在单片机应用系统的开发过 程中,C51 语言逐渐成为了主要的编程语言。 2. 单片机 C51 语言的数据类型 C51 语言的数据类型,既有与 ANSI C 语言通用的数据类型,也有自己所特有的数据类 型。C51 语言的具体数据类型见表 5-1 所示。从表中可以看出 C51 语言增加了 bit、sfr、sfr16、 sbit 四种新的数据类型,分别用于定义 2 进制变量、特殊功能寄存器变量、16 位特殊功能 寄存器变量以及特殊功能位。另外,C51 语言还有自己特有的变量存储类型以及存储模式, 这里就不一一详述,具体可以参考理论教材的相关内容

表2-1C51语言所支持的数据类型长度值域数据类型名称单字节unsigned char无符号字符型0~255单字节signed char有符号字符型128~+127unsigned int无符号整型双字节0~65535signed int有符号整型双字节32768~+32767四字节unsigned long无符号长整型0~4294967295signed long有符号长整型四字节2147483648~+2147483647float浮点型四字节±1.175494E—38~±3.402823E+38bit位位标量0或1sfr单字节特殊功能寄存器0~255sfr 1616位特殊功能寄存器双字节0~65535sbit特殊功能位位0或13.C51语言对单片机的SFR以及存储器的访问C51语言除了具有特殊的数据类型、存储类型以及存储模式外,C51语言还可以对SFR以及片内或片外的存储器单元进行直接访问。这里的SFR是指MCS-51单片机的特殊功能寄存器。8051单片机的SFR一共有21个,具体见表5-2所示。从表中可以看到,这么多的特殊功能寄存器,如果每一个都用数据类型sfr定义一遍再使用,就显得比较麻烦。那么如何不用定义,还能在C51语言中随时使用这21个特殊功能寄存器呢?方法也很简单,只要在每个C51程序中包含头文件或者或者或者中的任意一个,就可以在C51程序中任意使用这21个特殊功能寄存器。因为在这些头文件中已经将相应的特殊功能寄存器用数据类型sfr定义好了,所以当C51程序包含了上述的头文件以后就可以直接用SFR了,而不必再重新一个一个的来定义这些寄存器了。例如,给特殊功能寄存器P3口赋值为Oxff,程序可以这样编写:#include//包含21个特殊功能寄存器地址定义的头文件voidmain()1P3=0xff;//给P3口赋值为0xff11另外,C51语言还可以直接访问片内或片外的存储单元,这时需要在程序中包含绝对地址访问头文件。这个头文件使得C51语言对存储器单元的访问变得更加简便,在头文件中提供了一些对存储单元进行访问的宏定义,具体如下:(1)CBYTE[data]:该宏定义代表对单片机的片内ROM单元进行访问。(2)DBYTE[data]:该宏定义代表对单片机的片内RAM单元进行读写操作。(3)XBYTE[data]:该宏定义代表对单片机的片外RAM单元进行读写操作。11

11 表 2-1 C51 语言所支持的数据类型 3. C51 语言对单片机的 SFR 以及存储器的访问 C51 语言除了具有特殊的数据类型、存储类型以及存储模式外,C51 语言还可以对 SFR 以及片内或片外的存储器单元进行直接访问。这里的 SFR 是指 MCS-51 单片机的特殊功能寄 存器。8051 单片机的 SFR 一共有 21 个,具体见表 5-2 所示。从表中可以看到,这么多的特 殊功能寄存器,如果每一个都用数据类型 sfr 定义一遍再使用,就显得比较麻烦。那么如何 不用定义,还能在 C51 语言中随时使用这 21 个特殊功能寄存器呢?方法也很简单,只要在 每个 C51 程序中包含头文件或者或者或者中 的任意一个,就可以在 C51 程序中任意使用这 21 个特殊功能寄存器。因为在这些头文件中 已经将相应的特殊功能寄存器用数据类型 sfr 定义好了,所以当 C51 程序包含了上述的头文 件以后就可以直接用 SFR 了,而不必再重新一个一个的来定义这些寄存器了。例如,给特殊 功能寄存器 P3 口赋值为 0xff,程序可以这样编写: //- #include //包含 21 个特殊功能寄存器地址定义的头文件 void main( ) { P3=0xff; //给 P3 口赋值为 0xff } //- 另外,C51 语言还可以直接访问片内或片外的存储单元,这时需要在程序中包含绝对地 址访问头文件。这个头文件使得 C51 语言对存储器单元的访问变得更加简便,在 头文件中提供了一些对存储单元进行访问的宏定义,具体如下: (1)CBYTE[data]:该宏定义代表对单片机的片内 ROM 单元进行访问。 (2)DBYTE[data]:该宏定义代表对单片机的片内 RAM 单元进行读写操作。 (3)XBYTE[data]:该宏定义代表对单片机的片外 RAM 单元进行读写操作

刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档