搜档网
当前位置:搜档网 › 基于 Keil C51 集成开发环境的仿真与调试

基于 Keil C51 集成开发环境的仿真与调试

基于 Keil C51 集成开发环境的仿真与调试
基于 Keil C51 集成开发环境的仿真与调试

基于Keil C51 集成开发环境的仿真与调试

一.实验目的

熟悉Keil C51 集成开发环境调试功能的使用和DP-51PRO 单片机综合仿真实验仪的使用。二.实验设备及器件

IBM PC 机一台

DP-51PRO 单片机综合仿真实验仪一台

三.实验内容

调试仿真功能是指DP-51PRO 单片机综合仿真实验仪运行单片机P87C52X2 内部的MON51 监控程序,把用户的应用程序装载到外部SRAM 中,从而实现运用Keil C51 集成开发环境所提供的所有调试命令来调试用户的应用程序或仿真用户的应用系统,然后按照以下内容建立文件并编译仿真调试。

ORG 8000H

LJMP Main

ORG 80F0H

Main:

MOV R7, #0

Loop:

MOV R6, #0

DJNZ R6, $

DJNZ R6, $

DJNZ R6, $

DJNZ R6, $

DJNZ R7, Loop ;延时

CPL P1.0 ; P 1 .0 取反

CPL P1.1 ; P 1 .1 取反

CPL P1.2 ; P 1 .2 取反

CPL P1.3 ; P 1 .3 取反

CPL P1.4 ; P 1 .4 取反

CPL P1.5 ; P 1 .5 取反

CPL P1.6 ; P 1 .6 取反

CPL P1.7 ; P 1 .7 取反

SJMP Main

;

END

四.实验要求

熟练掌握结合DP-51PRO 单片机综合仿真实验仪和Keil C51 集成开发环境进行仿真调试。五.实验步骤

1.用40 针排线把DP-51PRO 实验仪上的A1 区J76 接口和A2 区J79 接口相连,然后使用导线把A2 区的J61 接口与D1 区的J52 接口相连。

2.对DP-51PRO 实验仪上电,首先,在A1 区,把JP13 中的SRAM_E 和FLASH_E 两个跳线座的短路器拔走(即不短接),把MOD_SW1 开关拨到LOAD 模式,即在下载状态

下,用户应将本实验仪所提供的专用仿真调试芯片P87C52X2插入到DP-51PRO单片机综合仿真实验仪的U13锁紧座上;然后ISP 跳线JP14 跳开(即不短接),短接JP15 的1、2 两个跳线(TXD、RXD),然后按下复位按键“RESET”。此时,DP-51PRO 单片机综合仿真实验仪即进入下载状态。然后接上串口线,在PC 机上双击DPFlash 下载软件的快捷图标(DPFALSH 安装版在光盘的SOFTWEAR 目录内,运行安装即可),运行DPFlash 下载软件,这时将出现DPFlash 下载软件的操作界面。在DPFLASH 上型号:的下拉菜单选择DP-51PRO ,然后选择适当的通信口即可。另外DPFlash 下载软件还内嵌一个串口调试器,菜单栏的串口调试器,用户可以使用它进行串口调试。然后在主界面中点击编程命令按钮,在出现如图2.24 所示的编程窗口中选择其它编程选择栏的编程MON51 选项,单击编程命令按钮即可自动把MON51.HEX 监控程序下载到DP-51PRO 单片机综合仿真实验仪的Flash 中。若无异常,则提示编程正常结束,这时关闭该窗口退出DPFlash 软件。把DP-51PRO 单片机综合仿真实验仪A1 区的工作模式选择开关(MOD_SW1)切换到RUN 处,然后按一下复位键(RESET),MON51 程序就开始运行了。此时,DP-51PRO 单片机综合仿真实验仪即进入调试状态。调试仿真功能是指DP-51PRO 运行单片机P87C52X2 内部的MON51 监控程序,把用户的应用程序装载到外部SRAM 中,从而实现运用Keil C51 集成开发环境所提供的所有调试命令来调试用户的应用程序或仿真用户的应用系统。3.关闭DPFlash 软件。把DP-51PRO 单片机综合仿真实验仪A1 区的工作模式选择开关(MOD_SW1)切换到RUN 处,然后按一下复位键(RST),MON51 程序就开始运行了。此时,DP-51PRO 单片机综合仿真实验仪进入调试状态。

4.用户使用Keil C51 集成开发环境建立工程、编辑与编译“实验内容”所列的程序。(1) 双击Keil C51 快捷图标,进入Keil C51 集成开发环境,这时Keil C51 集成环境

自动打开上次正确退出时所编辑的工程项目文件

(2) 点击菜单栏上的Project 项,会弹出下拉式菜单,这时选择Option for target ‘target 1’将出现调试环境设置界面。

(3) 第1项Target 属性的设置,对于在DP-51PRO 单片机综合仿真实验仪上进行的

仿真、调试,由于MON51 监控程序已经占用了从0000H-7FFFH 地址单元的程序存储空间,因此用户的应用程序必须从8000H 地址单元开始存放,即用户应设置Off-Chip Code Memory 栏内的Eprom 选项。

(4) Debug 环境的设置:首先选择Debug 项,进入设置画面,这时就可以对其中的每项进行具体设置了,(要点:在该选项中Use Simulator 是软件模拟仿真,它只能对程序的语法及其结构做一般性的分析,与硬件没有联系;而Use 选项则是硬件仿真,且根据所选用的驱动而使用不同的硬件仿真方式,对于DP-51PRO 单片机综合仿真实验仪而言应该选择Keil Monitor-51 Driver 选项)。同时它的Settings 项还为我们提供了一个串口通信设置环境,通过它我们可以灵活设置串行通信的端口和波特率,其设置环境如图 2.30 所示,但请注意:由于在调试模式下,DP-51PRO 单片机综合仿真实验仪需要与上位机进行通信,因此它们的通信协议必须一致,波特率也必须相同且为9600bps。当然要进入系统调试环境设置我们也可以点击工具栏上的快捷图标进入到环境设置窗口,Keil C51 集成开发环境为我们提供了很多这样的快捷功能,好好利用往往能达到事半功倍的效果。

(5) 至于其它的选项用户可按默认值进行设置或不用设置,最后点击确定加以确认。5.(1) 打开示范程序的项目文件Led_Light.μV2,这时在Keil C51 的Project Window

项目观察窗口中看到工程项目结构。在Source Group 1 中可以看到文件Led_Light.asm,它就是该项目的核心—用户若调试的源程序文件。在此用户应特别注意:在DP-51PRO 单片机综合仿真实验仪下调试时,用户的程序代码是从8000H 单元开始存放的,因此用户程序中定义程序块存放的伪指令ORG 0000H 应该为ORG 8000H、

伪指令ORG 0100H 应该为ORG 8100H 。若用户需要调试 C 语言源程序,则还需要添加Startup.a51 系统配置文件(用户可以在\Keil\C51\Lib 目录下找到它,为了保证该文件不会被破坏,用户可以把它拷贝到该工程目录中),其主要功能是定义数据段、程序段和堆栈的大小及其起始地址、RAM 的初始化、程序重新定位、初始化启动代码等等,用户必须把CSEG AT 0 代码改为CSEG AT 8000H,即用户的应用程序应从8000H 开始存放,当然中断矢量地址也应跳转到相应的高端地址单元,如外部中断0 的入口地址则应该是8003H。

(2) 在DP-51PRO单片机综合仿真实验仪上进行的调试是一种软硬件相结合的综合调

试方法,因此用户在使用DP-51PRO 单片机综合仿真实验仪进行仿真调试实验前应正确设置工程项目的软硬件环境,本例子的硬件设置请参考第3 章实验二的实验步骤。在KEIL 的环境下点击工具栏Project 的选项,在弹出的下拉菜单中选择Option for Target ‘Target 1’命令,对hello.uv2 工程项目进行调试环境设置。

(3) 修改完毕执行Project 菜单中的Rebuild all target files 命令对工程项目文件进行重

新编译、连接,此时会出现“编译正确、连接成功”的提示信息。若编译出错,它将提示出错的原因及所在的位置,更正后重新编译直至完全正确为止,接下来点击菜单栏内的“Debug”菜单,在出现的下拉式菜单中选择Start/Stop Debug Session 调试命令,这样即可把用户程序就下载到DP-51PRO 单片机综合仿真实验仪的SRAM 中。

(4) 此时出现如图2.33 所示调试画面,看到了吗?或许和您看到的不一样,请不用担

心。若在您的调试界面中没有看到变量观察窗口,您可以点击菜单栏中的View 选项,在弹出如图2.34 所示的下拉菜单中选择Watch & Call Stack Window 即可以打开变量观察窗口,您可以使用同样的方法打开其它相关窗口。

(5) 此时请注意:当您调试C 语言程序时,应在Keil C 环境的Command 输入框下

执行g,main 命令;而当您调试的是汇编语言程序时,在Keil C 环境的下执行g 命令进入程序调试状态。这时程序指针PC 已指向第一命令语句AJMP MAIN 处,并等待用户输入各种调试命令。Keil C51 给出了许多调试快捷图标和调试命令,为了使用户更好的使用这些命令,下面将介绍几种常用的调试命令及方法。断点巧妙的设置一些断点,能够更好帮助用户分析程序的运行机制、程序中变量的变化状况,提高工作效率。μVision2 可以用几种不同的方法定义断点,即使在程序代码编译前,您也可以在编辑源程序的时候设置Execution Breaks,设断点前要从View 菜单中选中File Toolbar 选项,让主窗口的顶部出现File Toolbar 工具栏。断点可以用以下的方法定义和修改:

1. 用File Toolbar 按纽。在Editor 或Disassembly 窗口中的代码行点击断点按钮

即可在该设置断点。

2. 用快捷菜单的断点命令。在Editor 或Disassembly 窗口中的代码行点击鼠标右

键在打开的快捷菜单中选择Insert/Remove Breakpoint命令也同样可以在该行

设置断点。

3. 在Output Window-Command 输入框,可以使用Breakset、Breakkill、

BreakEnable、Breaklist、Breakpoint 命令来设置断点。

如果已经在某行设置了断点,再次在此行设置断点将取消该断点,断点设置成功后,会在该行的行首出现红颜色的断点标志。

复位CPU

用Debug 菜单或工具栏的Reset CPU 命令。在不改变程序的情况下,若想使程序重新开始运行,这时执行此命令即可,执行此命令后程序指针返回到0000H 地址单元,另外,一些内部特殊功能寄存器在复位期间也将重新赋值,例如A 将变为00H,DPTR 为0000H,

SP 为07H,I/O 口变为0FFH。

单步跟踪(F11)

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

一次此命令,程序将运行一条指令(以指令为基本执行单元),当前的指令用黄色箭头标出,每执行一步箭头都会移动,已执行过的语句呈现绿色。单步跟踪在C 语言环境调试下最小的运行单位是一条C 语句,如果一条C 语句只对应一条汇编指令,则单步跟踪一次可以运行C 语句对应一条汇编指令;如果一条 C 语句对应多条汇编指令,则一次单步跟踪要运行完对应的所有汇编指令。在汇编语言调试下,可以跟踪到每一个汇编指令的执行。

单步运行(F10)

用Debug 工具栏的Step Over 或快捷命令Step Over 按钮即可实现单步运行程序,

此时单步运行命令将把函数和函数调用当作一个实体来看待,因此单步运行是以语句(这一条语句不管是单一命令行还是函数调用)为基本执行单元。

执行返回(Ctrl+F11)

在用单步跟踪命令跟踪到了子函数或子程序内部时,可以使用Debug 菜单栏中的Step Out of Current Function 或快捷命令按钮Step Out 即可实现程序的PC指针返回

到调用此子程序或函数的下一条语句。

执行到光标所在命令行(Ctrl+F10)

用工具栏或快捷菜单命令Run tol Cursor Line 即可执行此命令,使程序执行到光标

所在行,但不包括此行,其实质是把当前光标所在的行当作临时断点。

全速运行(F5)

用Debug 工具栏的Go 快捷命令Run 命令按钮即可实现全速运行程序,当然若程序中已经设置断点,程序将执行到断点处,并等待调试指令;若程序中没有设置任何断点,当μVision2 处于全速运行期间, μVision2 不允许任何资源的查看,也不接受其它的命令。

停止调试(Crtl+F5)

(6) 由于Led_light 程序使用了系统资源P1 口,为了更好的观察这些资源的变化,用户可以打开它们的观察窗口。点击菜单栏Peripherals 选项,在打开的下拉菜单中选择

I/O-Ports 选项中的Port 1 命令,即可打开并行I/O 口P1 的观察窗口。

(7) 点击菜单栏的Debug 选项,在弹出的下拉菜单中执行Step 命令,观察项目窗口的特殊功能寄存器区域,看看PC 指针和堆栈指针的值有何变化。多次执行单步运行指令Step,注意观察P1 观察窗口和DP-51PRO 单片机综合仿真实验仪上用逻辑笔检测P1 口状态。最后选择Go 命令全速运行程序,此时DP-51PRO 单片机综合仿真实验仪上看的P1.0、P1.1、P1.2 电平在变化。

(8) 程序调试完毕可执行Debug 菜单栏中的Start/Stop Debug Session 命令停止调试在退出仿真调试模式后想再次进入仿真调试,可以先按一下A1 区的复位键(RST)。用户可以在仿真调试环境下设置断点,单步,全速运行等。在调试过程中用户可以看见D1 区的LED 的亮灭是由用户程序来控制的。

五、实验注意事项:

1、理解硬件仿真调试状态下和脱机运行状态下的存储空间分配。

2、本实验中,要求学生对Keil C开发环境和DP-51PROC实验仪熟悉,掌握软件调试,硬件仿真调试,脱机三种不同的运行方式,关键是Options的设置。

3、硬件调试或运行的运行的时候打开电源,不要保持电源的常开状态,以免实验箱运行时间过长烧坏。

4、Debug时,需关掉DPFlash,否则调试时开发环境报错。

相关主题