单片机原理及应用实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理及应用实验报告(一)
姓名:###
学号:*********
班级:0902501班
指导教师:###
院系:信息与电气工程学院
实验一熟悉菊阳JY2X00仿真开发系统
一、实验目的
1、了解单片机开发系统的作用、功能;
2、了解、掌握单片机开发系统的窗口结构及菜单命令的使用;
3、观察 P1 口的锁存功能。
二、实验内容
1、了解主菜单的结构及使用;
2、观察、修改内部/外部数据存储器、工作寄存器、特殊功能寄存器的内容;
3、观察P1口的锁存功能。
三、实验设备及仪器
1、单片机实验装置及开发系统一套;
2、PC 机一台。
四、实验步骤
1、启动菊阳开发系统
运行应用程序JY2X00 IDE,在仿真器设置中选择‘使用软件仿真’。
进入菊阳单片机集成开发环境界面,该界面包括:主菜单、主窗口及观察窗口等。
2、观察、修改内部数据存储器的内容
①观察内部数据存储器的内容
主窗口左侧的观察窗口中,点击Idata选项,显示内部数据存储器单元的内容。
点击其它选项,可观察通用寄存器,特殊功能寄存器,外部存储器,可位寻址位等内容。
②修改内部数据存储器、工作寄存器、部分特殊功能寄存器
将光标移至要修改的单元,,可以在选中的数据上直接修改设置某地址的数据值(十六进制)。
用同样的方法可以修改工作寄存器、特殊功能寄存器。
3、了解主菜单的功能与使用
下面通过输入、修改、调试一个简单的程序,熟悉、掌握主菜单命令的功能和使用方法。
①建立/打开程序
用鼠标单击主菜单“文件”命令,选择“新建…”,集成开发环境将打开一个编辑窗口。
在该窗口中可输入一个新程序。
对于新建程序,要在编辑完成后保存程序,“文件”栏中选择“保存文件”并输入文件名称(扩展名为.ASM),如:TEST.ASM。
②汇编程序
建立工程文件,用‘添加模块到工程’将新建文件加入到当前工程中。
单击主菜单中“编译”命令,选择“编译”或“全部编译”命令。
汇编当前打开的编辑窗口中的汇编程序。
如
果程序中存在错误,修改后再次汇编,直至汇编成功。
③运行程序
程序完成汇编后,就可以运行了。
为了方便程序的调试,伟福仿真器设置了多种运行方式,可以通过菜单命令或快捷键命令方式来执行。
(ⅰ)步入(单步跟踪运行)
单步运行可以一次执行一条指令。
在主菜单中,单击“调试”菜单,再在下拉菜单中单击“单步跟踪运行”或按“步入”快捷图标或按F7 键进行单步跟踪调试程序。
每执行一条指令,高亮光条移向下一条指令。
单步运行时观察相关单元(内部数据存储器、工作寄存器、部分特殊功能寄存器)的变化。
程序运行结束后,观察相应单元的内容,分析运行结果是否正确。
(ⅱ)步越(单步运行)
单步运行时,如果不想进入“DELAY”延时子程序里,在“DELAY”子程序调用处,按F8 键单步执行就可以全速执行子程序调用(即单步越过子程序),从而真实反映子程序延时情况。
也可以用“自动单步跟踪运行”或“自动单步运行”。
单步间的时间间隔可以调整。
程序运行结束后,观察相应单元的内容,分析运行结果是否正确。
(ⅲ)运行到光标处与断点运行
运行到光标处:将光标移到程序想要暂停的指令行,选择“调试”菜单,再在下拉菜单中单击“运行到光标处”或F4 键或按“执行到光标处”快捷图标。
程序全速执行到光标所在行。
运行到断点处:将光标移到源程序窗口的左边“Gutter”区域,单击左键设置断点,也
可以用F6键将光标所在行设置为断点。
断点有效图标为,无效断点的图标为。
断点设
置好后,就可以用全速执行的功能,全速执行程序,当程序执行到断点时,会暂停下来,这时你可以观察程序中各变量的值,及各端口的状态,分析运行结果是否正确。
(ⅳ)全速运行程序
单击“调试”菜单,在下拉菜单中单击“连续运行”命令,(或者使用快捷键F9),程序连续运行。
单击“调试”菜单下的“暂停运行”命令(或单击“暂停”快捷按钮)程序暂停后,就可以看到运行后的结果。
全速运行程序后,分析运行结果。
用上述几种运行方式,可以发现程序存在的绝大多数错误。
全速运行程序完全模拟单片机的运行情况,可以了解单片机的软件、硬件的工作过程。
④观察复位状态
用命令“复位”(Ctrl-F2)使单片机复位,观察并记录单片机各主要单元的内容。
4、观察P1 口的锁存功能
5、输出锁存
将菊阳仿真器的仿真头安装在DICE-5210K的‘用户仿真CPU’插座上(用户CPU区,E1区)。
将单片机扩展资源区(D1区)的JP1(P1口)与“发光二极管输出模块”区(D5区)中的L1—L8插针用8线扁平电缆相连。
经检查确认无误后,打开实验箱后的电源开关。
进入菊阳单片机集成开发环境界面,在仿真器设置中选择‘使用硬件仿真’。
改变P1口寄存器的内容,观察发光二极管显示变化。
编写一段程序,改变P1口的内容,观察发光二极管显示变化。
单步、连续运行程序,仔细观察现象,做好记录,并尝试解释观察到的现象。
P1口输入:关闭电源,将单片机扩展资源区(D1区)的JP1(P1口)用8线扁平线与开关电路连接,如图所示,经检查无误后打开实验装置上的电源开关。
改变开关K1—K8的位置,复位单片机,观察P1口寄存器的内容。
编写一段程序,读入P1口的内容,观察读入的内容与开关状态的关系。
编写一段程序,读P1口,改变开关K1—K8的位置,观察读入数据。
五、代码与结果
1、步骤3中原程序与修改后程序:
程序说明:测试程序TEST.ASM实现的是往地址30H以后的16个单元内依次写入从00H到10H递增的数据,每两次写入之间调用延时函数DELAY,延时时间大约为10ms。
软件运行仿真后结果为:
2、步骤5中原程序与修改后程序:
程序说明:LED控制程序实现从地址30H开始依次取16个数据送到P1端口对LED进行控制,原程序中没有延时程序,硬件仿真时观察不到LED的变化效果,借鉴步骤3中延时子程序,将延时时间设置为1s,可以明显的观察到LED的变化情况,由于步骤3的操作,地址30H以后的数据为00H到10H依次递增,因而灯的亮灭情况就是从全亮开始按二进制进位方式变化。
软件运行仿真后结果为:
3、复位后状态:
执行命令Ctrl-F2 (复位),各状态如下:即累加器A 、PSW 等清0,SP 指针为07H ,
I/O 口寄存器全部置1。
六、思考题
1、怎样修改内部数据存储器单元的内容?
可以直接在Idata 中选中存储单元更改数据内容;也可以用MOV 指令跟多种寻址方式进行赋值更改。
2、菊阳集成开发软件有几种程序运行方式?F7和F8两种快捷键命令有何不同?
不包括开始调试、暂停运行和复位共有6种:步入、步越、运行到光标处、运行到指定地址、自动单步运行、自动单步跟踪运行。
F7为步入,单步执行,不跳过子程序而进入单步执行;F8为步越,也是单步执行,但是在遇到子程序时不会进入子程序单步运行,而是立即执行直接跳过子程序。
3、在运行程序时屏幕最下方的参数有什么变化?
最下方最左面参数显示光标的坐标,即当前执行指令在程序中的位置,第二个参数为PC 指针的值,显示的是下一条指令的起始地址,第三个参数为DPTR ,显示要访问外部RAM 的地址值,之后是累加器A 、B 的内容,然后是仿真环境的一些参数没有变化。
七、课堂作业
作业要求:8位LED 灯按顺序依次亮起
程序代码:
ORG 0000H ;起始地址0000H
AJMP MAIN ;跳转主程序
ORG 0030H
MAIN: MOV A,#0FEH ;只令一个LED 亮
LOOP: MOV P1,A
RL A ;循环移位依次亮起
ACALL DELAY ;调用延时程序
SJMP LOOP DELAY: MOV R7,#100 ;延时子程序0.1s DEL1: MOV R6,#500 DEL2: DJNZ R6,DEL2 DJNZ R7,DEL1 RET END
实验二 单片机算数运算实验设计
一、实验目的
1、进一步了解开发系统的功能和使用;
2、了解程序设计与调试的基本过程;
3、了解简单程序和分支程序程序的特点和设计。
二、实验内容
1、简单程序的设计、输入、调试和运行;
2、分支程序的设计、输入、调试和运行;
三、实验设备及仪器
1、单片机实验装置及开发系统一套;
2、PC 机一台。
四、 实验步骤
1、设计、调试双字节乘法程序,功能为:(R2R3)*(R6R7)→R4R5R6R7
输入设计好的程序检查无误后,汇编。
向R2R3和R6R7中输入多组不同的数据,运行 程序,观察R4R5R6R7中的内容,分析运行结果是否正确。
2、求符号函数⎪⎩
⎪⎨⎧<=>=)0()0()0(1-01X X X Y ,设:X →30H ,Y →31H
输入设计好的程序检查无误后,汇编。
向30H 中输入多个不同的数据,运行程序,观 察31H 中的内容,分析运行结果是否正确。
3、将ASCII 码转换十六进制数
设ASCII 码放在累加器A 中,结果放回到A 中,如果A 中的内容不是十六进制的数的ASCII 码,用户标志位F0置1。
输入设计好的程序检查无误后,汇编。
向A 中输入多个不同的数据,运行程序,观察A 中的内容,分析运行结果是否正确。
五、代码与结果
1、双字节乘法运算程序:
设计思路如下图,R2R3*R6R7可以分开利用MUL AB 指令实现;
第一步计算R3*R7,然后通过交换指令XCH 便将最低位保留到R7中,同时R7的数据交换到A 中进行下一步的计算;将高位B 中的数据暂存到@R0即30H 处;
第二步计算R2*R7,然后低位A 暂存31H 处,高位B 暂存到32H 处;
第三部计算R3*R6,然后可以通过XCH将低位A中数据与R6中数据交换,R6中保存结果第二位,同时A中存R6的值方便下一步的计算;将高位B中数据暂存到33H处;
第四步计算R2*R6,直接将低位A数据存放R5,最高位B数据存放R4;
第五步求和,首先要清零进位Cy,让30H与31H相加,结果暂存31H处;然后让32H与33H 进位相加,结果暂存33H处;然后让最高位R4进位加0,接收进位Cy;
第六步继续求和,再次清零进位Cy,将31H与R6相加,结果放入R6;然后是33H与R5进位相加,结果放入R5;最后再让最高位R4与0进位相加接收进位Cy;
计算结束,最终结果放在R4R5R6R7中,手动改变R2R3和R6R7的值,观察输出结果,验证。
程序代码:
2、符号函数程序:
程序说明:在非零情况下,通过与80H相与获得包含符号位信息的结果,不为零就是负数,标识0FFH(-1)。
3、码转换程序:
十六进制数相关的ASCII码值表及相应程序:
六、思考题
1、JY集成开发环境提供了那些编辑命令?它们的功能是什么?
剪切、复制、粘贴、全选、撤销、重复、查找、替换、光标定位到
功能:方便程序设计,便于程序移植、快速修改以及纠错查询。
2、下列程序是否正确?为什么?
ORG 0000H
START:MOV A,30H
CJNE A,#00H,NZ
AJMP LL
NZ:JC MM
MOV A,#01H
AJMP LL
MM:MOV A,#81H
LL:MOV 31H,A
END
编译无错误,但是对于JC MM执行无效果,因为程序中不涉及进位C的改变,也就是MM永远不执行;另外十六进制的-1为FF。
3、用程序运算3B89H×660DH=?
运行结果为17BB9BF5,经计算器验证正确。
4、MCS-51有几条条件转移语句?它们是什么?
一共有4个助记符8条指令,分别是:
JZ rel ;累加器为零跳转
JNZ rel ;累加器不为零跳转
CJNE A,direct,rel ; 直接寻址字节与A不等跳转
CJNE A,#data,rel ; 立即数与A不等跳转
CJNE Rn,#data,rel ; 立即数与寄存器不等跳转
CJNE @Ri,#data,rel ; 立即数与间接寻址RAM不等跳转
DJNZ Rn,rel ; 寄存器减1不为零跳转
DJNZ direct,rel ; 地址字节减1不为零跳转。