基于Keil的单片机指令系统实验.docx

上传人:b****2 文档编号:13910868 上传时间:2023-06-19 格式:DOCX 页数:22 大小:655.14KB
下载 相关 举报
基于Keil的单片机指令系统实验.docx_第1页
第1页 / 共22页
基于Keil的单片机指令系统实验.docx_第2页
第2页 / 共22页
基于Keil的单片机指令系统实验.docx_第3页
第3页 / 共22页
基于Keil的单片机指令系统实验.docx_第4页
第4页 / 共22页
基于Keil的单片机指令系统实验.docx_第5页
第5页 / 共22页
基于Keil的单片机指令系统实验.docx_第6页
第6页 / 共22页
基于Keil的单片机指令系统实验.docx_第7页
第7页 / 共22页
基于Keil的单片机指令系统实验.docx_第8页
第8页 / 共22页
基于Keil的单片机指令系统实验.docx_第9页
第9页 / 共22页
基于Keil的单片机指令系统实验.docx_第10页
第10页 / 共22页
基于Keil的单片机指令系统实验.docx_第11页
第11页 / 共22页
基于Keil的单片机指令系统实验.docx_第12页
第12页 / 共22页
基于Keil的单片机指令系统实验.docx_第13页
第13页 / 共22页
基于Keil的单片机指令系统实验.docx_第14页
第14页 / 共22页
基于Keil的单片机指令系统实验.docx_第15页
第15页 / 共22页
基于Keil的单片机指令系统实验.docx_第16页
第16页 / 共22页
基于Keil的单片机指令系统实验.docx_第17页
第17页 / 共22页
基于Keil的单片机指令系统实验.docx_第18页
第18页 / 共22页
基于Keil的单片机指令系统实验.docx_第19页
第19页 / 共22页
基于Keil的单片机指令系统实验.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于Keil的单片机指令系统实验.docx

《基于Keil的单片机指令系统实验.docx》由会员分享,可在线阅读,更多相关《基于Keil的单片机指令系统实验.docx(22页珍藏版)》请在冰点文库上搜索。

基于Keil的单片机指令系统实验.docx

基于Keil的单片机指令系统实验

实验1基于Keil的单片机指令系统实验

一、实验目的:

掌握KeiluVision4的项目文件创建、编译、运行和软件仿真的基本操作方法

掌握数据传送类指令和算术运算类指令

二、实验仪器:

计算机、KEIL软件

三、实验步骤:

在KEIL中编写汇编程序(参考教材第1章)

(1).打开KEIL软件。

双击桌面快捷图标即可进入如图1.1所示的集成开发环境编辑操作界面,主要包括三个窗口:

工程项目窗口、编辑窗口和输出窗口。

图1.1μVision2编辑操作界面

单击Project菜单,在弹出的下拉菜单中选中NewProject选项,新建一个项目,如图1.2所示。

图1.2Project界面

然后选择你要保存的路径,输入工程文件的名字(比如保存到uv目录里,工程文件的名字为shiyan1),如下图1.3所示,然后点击保存。

图1.3Project保存设置界面

这时会弹出一个对话框,要求你选择单片机的型号。

可以根据你使用的单片机来选择,keil几乎支持所有的51核的单片机,这里以Atmel的89C51来说明,如下图1.4所示。

首先选择Atmel公司,然后点击左边的+号选择AT89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定,在随后弹出的对话框选择“否”。

图1.4器件选择

完成以上步骤后,屏幕如下图1.5所示。

图1.5初始化编辑界面

首先进行选项设置,将鼠标指向“Target1”并单击右键,再从弹出的右键菜单中单击“OptionsforTarget”选项,如图1.6所示。

图1.6“OptionsforTarget”选项

从弹出的“Options”窗口中选择“Output”标签栏,并如图1.7所示设置其中各项:

图1.7“Output”标签栏

首先选择“SelectFolderforObjects”按钮,为后面生成*.hex文件选择一个存放目录,然后在后面的空格里面为将要生成的hex文件命名一个文件名,再将下面的“CreateHEXFile”前的选项前打:

“√”,最后确认即可。

此处的存放目录和文件名要记清,后面将要用到该hex文件并要将其烧录到单片机内部。

2、建立一个新的ASM汇编语言程序并编译

到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。

(1)在菜单栏中,单击“File”菜单,再在下拉菜单中单击“New”选项,或者直接点击工具栏的快捷图标

来建立一个新的编辑窗口,此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了。

此处建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“SaveAs”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名,如此处键入Text1.asm,然后,单击“保存”按钮,如图1.8所示。

注意:

;如果用汇编语言编写程序,则扩展名为(.asm),且必须添加扩展文件名。

图1.8保存源程序

(2)回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键,弹出如下图1.9所示菜单。

图1.9弹出菜单栏

然后单击“AddFilestoGroup‘SourceGroup1’”屏幕如下图1.10所示,在文件类型处默认为CSourcefile(*.c),因为前面我们保存的是汇编语言的文件,故需要下拉选择AsmSourcefile(*.s*;*.src;*.a*),这样在上面就可以看到刚才保存的汇编语言文件Text1.asm,双击该文件则自动添加至项目,点击Close关闭对话框。

图1.10添加文件对话框

对比图1.11和图1.9,可以看出二者的不同点:

在添加了汇编语言文件后,在SourceGroup1文件夹左出现了一个+号(图1.11左图),点击+号展开就看到了刚才添加的Text1.asm文件(图1.11右图)。

图1.11添加文件前后工程栏的变化

(3)然后就可以在右侧的编辑区进行汇编源程序的输入了。

在输入指令时,读者可以看到事先保存待编辑文件的好处:

Keil会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。

程序输入完毕后别忘了再次保存,最后如下图1.12所示。

图1.12程序输入完毕后状态

(4)程序文件编辑完毕后,单击“Project”菜单,再在菜单中单击“BuiltTarget”选项(或者使用快捷键F7),或者点击工具栏的快捷图标

来进行编译,如图1.13所示。

(5)如果有错误,则在最后的输出窗口会出现所有错误所在的位置和错误的原因,并有“Targetnotcreated”的提示。

通过双击该处的错误提示,则在上面的编辑区错误指令处左面就有蓝色箭头提示,然后对当前的错误指令进行修改,如图1.14所示。

图1.14错误提示

(6)将所有提示过的错误进行修改,然后再次重复(4)的操作进行编译,直至出现“"shiyan1"-0Error(s),0Warning(s)”,说明编译完全通过,如图1.15所示。

图1.15编译通过提示

3、调试并仿真

编译成功后,就可以进行调试并仿真了。

单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5),或者点击工具栏的快捷图标

就可以进入调试界面,如下图1.16所示

图1.16调试界面

左面的工程项目窗口给出了常用的寄存器R0-R7以及a、b、sp、dptr、pc、psw等特殊功能寄存器的值。

在执行程序的过程中可以看到,这些值会随着程序的执行发生相应的变化。

在存储器窗口的地址栏处输入C:

0000H后回车,可以观看所有单片机片内程序存储器的内容,如下图1.17所示。

如果没有出现存储器窗口,则可以通过菜单栏View\MemoryWindow将存储器窗口调出查看。

下图1.17用横线画出来的部分就是已经编辑的源程序转化成的机器语言的十六进制数(或者说是对应的机器码)。

如果在存储器窗口的地址栏处输入D:

00H后回车,则可以观看所有单片机片内数据存储器的内容,如图1.18所示。

图1.17程序存储器窗口

图1.18数据存储器窗口

在联机调试状态下可以启动程序全速运行、单步运行、设置断点等,单击“Debug菜单/Go”选项,启动用户程序全速运行。

下面介绍几种常用的调试命令及方法。

(1)

复位CPU

用Debug菜单或工具栏的ResetCPU命令可以复位CPU。

在不改变程序的情况下,若想使程序重新开始运行,执行此命令即可。

执行此命令后程序指针返回到0000H地址单元。

另外,一些内部特殊功能寄存器在复位期间也将重新赋值。

例如,A将变为00H,DPTR变为0000H,SP变为07H,I/O口变为0FFH。

(2)

全速运行(F5)

用Debug工具栏的Go快捷命令Run命令按钮即可实现全速运行程序。

当然若程序中已经设置断点,程序将执行到断点处,并等待调试指令;若程序中没有设置任何断点,在

Vision2处于全速运行期间,

Vision2不允许任何资源的查看,也不接受其他命令。

(3)

单步跟踪(F11)

用Debug工具栏的Step或快捷命令StepInto命令按钮可以单步跟踪程序。

每执行一次此命令,程序将运行一条指令(以指令为基本执行单元)。

当前的指令用黄色箭头标出,每执行一步箭头都会移动,已执行过的语言呈绿色。

在汇编语言调试下,可以跟踪到每一个汇编指令的执行。

Vision2处于全速运行期间,

Vision2不允许任何资源的查看,也不接受其他命令。

(4)

单步运行(F10)

用Debug工具栏的StepOver或快捷命令StepOver按钮,即可实现单步运行程序,此时单步运行命令将把函数和函数调用当作一个实体来看待,因此单步运行是以语句(该语句不管是单一命令行还是函数调用)为基本执行单元。

(5)

执行返回(Ctrl+F11)

在用单步跟踪命令跟踪到子函数或子程序内部时,可以使用Debug菜单栏中的StepOutofCurrentFunction或快捷命令按钮StepOut,即可实现程序的PC指针返回到调用此子程序或函数的下一条语句。

(6)

停止调试(Ctrl+F5)

由于Led_Light程序使用了系统资源P1口,为了更好地观察这些资源的变化,用户可以打开它们的观察窗口。

选择Peripherals

I/O-Ports

Port1命令,即可打开并行I/O口P1的观察窗口。

4、实验内容:

(一)片内RAM数据传输

1.打开KEIL软件。

2.点击PROJECT-NEW-UVISION,输入工程名称、保存的文件夹,选择ATMEL的AT89C51。

3.点击FILE-NEW。

点保存,输入文件名,并加后缀,C语言加.C、汇编语言加.ASM。

输入程序,并再点保存。

编辑以下内容源程序,保存文件为SS.ASM。

ORG00H

LJMPMAIN

ORG30H

MAIN:

MOV30H,#2AH

MOV31H,#33H

MOVR0,#30H

MOVA,@R0

MOVR2,A

INCR0

MOV03H,@R0

SJMP$

END

4.将程序文件加入工程。

5.设置PROJECT中的OPTION选项,生成HEX文件。

6.点

编译。

7.点击

,再分别点击

全速运行和单步运行程序,观察结果

八.实验结果:

R0单元的内容应为31H,30H单元的内容为2AH,31H单元的内容应为33H,A累加器的内容应为2AH,R2工作寄存器的内容应为2AH,03H单元的内容应为33H。

(二)片内RAN与片外RAM数据传输

1、先file---new建asm文件01.asm

Mov30H,#34H;预先在30H中赋值为34H

MOVA,30H

MovDPTR,#2000H

Movx@DPTR,A

NOP

NOP

NOP;因为NOP是仅耗时但什么也不做的空指令,对本程序无影响,也可以不写。

END

2、建新工程,Projectànewproject,选AtemlàAT89C51,导入文件01.asm。

注意,对初学者,一个工程里只能有本程序01.asm,无关的程序要删除,新试验一个程序最好重新建工程,以保证一个工程里只有你要试验的那一个程序。

3、可见程序

4、编译通过后,得到下图所示信息

5、点debug下的start/stop开始调试,step和stepover都是单步调试,step是遇到子程序或中断也要进入进行单步调试,stepover是遇到子程序或中断当一句一次执行完。

本程序为子程序,二者是一样的。

我们执行一句得到:

可见A中的值为34H,

是将要执行的语句,再执行一步,可见:

DPTR中数据为2000H

6、点viewàmemorywindows,输入d:

30H回车,得到:

可见片内RAM30H处已赋值34H

7、再输入x:

2000回车,再执行三步得到:

可见片外RAM2000H处的值为34h。

已把片内RAM的30H处的值送往片外RAM的2000H处了。

至此,程序调试完毕。

(三)算数运算指令编程设计

计算下面各式中两个无符号数的和及差,观察CY,并记录运算结果,并求出结果的真值。

(1)计算200+200

(1)计算两个单字节数的和的参考程序:

ORG0000H

MAIN:

MOVA,#200

ADDA,#200

SJMP$

END

 

(pc)

(psw)

(sp)

(A)

(P)

(CY)

(ac)

备注

ORG0000H

MAIN:

MOVA,#200

C:

0X0000

0X01

0X07

0XC8

1

0

0

(A)的地址D:

0X00E0

ADDA,#200

C:

0X0002

0XC0

0X90

0

1

1

SJMP$

C:

0X0000

END

结果

(A)=0X90,(cy)=1,结果为400

2)减法的参考程序

(1)两个单字节数的减法程序

ORG0000H

MAIN:

CLRC

MOVA,#100

SUBBA,#200

SJMP$

END

 

(pc)

(psw)

(SP)

(A)

(P)

(CY)

(ac)

(OV)

ORG0000H

MAIN:

CLRC

C:

0x0000

0X00

0X07

0X00

0

0

0

0

MOVA,#100

C:

0x0001

0X01

0X64

1

SUBBA,#200

C:

0x0003

0XC4

0X9C

0

1

1

1

SJMP$

C:

0x0005

END

结果

-100

(2)两个双字节数的减法程序

ORG0000H

MAIN:

CLRC

MOVA,#LOW(36589)

SUBBA,#LOW(16542)

MOV30H,A

MOVA,#HIGH(36589)

SUBBA,#HIGH(16542)

MOV31H,A

MOVA,#0

SUBBA,#0

MOV32H,A

SJMP$

END

(pc)

(psw)

(A)

(P)

(CY)

(ac)

(OV)

(30H)

(31H)

(32H)

ORG0100H

MAIN:

CLRC

C:

0x0100

0X00

0X00

0

0

0

0

MOV,#low(36589)

C:

0x0101

0XED

SUBBA,#low(16542)

C:

0x0103

0X41

0X4F

1

1

MOV30H,A

C:

0x0105

0X4F

MOVA,#HIGH(36589)

C:

0x0107

0X40

0X8E

0

SUBBA,#HIGH(16542)

C:

0x0109

0X04

0X4E

0

1

MOV31H,A

C:

0x010B

0X4E

MOVA,#0

C:

0x010D

0X00

SUBBA,#0

C:

0x010F

0X00

0

MOV32H,A

C:

0x0111

0X00

SJMP$

C:

0x0113

END

结果

2047

(30H)

(31H)

(32H)

地址

D:

0X0030

D:

0X0031

D:

0X0032

课后实验练习

项目1数据传送类指令

分项1通用传送指令

①以A为目的操作数的指令

MOVR0,#23;把立即数23赋给R0

MOVA,R0;把工作寄存器R0中的数据传送给累加器A

实验任务:

观察程序运行过程中R0和累加器A的值是如何变化的?

②以直接地址为目的操作数的指令

MOV23H,#34H;把立即数34H传送到内部数据存储器RAM的23H单元中

实验任务:

观察内部数据存储器RAM的23H单元的数值是多少?

③以间接地址为目的操作数的指令

MOVA,#56H;把立即数56H传送给累加器A

MOVR0,#23H;把立即数23H传送给工作寄存器R0

MOV@R0,A;把累加器A的数值传送给RAM的23H单元

实验任务:

观察A和R0的数值变化,观察程序运行完毕后内部数据存储器RAM的23H单元的数值是多少?

将最后一条指令变为MOVA,@R0;再观察运行结果。

④访问片外数据存储器

MOVDPTR,#100H;把立即数100H传送给数据指针DPTR

MOVA,#55H;把立即数55H传送给累加器A

MOVX@DPTR,A;把累加器A的数值传送给片外数据存储器

实验任务:

观察DPTR和A的数值变化,观察程序运行完毕后外部数据存储器的100H单元的数值是多少?

⑤访问程序存储器指令

MOVA,#2

MOVDPTR,#200H

MOVCA,@A+DPTR

RET

200HDB00

201HDB01

202HDB04

203HDB09

204HDB16

205HDB25

206HDB36

207HDB49

208HDB64

209HDB81

实验任务:

理解查表指令,观察累加器A的数值变化过程。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2