单片机应用实验指导书-实验1

实验部分

实验一 Keil集成开发环境练习和编程调试

实验名称:Keil集成开发环境练习和编程调试 学时安排:2学时 实验类别:综合性 实验要求:必做

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 一、实验目的和任务

1 熟悉Keil C51 集成开发环境的使用方法;

2 熟悉Keil C51 集成开发环境仿真条件下调试功能的使用。 二、实验原理介绍

Keil 集成开发环境为我们提供了强大的学习、调试和开发工具。我们可以利用这套工具在计算机上直接进行汇编语言的编辑、连接和调试。

在程序调试时,可以通过查看相关寄存器和存储器内容来判断程序的执行是否正确,通过修改相关寄存器和存储器的内容来改变程序,再执行,来修改和验证程序。 三、实验设备介绍

1 IBM PC 机一台 四、实验内容和步骤

1 编写程序,完成内存中两个字节内容的交换。

① 建立工程文件。双击桌面的Keil快捷图标,进入Keil集成开发环境。点击工具栏的Project选项,在弹出的下拉菜单中选择New Project命令,建立一个新μVision2工程,为工程命名(如MyProject-1.uv2);并选择将要使用的器件的型号(Philips公司P80/87C52X2 CPU)。

②编写程序,加入到刚才建立工程文件中。

在File下采用New命令以建立新文件,单击File→Save as,在弹出对话框的“文件名”栏编辑框中输入欲使用的文件名和正确扩展名(如Test1.asm),然后单击“保存”按钮;这样事先保存空白待编辑文件的好处是:Keil能自动识别关键字并标注不同颜色,提高编程效率。

在Project Workspace窗口内,选中Source Group1后点击鼠标右键,在弹出菜单中选择Add files to Group “Source Group1”(向工程中添加源程序文件)命令,选择刚创建的文件,单击Add命令即可把源程序文件添加到项目中。之后就可以编写程序内容,并注意及时保存文件。参考程序如下:

ORG

0000H MAIN

LJMP

ORG 0100H

;SP= ;R0= ;R1= ;(40H)= MOV R0,#30H MOV R1,#40H

MAIN: MOV SP,#60H

MOV @R0,#55H MOV @R1,#0AAH MOV A,@R1 XCH A,@R0 XCH A,@R1 NOP SJMP

;(30H)= ;A= ;A= (30H)= ;A= (40H)= $ ;该程序完成了 和 两字节的内容交换。

END

③汇编和连接:选择Project下的Rebuild all target files 对工程文件进行汇编和连接:如果出

错,系统会提示出错并指出出错地方和出错类型,请按照提示返回程序进行修改,直到系统提示没有错误,表明程序没有语法错误,可以进行动态调试了。

④动态调试的参数设置:选择Project下的Options for target ‘Target1’进行动态调试的参数设置,点击debug,再点击 Use Simulator,最后点击完成。

⑤对程序进行动态调试,查看相关寄存器、内存和外部存储器的内容。 将每行程序执行后的结果写到该行程序的注释部分。 重要提示:

常用工具条命令有开始/暂停动态调试

,单步执行

,执行到光标处

等。

查看存储器内容的方法:在存储区地址写上要查看的初始地址即可。比如:

D:0000H可查看内存RAM,X:0000H可查看外部RAM数据, C:0000H可查看ROM程序。 采用堆栈法也可以完成两字节内容的交换。(用下述程序替代上述虚线框中黑体字程序) MOV @R0,#33H ; (30H)=

MOV @R1,#44H MOV A,@R0 PUSH ACC PUSH ACC NOP POP POP

ACC ACC

; SP= A= ; (30H)= ; SP= A= ; (40H)= MOV @R0,A MOV @R1,A

MOV A,@R1

; (40H)= ; A=

; SP= (61H)= ; A= ; SP= (62H)=

2 编写一个数据填充和数据块搬移程序。

仿照实验内容和步骤1的过程,建立、编辑、汇编、连接和动态调试程序,查看和验证数据区的内容是否正确。参考程序如下:

3 编写一个多字节的算术运算程序。(视时间选做)

仿照实验内容和步骤1的过程,建立、编辑、汇编、连接和动态调试程序,将运行结果写到程序的注释部分。 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP,#60H MOV R1,#12H MOV R0,#34H MOV R2,#21H MOV R3,#0EFH ;下面是加法运算 MOV A,R0

ORG 0000H LJMP MAIN ORG 0100H MOV R0,#30H MOV R2,#16 MOV @R0,#'*' INC

R0

; R0指向30H单元 ; R2作循环计数器 ; 填充当前单元 ; 指针下移一个单元

; 未填完16个单元,返回 继续填充

MAIN: NEXT1:

DJNZ R2,NEXT1 MOV R1,#30H

;以下程序将30H开始的16个字节内容送到0100H开始的外部存储器中

MOV DPTR,#0100H ;

MOV R3,#10H ; 此处R3取值的理由是: MOV A,@R1 MOVX @DPTR,A INC INC

R1 DPTR

NEXT2:

DJNZ R3,NEXT2 SJMP $ END

;R1R0= ;R3R2=

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4