ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:311.91KB ,
资源ID:4129282      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4129282.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机实验讲义.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机实验讲义.docx

1、单片机实验讲义单片机系统及应用实验讲义 实验一 MCS-51单片机汇编语言编程练习一. 实验目的1. 熟悉单片机开发软件Keil系统的使用方法。2. 理解单片机汇编语言指令的基本语法以及汇编语言程序设计的基本结构和编程方法。3. 掌握单片机汇编语言顺序结构、分支结构和循环结构程序的设计方法。4. 能够独立使用单片机汇编语言进行顺序结构、分支结构和循环结构程序的设计能力。对实际应用问题能够抽象出数学模型,并通过编程来实现数学模型所要完成的功能。5. 掌握顺序结构、分支结构和循环结构程序的流程图绘制方法。二.预习与思考1. 预习理论教材中“顺序结构”、“分支结构”和“循环结构”等相关内容,掌握它们

2、的实现方法。2. 思考如何使用不同类型的单片机汇编语言指令,来完成分支、循环结构程序的设计,并总结归纳出所有具备类似分支循环功能的汇编指令。三. 实验原理 1. 单片机汇编语言的指令分类全球生产单片机的芯片厂商有数百家,不同厂商生产的单片机芯片都有自己特定的汇编语言指令系统对其进行支持,那么在众多不同类型的单片机汇编语言指令系统中,作为单片机的初学者是不是要一一来学,是不是需要面面俱到呢?回答是不需要。因为,尽管单片机芯片的生产厂商、芯片类型以及处理位数都不尽相同,但是所有的单片机芯片都有一个共同的祖先,那就是Intel公司生产的MCS-51系列单片机芯片。因此,只要掌握好MCS-51系列单片

3、机的汇编语言指令,就可以举一反三、触类旁通,从而理解其他类型单片机芯片的汇编语言指令系统。MCS-51系列单片机的汇编语言指令,一共有111条,按照指令实现的功能不同,将这111条指令分成了五大类即:数据传送类指令、算术运算类指令、逻辑运算类指令、控制转移类指令以及位操作指令(也叫布尔变量操作指令)。数据传送类指令的作用是将数据在单片机芯片内部或外部的不同部件间进行传送,它是五大类指令当中最基础、最重要,也是指令条数最多的一类指令。算术运算类指令是使单片机进行加、减、乘、除、加1、减1等不同功能的算术运算。逻辑运算类指令单片机进行与、或、非、异或、左移、右移等不同功能的逻辑运算。控制转移类指令

4、的作用是控制程序的执行顺序,即控制程序是否顺序执行,何时进行分支,何时进行子程序的调用以及如何使程序不断循环执行等操作。位操作类指令的作用是把二进制位由1变成0或者由0变成1,另外还可以根据某些二进制位的值进行程序的控制与转移,位操作类是单片机特有的一类指令。本次实验的内容,主要就是针对这些指令进行重点的练习。为了方便记忆,根据这五类指令的不同功能,将五大类指令编成了“顺口溜”,有助于初学者对五大类指令及功能的理解和记忆,总结如下:(1)数据传送指令:28条,作用是“传来传去”。(2)算术操作指令:24条,作用是“算来算去”(加减乘除等算术运算)。(3)逻辑操作指令:25条,作用也是“算来算去

5、”(与、或、非、移位等逻辑运算)。(4)控制转移指令:17条,作用是“跳来跳去”。(5)位操作指令: 17条,作用是“变来变去”。2. 单片机汇编语言程序设计的基本结构在进行单片机汇编语言的程序设计时,通常有4种应用程序结构,即顺序结构、分支结构、循环结构以及主子调用结构。在具体程序设计的过程中,要根据实际情况灵活运用各种结构,有时在一个程序中需要将多种结构进行组合应用。这4种程序结构,如图3.1所示。本次实验着重顺序结构、分支结构以及主子调用结构汇编程序的设计,实验四将重点进行循环结构的汇编程序设计。图1.1 单片机汇编语言程序设计的的4种结构图3. 单片机汇编语言程序设计的基本步骤在掌握了

6、单片机汇编语言的指令以及程序结构后,就要将两者结合起来进行汇编语言的程序设计了。汇编语言的程序设计是针对实际应用问题,使用MCS-51系列单片机的指令系统并结合汇编语言程序的设计结构,来编制汇编语言程序的过程。在程序设计的过程中,应该在保证实现程序功能的前提下,使程序占用的空间越小越好,执行速度越快越好。汇编语言程序设计的基本步骤如下:(1)分析应用问题,明确单片机系统的功能要求与设计目标,确定根据应用问题抽象出的算法数学模型以及具体设计思路。(2)根据算法数学模型以及设计思路,绘制出程序实现的软件流程图。(3)分配内、外存单元,即应用问题中的原始数据、中间数据、结果以及程序代码如何在存储器中

7、进行存放。(4)按照软件程序流程图,进行汇编语言源程序的设计。(5)使用Keil Vision2集成开发环境,在宿主计算机上输入程序,进行程序的汇编和调试运行,并在调试运行过程中找出错误进行更正,然后再次进行调试运行,直到程序顺利通过,得到正确的运行结果。(6)在程序调试运行正确后,一定要及时编写程序设计文档说明,以备遗忘。4. 实现分支结构的汇编语言指令本次实验侧重练习分支结构的汇编语言程序设计,因此控制转移类指令是这些程序设计的核心,在这里对控制转移类指令进行简要的总结,指令的具体分类情况如下:(1)无条件转移指令:主要包括JMP、LJMP、SJMP以及AJMP指令。(2)条件转移指令:主

8、要包括以下4小类指令。 累加器判0转移指令,JZ和JNZ; 循环转移指令,DJNZ; 比较转移指令,CJNE; 位转移指令,JC、JNC、JB、JNB和JBC等;(3)调用与返回指令:主要包括LCALL、ACALL以及RET指令。从上面的总结可以看出,控制转移类指令主要包括3小类,即无条件转移指令、条件转移指令以及调用与返回指令。其中,无条件转移指令的作用是不需要任何条件,只要程序中遇到这样的指令,程序就会无条件转移到新的位置取指令继续执行,常用的无条件转移指令有JMP、LJMP、SJMP、AJMP,它们的用法基本相同,不一一详细介绍。条件转移指令是最重要的也是最不容易理解的控制转移指令,它们

9、的作用是当满足某个条件时,程序才会转移到某个新的标号地址指示的位置来执行新的程序指令,常用的条件转移指令有4种,前面已经叙述。子程序的调用与返回指令的作用主要用于主子结构的汇编语言程序设计。四. 实验设备和器件 1. PC机一台,操作系统为Windows XP,内存256MB以上,硬盘10GB以上。 2. Keil Vision2集成开发环境的安装软件(绿色版本和安装版本均可),并将该软件安装到PC机上正常工作。五. 实验内容1. 顺序结构的汇编语言程序设计已知单片机片内ROM的50H单元中存储的数据是27H,请将此数据读入到单片机片内RAM的60H单元中,然后再从片内RAM的60H单元中,将

10、这个数据写入到单片机片外RAM的70H单元中。请设计汇编语言程序、画出流程图,并调试出正确结果。具体调试要求:(1)在Keil Vision2集成开发环境中,查询累加器A、数据指针寄存器DPTR、程序计数器PC、通用寄存器R0R7以及程序状态字寄存器PSW的内容。(2)在Keil Vision2集成开发环境中,在存储器窗口中查询片内RAM和片外RAM存储单元的值,并给片内ROM的50H单元赋值为27H。(3)使用单步调试的方式来执行程序。在调试过程中,配合观察寄存器和存储器器窗口,检验程序的运行结果是否正确。(4)连续执行程序,配合观察寄存器和存储器的窗口,检验运行结果是否正确。【实验提示】:

11、 此题虽然是比较简单的顺序结构汇编程序设计,不超过10条汇编指令就可以设计出来。但是,该题目却包含了3类主要的数据传输指令,即MOV、MOVX以及MOVC指令,而这3类指令恰好可以分别实现单片机片内RAM、片外RAM以及片内和片外ROM中数据的传输。因此本题的设计关键,在于理解好这3类汇编语言指令。此题参考源程序如下:这里要注意,片内ROM的50H单元的数据,可以通过Keil软件在进入调试状态以后事先设定好。例如,本题可以在存储器的窗口中输入命令c:0x50然后回车,在显示出来的存储单元中找到片内ROM的50H单元,该单元通常默认的值为00,用右键点击00后就会出现一个菜单,选择菜单的最后一项

12、“更新存储器的值”,点击鼠标左键(如图3.2所示),在弹出的对话框中(如图3.3所示),输入题目中要求在片内ROM的50H单元中存放的数值27H,然后点击确定,这时片内ROM的50H单元的值就设定好了(如图3.4所示)。图1.2 准备修改片内ROM的50H单元中的数值图1.3 修改片内ROM的50H单元中的数值图1.4 修改后片内ROM的50H单元中的数值为27H2. 分支结构的汇编语言程序设计请完成如图3.5所示的符号函数功能设计。假定已知数据X,存放在片内RAM的50H单元(X的范围是128+127),通过符号函数表达式得到的结果Y,存放在片内RAM的51H单元,请使用汇编语言的分支结构,

13、根据图3.6所示的软件流程图编写程序。注意:在Keil软件中,负数使用补码表示,1的补码是0FFH。具体调试要求:(1)在Keil Vision2集成开发环境中,查询累加器A、程序计数器PC、通用寄存器R0R7以及程序状态字寄存器PSW各个标志位的数据。(2)在Keil Vision2集成开发环境中,查询片内RAM的50H和51H中的数据。(3)使用单步调试的方式来执行不同分支的程序。在调试过程中,配合观察寄存器和存储器器窗口,检验程序的运行结果是否正确。(4)连续执行程序,配合观察寄存器和存储器的窗口,检验运行结果是否正确。图1.5 符号函数的表达式【实验提示】:通常,符号函数仅仅是一个数学

14、问题,但许多实际的单片机应用问题可以使用它作为数学模型。例如:关于产品的分类、包装、质量的鉴定都可以应用符号函数。如:成品打印“1”,半成品打印“0”,废品打印“-1”等等。这里可以使用JZ、JNB、SJMP等控制转移类指令,进行合理的搭配组合,从而完成多分支结构的程序设计,但要注意分支结构的执行顺序以及分支结果的保存,不要顺序混乱和结果丢失。另外,还要注意Keil Vision2集成开发环境中,负数使用补码来进行表示,调试过程中要特别留心。图1.6 汇编语言程序实现符号函数的软件流程图3. 选做题在片内RAM的30H开始的单元中存放5个2位十六进制数,编程将它们转换成ASCII码,并存放在4

15、0H开始的单元中。六. 实验报告1. 通过本次实验,总结汇编语言的顺序及分支结构程序的设计方法和注意事项。 2. 写出汇编程序的源代码,给每行语句加上详细的注释,并画出程序的流程图。 3. 掌握Keil软件如何进行程序的分支以及给存储单元进行赋值操作。4. 叙述程序调试过程中遇到的困难以及解决方法,写出本次实验的收获和心得体会。实验二 MCS-51单片机C语言编程练习一. 实验目的1. 了解单片机的C51语言与汇编语言以及标准C语言的异同,掌握C51语言的基本语法知识以及特有的程序设计特点。2. 掌握使用C51语言进行顺序、分支、循环结构的程序设计方法。3. 能够使用C51语言,独立设计出具有

16、一定综合性的单片机应用程序,并与汇编语言的相应程序进行比较,加深理解。4. 对应用问题能抽象出数学模型,绘制软件程序的流程图,并能用C51语言实现。二.预习与思考1. 预习理论教材中“C51语言程序设计”的相关内容,掌握C51程序设计的基本方法、思路以及设计规范。2. 预习理论教材中“C51程序设计”的相关例程。3. 掌握单片机C51语言的调试方法,体会与标准C语言的异同。4. 思考如何使用C51语言,对顺序、分支、循环结构的单片机应用程序进行设计,重点体会C51语言特有的设计方法与思想。三. 实验原理 1. 单片机的C51语言简介通常,将一些能够对MCS51系列单片机进行硬件操作的C语言统称

17、为C51语言。在众多的C51语言中,功能最强、最受用户欢迎的是德国KEIL公司的Keil C51语言。单片机应用系统的程序设计,既可以采用汇编语言,也可以采用C51语言,两者各具特色。其中,汇编语言是一种用助记符来代表机器语言的符号语言。因为它最接近机器语言,所以汇编语言对单片机的操作直接、简捷,编写的程序紧凑、执行效率较高。但是,不同种类的单片机其汇编语言存在一定的差异。在一种单片机上开发的应用程序,通常不能直接应用到另一种单片机芯片上,如果进行程序的移植,难度也比较大。与此同时,汇编语言开发的程序可读性较差,不容易理解,特别是当单片机应用系统的规模比较大时,汇编语言的编程工作量非常大,从而

18、影响应用系统的开发效率。相对而言,C51语言恰好可以克服汇编语言的一些缺欠。例如,C51语言可读性好、可移植性高,与自然语言比较接近,并且相同功能的程序使用C51语句的数量要远小于汇编语句。通常,C51语言的入门学习相对于汇编语言更容易,而且在C51语言的程序中还可以嵌套汇编语言,从而满足对执行效率或操作的一些特殊要求。因此在单片机应用系统的开发过程中,C51语言逐渐成为了主要的编程语言。2. 单片机C51语言的数据类型C51语言的数据类型,既有与ANSI C语言通用的数据类型,也有自己所特有的数据类型。C51语言的具体数据类型见表5-1所示。从表中可以看出C51语言增加了bit、sfr、sf

19、r16、sbit四种新的数据类型,分别用于定义2进制变量、特殊功能寄存器变量、16位特殊功能寄存器变量以及特殊功能位。另外,C51语言还有自己特有的变量存储类型以及存储模式,这里就不一一详述,具体可以参考理论教材的相关内容。表2-1 C51语言所支持的数据类型3. C51语言对单片机的SFR以及存储器的访问C51语言除了具有特殊的数据类型、存储类型以及存储模式外,C51语言还可以对SFR以及片内或片外的存储器单元进行直接访问。这里的SFR是指MCS-51单片机的特殊功能寄存器。8051单片机的SFR一共有21个,具体见表5-2所示。从表中可以看到,这么多的特殊功能寄存器,如果每一个都用数据类型

20、sfr定义一遍再使用,就显得比较麻烦。那么如何不用定义,还能在C51语言中随时使用这21个特殊功能寄存器呢?方法也很简单,只要在每个C51程序中包含头文件或者或者或者中的任意一个,就可以在C51程序中任意使用这21个特殊功能寄存器。因为在这些头文件中已经将相应的特殊功能寄存器用数据类型sfr定义好了,所以当C51程序包含了上述的头文件以后就可以直接用SFR了,而不必再重新一个一个的来定义这些寄存器了。例如,给特殊功能寄存器P3口赋值为0xff,程序可以这样编写:/-#include /包含21个特殊功能寄存器地址定义的头文件void main( ) P3=0xff; /给P3口赋值为0xff/

21、-另外,C51语言还可以直接访问片内或片外的存储单元,这时需要在程序中包含绝对地址访问头文件。这个头文件使得C51语言对存储器单元的访问变得更加简便,在头文件中提供了一些对存储单元进行访问的宏定义,具体如下:(1)CBYTEdata:该宏定义代表对单片机的片内ROM单元进行访问。(2)DBYTEdata:该宏定义代表对单片机的片内RAM单元进行读写操作。(3)XBYTEdata:该宏定义代表对单片机的片外RAM单元进行读写操作。在这里举一个例子:例如要从单片机片内ROM的30H单元中读出数据,给片内RAM的50H单元,然后再从片内RAM的50H单元将该数据写入到片外RAM的ABCDH单元中。相

22、应的C51语言程序可以这样编写:/-#include /包含绝对地址访问头文件 #define a CBYTE0x30 /定义片内ROM的30H单元 #define b DBYTE0x50 /定义片内RAM的50H单元 #define c XBYTE0xABCD /定义片外RAM的ABCDH单元 void main( ) b = a; c = b; /各个存储单元间相互赋值/-表2-2 8051单片机的特殊功能寄存器4. C51语言对特殊功能位的访问C51语言除了可以对特殊功能寄存器进行整体访问以外,还可以对特殊功能寄存器的各个二进制位进行访问。通常把特殊功能寄存器中的各个二进制位,称为特殊功

23、能位。C51语言若想对这些特殊功能位进行操作,事先要完成两步工作:第一步,先将特殊功能位所在的特殊功能寄存器进行定义或者在程序中直接包括已经定义了特殊功能寄存器的头文件,例如reg51.h,建议直接包含头文件;第二步,使用C51语言特有的数据类型sbit定义特殊功能位,然后用户的C51程序就可以对这些特殊功能位进行操作了。在这里举一个例子:例如要对单片机特殊功能寄存器P1口的两个特殊功能位进行赋值操作,使P1.1=0,而P1.6=1。相应的C51语言程序可以这样编写:/-#include /包含21个特殊功能寄存器地址定义的头文件sbit a = P11; /定义P1口的特殊功能位P1.1为a

24、sbit b = P16; /定义P1口的特殊功能位P1.6为bvoid main( ) a = 0; /给特殊功能位P1.1赋值为0b = 1; /给特殊功能位P1.6赋值为1/-四. 实验设备和器件 1. PC机一台,操作系统为Windows XP,内存256MB以上,硬盘10GB以上。 2. Keil Vision2集成开发环境的安装软件(绿色版本和安装版本均可),并将该软件安装到PC机上正常工作。五. 实验内容1. 顺序结构的C51语言程序设计给特殊功能寄存器和特殊功能位赋值。请使用C51语言,给单片机的P2口赋值为0x00,并使P3口的特殊功能位P3.2=0,P3.3=0,P3.6=

25、0,要求在Keil软件中仿真P2口和P3口的功能,并看到实际的调试结果。具体调试要求:(1)在Keil Vision2环境中,掌握查看各并行口数据的方法。(2)在Keil Vision2环境中,如何对并行口的各个二进制位进行赋值和观察。(3)使用单步调试的方式来执行程序。在调试过程中,配合观察并口寄存器的窗口,检验程序的运行结果是否正确。(4)连续执行程序,在执行的过程中,配合观察并口寄存器窗口,检验程序运行结果。 【实验提示】:此题主要使用C51语言,对特殊功能寄存器以及特殊功能位进行赋值。如何在Keil软件中仿真调试4个并行I/O口,是此题要掌握的一个重要知识点,它将会对以后单片机硬件部分

26、的软件仿真打下基础。此题的参考程序代码如下:/-T21.C程序-/文件名称:T21.c/程序功能:给特殊功能寄存器以及特殊功能位赋值。/编制时间:2010年1月/-#include /包含定义51单片机寄存器的头文件sbit a=P32; /定义P3口引脚P3.2sbit b=P33; /定义P3口引脚P3.3sbit c=P36; /定义P3口引脚P3.6void main( ) /主函数 P2=0x00; /给P2口赋值为00 a=0; b=0; c=0; /P3.2、P3.3、P3.6引脚赋值为0/- T21.C程序结束-在这里,对如何使用Keil软件仿真调试P0P3四个并行I/O口进行

27、简要的介绍。当在Keil环境中把程序编写完毕以后,并编译为0个错误0个警告时,点击“调试菜单下的开始/停止调试选项”,这时进入到调试环境。若想观察P0P3这四个并行口的软件仿真结果,首先需要将这四个并行口打开,可以点击“外围设备菜单下的I/O-Ports选项”,该选项会指示出Port 0Port 3也就是单片机的P0口P3口,具体如图5.1所示。由于本题只使用P2和P3口,因此用左键点击Port 2和Port 3就会显示P2和P3口的当前状态,如图5.2所示。从图中可以看出,P2和P3口的初始默认值都为0xff。这里有个小技巧,每个并行口都有8个特殊功能位,例如P2口的8位是P2.0P2.7,

28、它们在图中用小方格依次从右向左排列,其中最右侧的小方格代表P2.0,最左侧的小方格代表P2.7,8个二进制位的值就是整个P2口的值,而每个二进制位的值可以通过它们各自小方格的状态看到。当小方格的下面画的是“对号”时,代表相应的二进制位为1,由于4个并行口初始状态时,8个小方格都是“对号”,所以每个并口的初始值都是0xff;当相应二进制位下的小方格状态为“空白”时,那么这个小方格对应的二进制位就是0,如果8个小方格的状态都为空白,则整个并口的值为00。当从图5.2中看到P2和P3口的初始状态都为0xff时,接下来可以按快捷键F10来单步执行程序,边按F10快捷键时,要边看P2和P3口的状态是否按

29、照程序的设计要求进行了相应的改变。一直按F10键,直到程序单步执行完毕,这时执行的结果如图5.3所示。从图中可以看出,P2口的8个小方格都是“空白”状态,因此P2口的值为0x00,而从下面的P3口也可以看到P3.2、P3.3以及P3.6的小方格状态都是空白的,所以它们的值是0,其他各个二进制位的状态是1。综上所述,从图5.3中可以看出此时P2=0x00,P3.2=0,P3.3=0,P3.6=0,满足题目的要求。至此,已经将Keil软件下如何仿真四个并行口的方法介绍完毕,希望大家多练习,全面掌握。图2.1 并行口P0P3在Keil软件中的打开方式图2.2 并行口P2和P3的初始默认值图2.3 并行口P2和P3的执行结果图2. 分支结构的C51语言程序设计将ASCII码转换成16进制数。已知,一个16进制数的ASCII码,存放在片内RAM的30H单元,请把这个数的16进制表示方式存于片内RAM的31H单元中,软件流程如图5.4所示。具体程序的调试要求如下:(1)在Keil Vision2

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1