本文由zaoangy贡献
doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
实验一熟悉MCS-51寻址方式及传送类指令
一.实验目的: 1.熟悉uVision2集成调试环境 2.熟悉
MCS-51寻址方式及传送类指令二.uVision2集成调试环境的使用uVision2是德国Keil Software公司用于多种嵌入式微处理器的一个理想、快速、
可靠的程序调试器。
此调试器包含一个高速模拟器,能够让你模拟整个8051
系统,包括片上外围.....器件和外部硬件。
1.创建项目uVision2是以项目来管理你的任务,它可以使你的8051应用系统设计变得简单。
要创建一个应用,你需要按下列步骤进行操作:①第一次使用,首先为我们编写的实验程序在D盘上新建一个文件夹D:\单片机实验;②启动uVision2,新建一个项目文件并从器件库中选择一个器件,操作步骤如下:直接在桌面上点击uVision2程序图标就可以启动它。
要新建一个项目文件,从uVision 2的Project菜单中选择New Project,这将打开一个标准的Windows对话框,此对话框要求你输入项目文件名,例如为实验一新建项目:D:\单片机实验\ex1.vu2。
紧接着,Select
Device for Target,即为你的项目选择一个CPU。
我们选择Gene ric下的8032。
2.新建一个源文件你可以用菜单选项File-New来新建一个源文件。
这将打开一个空的编辑窗口让你输入你的源代码。
编辑后,我们把我们的实验程序保存为D:\单片机实验\dpj1.asm。
3.将你的源文件加入到你的项目中在你的P roject Workspace窗口双击Target1及Suorce Group1,将你的目标系统一直展开到看到源文件组,如图1(a所示。
右击Suorce Group1,出现Add files选项, 选择它可打开一个标准的文件对话框,从对话框中选择你刚刚生成的文件dpj1.asm 。
(a
(b
图1Suorce Group1中的文件STARTUP.A51是大多数不同的8051CPU准备的启动代码。
我们暂且先不用它,用右键点击删除它(Remove File…STARTUP.ASM‟ 。
现在你的项目中只包含一个源文
件:dpj1.asm,如图1(b。
4.编译(或汇编你的源程序依次点击Project、Build Target即可编译(或汇编你的源程序 (留意一下,在工具栏上可找到相应快捷按钮。
在下面的输出窗口Output Window(如图2可看到编译(汇编的结果,应该没有错误才可继续下面实验。
否则修改你的源程序,直到没有错误为止。
如图2 4.调试你的程序依次点击Debug,Start/Stop Debug Session进入调试模式(也可利用快捷按钮,并且如再按一次该按钮,则又切回到程序编辑状态。
你现在就可以采用指令单步、函数单步、运行到光标处行、连续运行等命令调试你的程序(这些命令在Debug下Step、Step over,Run to Cursor line、Go。
也可利用快捷按钮。
你也可以设置断点后,连续执行程序进行调试。
如程序运行到中间想从头再来,只要按RST按钮即可。
常用调试快捷按钮符号Rst说明复位连续运行指令单步函数单步Go Step into Step over Run to Cursor line运行到光标处行Start/Stop Debug Session调试模式/编辑模式切换
5.存储器、寄存器的查看、修改在调试程序时,经常需要查看存储器内容,你可以查看80C52内的4个存储器逻辑空间的任一个。
在调试模式下,依次点击V iew,Memory Window,你可以看到包含4个存储器空间的窗口,你在第一个存储器空间的Address栏内输入C:0,即可看到从0000H开始的一段程序存储内容;你也可以在其它Address栏内分别填入X:0、D:0、I:0就可以查看外部数据存储器空间、直接寻址的片内存储空间(包括片内
00-7FH的RAM,及80H-0FFH的SFR、间接寻址的片内存储空间(包括片内00-7FH的RAM,及8032的80H-0FFH的数据RAM 。
如要修改Memory Window内存储单元内容,可用鼠标右键点击选定存储单元, 根据提示即可修改。
在Project Workspace窗口,你还可以看到8031的所
有寄存器,这对调试程序也很重要。
如要查看单片机的外围部件,像端口P0-
P3,定时器T0、T1等,可点击Peripherals。
三.传送类指令练习MCS-51
单片机的存储空间如表所示:
数据空间片内/片内片外寻址方式空间范围表示
方法RAM直接间接 00-7FH DATA片内SFR直接寻址80-FFH SFR RAM间接寻址80H-FFH IDATA片外RAM间接寻址0000-FFFFH XDATA片内ROM间接寻址0000-0FFFH CODE
程序空间片外ROM间接寻址0000-0FFFH CODE ROM 间接寻址1000H-0FFFF H CODE
1.直接寻址只能在DATA区和SFR中进行,如下例MOV A,
03H;把地址03H中的数移入累加器MOV43H,22H;把地址22H
中的数移入地址43H中MOV02H,C;把Cy中的数移入位地址02H
中MOV42H,#18H;把立即数18移入地址42H中MOV0 9H,
P1;把端口1中的数移入地址09H中 2.间接寻址要使用DPTR,PC,R0,
R1寄存器作为指针访问各存储器。
可访问的空间为CODE、IDATA、XDATA 存储区,对DATA存储区也可进行间接寻址。
只能用直接寻址方式对位地址进行寻址。
DATA和IDATA区寻址:MOV R1,#22H;设置R1为指向DATA区内的地址22H的指针MOV R0,#0A9 H;设置R0为指向IDATA区内的地址0A9H的指针MOV A,@R1;读入地址22H的数据MOV@R0,A;将累加器中的数据写入地址A9H INC R0;RO
中的地址变为AAH IN C R1;R1中的地址变为23H MOV34H,
@R0;将地址AAH中的数据写入34H MOV@R1 ,#67H;把立即数写入地址23H XDATA区寻址:MOV DPTR,#3048H;DPTR指向外部存储区MOVX A,@DPTR;读入外部存储区地址3048H中的数INC DPTR;指针加一 MOV A,#26H;立即数26H写入A中MOVX
@DPTR,A;将26H写入外部存储区地址3 049H中MOV R0,#87H; R0指向外部存储区地址87H MOVX A,@R0;将外部存储区地址87H
中的数读入累加器中CODE区寻址:MOV DPTR,#TABLE_BASE;DPTR 指向表首地址MOV A,#5;把偏移量(立即数5装入累加器中MOVC A, @A+DPTR;从表中读出数据到累加器中(5的平方
SJMP INDEX2TABLE_BASE:DB0,1,4,9,16,25,36;平方表INDEX2:MOV A,# 5;把偏移量(立即数5装入累加器中ADD A,
#2;由于SJMP EXIT指令占用2字节, 修正偏移量MOVC A,@A+PC;从表中读出数据到累加器中(5的平方SIMP EXIT EXI T:DB
0,1,4,9,16,25,36;平方表SJMP¥
四.实验步骤 1.熟悉uVision2集成调试环境的使用。
2.按照上述二.2条, 新建一源程序文本文档,并将第三步中字体为蓝色的程序录入。
3.
在已录入的程序前插入如下程序,作为内存初始化;dpj1MOV A,#0MOV
R0,#0FFH INI:MOV@R0, A INC A DJNZ R0,INI 4. 5. 6. 7.在录入的程序最后加上:END作为程序结束保存文件名为“dpj1.asm”(如该文件已存在,也可存为其它*.asm文件。
切换到调试模式,先将光标置于上述
内存初始化程序的下一行,也即第2步录入的正式程序的第一行,利用Run to Cursor line,直接将程序运行到正式程序的第一行。
单步逐条向下执行指令。
每执行一条指令,都要分析一下指令源操作数、目的操作数在存储空间的哪个单元,看一看你所理解的指令执行结果与实际运行结果是否符合,并且把每条指令执行后目的操作数的值记录下来。
将实验结果整理后写到实验报告上。
8.
1。