单片机实验指导书
- 格式:doc
- 大小:1.87 MB
- 文档页数:37
+《单片机原理及应用》实验指导书谢善娟吴必瑞袁秋凤编著宁德师范学院物理与电气工程系2011年9月目录实验一单片机开发系统的使用一、实验目的1、了解单片机开发系统的各主要组成部分,包括PC、仿真器和实验开发系统;2、掌握KEIL及STC-ISP下载其软件的使用,初步掌握程序的调试方法,包括跟踪、单步运行和断点设置等;3、熟悉51单片机的指令系统,掌握汇编语言程序的设计方法。
二、实验仪器1、自制的C51实验开发板 1块2、USB数据线一条3、PC机 1台三、实验内容1、认识51单片机开发系统的结构。
图1-1 51单片机开发系统的结构2、初步认识仿真器软件和Keil软件界面。
安装成功后,首次启动界面如下图:新建一个工程文件,点击“Project->New Project…”.选择工程文件要存放的路径,并且输入工程文件名,图片如下:点击Save 后弹出选择CPU 及型号的对话框:由于本开发板所配的单片机是STC 公司的,而KEIL 中并没有STC 公司的产品,不过STC 公司的单片机和传统的51 单片机是兼容的,所以这里我们就选择Atmel 公司的AT89C52。
单击左上角的New File,新建一个文件;保存新建的文件,单击保存按钮。
输入文件名*.ASM,这里必须以**.ASM为文件名。
保存好后我们还需要把文件加入到工程项目中,如下图所示在Source Group1 上单击右键,选择Add Files to ‘Group Source Group1’。
然后选择刚才建立的*.ASM文件,单击Add。
接着我们编译工程项目,如下图点击编译接下来我们生成.HEX 文件,如下图点击Option for Target。
在单击Output 选中Create HEX File,再单击OK。
3.STC-ISP 软件的安装与使用(1)选择单片机的型号STC89C52RC,设置正确的COM口。
(2)要先把开发板上的电源关掉(因为STC 的单片机内有引导码,在上电的时候会与计算机自动通讯,检测是否要执行下载命令,所以要等点完下载命令后再给单片机上电),然后点击如下图的Download/下载钮。
接着按下开发板上电源给单片机上电。
若出现上述图片,则说明已经给单片机成功下载了程序,并且已经加密。
4、简单程序调试(1) 传送指令设置内部RAM的值,(30H)=40H, (40H)=10H,单步执行下列程序,检查结果。
MOV R0,#30HMOV A,@R0MOV R1, AMOV B, @R1STOP: SJMP STOP执行后:(R0)= ,(R1)= ,(A)= ,(B)= ,(30H)= ,(40H)= 。
5、连接开发板,输出以下程序,编译下载后查看开开发板上的电路是如何工作的。
main:setb p1.0call delayclr p1.0call delayajmp maindelay: mov 50h,#228delayxms:mov 52h,#20 ;50h,51h,52h用于延时 50h为参数x 延时1*x msdelaya: mov 51h,#20djnz 51h,$djnz 52h,delayadjnz 50h,delayxmsret ;延时返回四、预习要求1、读懂各程序;2、预先给出运算结果,以便和实验结果比较;3、回忆“跟踪”、“单步”和“断点”调试方式的特点。
五、思考题1、为什么程序结束用“STOP:SJMP STOP”指令?用没有其他的停止方式? 51单片机启动后,是否一直不断地在执行指令?2、比较“跟踪”、“单步”和“断点”调试方式的特点。
实验二拆字程序一、实验目的1.进一步掌握KEIL软件的使用;2.进一步熟悉51单片机指令系统,掌握汇编语言程序的设计方法;3.进一步掌握程序的调试、诊断和排错方法。
二、实验仪器PC机1台三、实验内容编写并调试拆字程序:把外部数据存储器2000H的高位(高半字节)和低位(低半字节)拆开,高位送2001H单元的低位,低位送2002H单元的低位。
2001H、2002H单元的高半字节清零。
四、预习要求1.认真预习外部数据存储器读写操作、寄存器间数据传送、与/或操作和交换类指令。
2.编写拆字程序;3.想出一种以上用于调试自己程序的调试方法,并将其写在预习报告中。
五、实验要求1.编译、连接和调试自己编写的拆字程序;2.实验中认真记录程序在编译、连接和调试过程中出现的问题以及解决的方法,观察程序执行前后相关寄存器和存储单元内容的变化,并在实验总结中加以分析。
六、实验步骤1.启动Keil软件,新建工程和文件,注意文件用.ASM为扩展名。
2.源程序的输入在文本编辑窗口输入预习时编写好的拆字程序。
输入程序时,有时难免会输错一些字母、数字,甚至输漏了一些指令。
很常见的错误是把数字0输成了字母O,如把R0输成RO,P0输成PO,#0FH输成#OFH,所以输完程序后一定要仔细核对一遍。
程序的末尾要有一条伪指令END。
3.编译、连接源程序使用构造工具栏的“构造目标”按钮或“构造所有目标文件夹”按钮完成源程序文件的编译和连接。
编译过程中的信息将出现在输出窗口中的“构造”页中,如果源程序有语法错误,将有错误报告出现,双击该行,可以定位到出错的位置,对源程序反复修改之后,将产生后缀为“.hex”的目标代码程序(生成“.hex”文件可单击“目标选项”按钮,在弹出的对话框的“输出”标签中设置)。
4.调试程序对源程序成功地进行编译、连接后,使用文件工具栏上的按钮(或Ctrl+F5或菜单“[调试]/[开始/停止调试]”)可进入调试状态,出现一个调试工具栏。
分别使用全速执行、跟踪执行、单步执行、设置断点等方法来调试程序。
全速执行(功能键F5)是指一行程序执行完以后紧接着继续执行下一行程序,中间不停止,这样的程序运行速度很快,并可以看到该段程序执行的总体效果,即最终结果是正确还是错误,但如果程序有错,则很难确认错误出现在哪些程序行。
跟踪执行(功能键F11)是每次执行一行程序,执行完该行程序后即停止,等待命令执行下一行程序,此时可以观察该行程序执行完以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可发现程序中的问题所在。
单步执行(即过程单步,功能键F10)与跟踪执行基本类似,唯一不同在于它将汇编语言中的子程序或高级语言中的函数作为一个语句来全速执行。
执行调试程序时,同学们应当充分发挥自己的聪明才智,创造性地、灵活地运用这些手段来发现程序错误,从而调好自己的程序。
下面仅仅给出用全速执行调试程序的方法,同学们还可以用其他的方法来调试。
(1)完成源程序的编译和连接后,进入调试状态,使用菜单“[视图]/[存储器窗口]”打开存储器调试窗口,在“地址”后的编辑区输入X:0x2000,鼠标右键单击该单元选择快捷菜单“更新存储器X:0x002000”写入适当的数据,依照上述操作方式,往2001H、2002H中也写入适当的数据,并将其记录下来:(2000H)= ;(2001H)= ;(2002H)= 。
(2)单击调试工具栏上的“全速运行”按钮,则全速执行拆字程序。
运行完程序时,查看外部数据存储器2000H、2001H、2002H单元中的数据,并将其记录下来:(2000H)= ;(2001H)= ;(2002H)= 。
分析此数据,判断自己编写的程序是否正确。
如果程序不正确,分析错在哪里,并修改程序后再进行调试。
(3)修改存储单元的内容,再次运行源程序。
把外部数据存储器2000H单元的内容改为A5H,运行完程序时,将2000H、2001H、2002H单元中的数据记录下来:(2000H)= ;(2001H)= ;(2002H)= 。
(4)用单步执行和设置断点的方法调试程序,将调试过程写在实验报告中。
七、思考题试编写拼字程序,要求:把外部数据存储器2000H、2001H单元的低位(即低半字节)合并成一个字节(2000H、2001H单元的低位分别位于低半字节和高半字节),然后将其送入2002H单元。
参考程序:ORG 0000HLJMP STARTORG 0030HSTART: MOV DPTR,#2000HMOVX A,@DPTRMOV B,AANL A,#0FHINC DPTRMOVX @DPTR,AMOV A,BSWAP AANL A,#0FHINC DPTRMOVX @DPTR,ASJMP $END思考题:ORG 0000HLJMP STARTORG 0030HSTART: MOV DPTR,#2000HMOVX A,@DPTR ANL A,#0FH XCH A,BINC DPTR MOVX A,@DPTR ANL A,#0FHSW AP AORL A,BINC DPTR MOVX @DPTR,A SJMP $END实验三双字节无符号数乘法程序一、实验目的1.进一步掌握KEIL软件的使用;2.进一步熟悉51单片机指令系统,掌握汇编语言程序的设计方法;3.进一步掌握程序的调试、诊断和排错方法。
二、实验仪器PC机1台三、实验内容编写双字节(16位)无符号数相乘的移位加算法程序,实现(R2R3)×(R5R7)→R4R5R6R7。
四、预习要求4.认真预习乘法指令、循环移位指令;5.理解多字节无符号数的乘法原理;6.编写双字节无符号数乘法程序。
五、实验要求3.编译、连接和调试自己编写的双字节无符号数乘法程序;4.实验中认真记录程序在编译、连接和调试过程中出现的问题以及解决的方法,观察程序执行前后相关寄存器和存储单元内容的变化,并在实验总结中加以分析。
六、实验说明在80C51指令系统中,有一条乘法指令“MUL AB”,它只能对单字节无符号数相乘。
对于多字节数的乘法,必须编写相应的程序来实现,常用的方法有“移位加”和“移位乘”等。
为了说明“移位加”的乘法原理,先回顾一下二进制乘法手算方法,见图3-1。
1 0 1 1 被乘数X× 1 0 0 1 乘数Y1 0 1 1 乘数Y的最低位=1,部分积=X=1011,X左移1位,X=101100 0 0 0 0乘数Y的次低位=0,部分积=0,X左移1位,X=1011000 0 0 0 0 0 乘数Y的次高位=0,部分积=0,X左移1位,X=1011000+ 1 0 1 1 0 0 0 乘数Y的最高位=1,部分积=X=1011000,X左移1位0 1 1 0 0 0 1 1 积Z = ∑(部分积) = X×Y图3-1 手算乘法归纳上述算法为以下几点:(1)确定积Z的长度, 积Z清零;(2)从乘数Y的最低位开始,检查乘数Y的最低位的值;(3)如值为1,积Z加上被乘数X(即Z=Z+X) ,否则不加;(4)被乘数X左移1位;(5)依次检查乘数Y的前一位的值,重复(3);(6)直至乘数Y的最高位也检查并累加完毕,结束。