资源描述
个人收集整理 勿做商业用途
第2章 µVision2与PROTEUS使用基础 2
2.1 µVision2集成开发环境 2
2。1.1 文件(File)、编辑(Edit)、视图(View) 3
2.1.2 项目(Project)、调试(Debug)、Flash 5
2。1.3 外围器件 (Peripherals)、工具(Tools)、视窗(Window) 6
2。2 用µVision2建立与调试工程 7
2。2。1 工程创建、设置、编译与链接 7
2。2.2 用mVision2调试工程 12
2。2.3 C51程序调试举例说明-—HELLO。C 16
2.2。4 Keil C51的调试技巧及举例 18
2.3 PROTEUS快速入门 22
2.3.1 集成PROTEUS ISIS环境 22
2。3。2 电路原理图设计 27
2.4 PROTEUS仿真工具介绍 34
2。4。1 探针 34
2.4.2 虚拟仪器 35
2.4。3 信号发生器 36
2.4.4 仿真图表 36
2.5 PROTEUS软件中的C51程序运行与调试 37
2。5。1 驱动的安装 38
2。5。2 Keil和PROTEUS的配置 40
2。5.3 Keil和PROTEUS的调试过程 41
本章小结 41
习题 41
第2章 µVision2与PROTEUS使用基础
mµVision2集成开发环境IDE(Integration Design Environment)是一个基于Windows的软件开发平台,包含一个高效的编辑器、一个项目管理器和一个MAKE工具。µVision2支持所有的Keil C51工具,包括C语言编译器(C51)、宏汇编器(A51)、链接/定位器(BL51)、库(LIB51)、目标代码到HXE的转换(OH51)、实时操作系统(RTX51)及调试器(dScope51、 tScope51和Monitor51),可以完成编辑、编译、链接、调试、仿真等整个开发流程。
PROTEUS是英国Labcenter electronics公司研发的EDA工具软件。PROTEUS不仅是模拟电路、数字电路、模/数混合电路的设计与仿真平台,更是目前世界上最先进、最完整的多种型号微控制器(单片机)系统的设计与仿真平台。它真正实现了在计算机上完成从原理图设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整的电子设计、研发过程。PROTEUS从1989年问世至今,经过了20多年的使用、发展和完善,功能越来越强,性能越来越好。
本章主要介绍µVision2和PROTEUS的应用基础,更详细的介绍请读者参阅有关书籍.
2.1 µVision2集成开发环境
mVision2 IDE是基于Windows的开发平台,开发人员可以用mVision2编辑器或其他编辑器编辑C语言或汇编语言文件,然后分别由C51语言和A51语言编译生成目标文件(。OBJ)。目标文件可由LIB51创建生成库文件(.LIB),也可与库文件一起经L51链接定位生成绝对目标文件(.ABS).绝对目标文件由OH51转换成标准的HEX文件,以供调试器进行源代码级调试,也可由仿真器直接对目标板(用户板)调试,或直接写入程序存储器如EPROM、Flash中进行验证。
在mVision2中,可以通过键盘或鼠标选择开发工具的命令、设置和选项,也可以通过键盘输入程序文本。mVision2集成环境中有菜单栏、可以快速选择命令按钮的工具栏、源代码文件窗口、对话框窗口和信息显示窗口。软件可同时打开和查看多个源文件,通过鼠标或键盘可移动或调整窗口的大小。mVision2界面如图2—1所示。
图2—1 µVision2集成环境
mVision2菜单栏提供了丰富的操作菜单,提供了文件操作、编辑器操作、项目管理、选项设置、程序调试、外部程序执行、窗口管理,以及在线帮助等多项功能。
2。1。1 文件(File)、编辑(Edit)、视图(View)
1.文件菜单(File)
文件菜单项的命令、工具条图标、默认的快捷键及说明描述如表2—1所示。
表2—1 文件菜单(File)
File菜单
工具栏
快捷键
描述
New
Ctrl+N
创建新的源文件
Open
Ctrl+O
打开已存在的文件
Close
关闭当前文件
Save
Ctrl+S
保存当前文件
Save All
保存所有文件
Save As
保存并重新命名当前文件
Device Database
维护器件数据库
Print Setup
设置打印机
Print
Ctrl+P
打印当前文件
Print Preview
打印预览
1~10
打开最近使用的源文件
Exit
退出mVision2
2.编辑菜单(Edit)
编辑菜单项的命令、工具条图标、默认的快捷键及说明描述如表2—2所示。
表2-2 编辑菜单(Edit)
Edit菜单
工具栏
快捷键
描述
Home
移动光标到本行的开始
End
移动光标到本行的末尾
Ctrl+Home
移动光标到当前文件的开始
Ctrl+End
移动光标到当前文件的末尾
Ctrl+ß
移动光标到其前面单词词首
Ctrl+à
移动光标到其后面单词词首
Ctrl+A
选择当前文件全部内容
Undo
Ctrl+Z
撤销上次操作
Redo
Ctrl+Shift+Z
重复上次操作
Cut
Ctrl+X
剪切所选文本
Ctrl+Y
剪切当前行所有文本
Copy
Ctrl+C
复制所选文本
Paste
Ctrl+V
粘贴
Indent Selected Text
将所选文本向右缩进一个制表符位
Unindent Selected Text
将所选文本向左缩进一个制表符位
Toggle Bookmark
Ctrl+F2
设置/取消当前行书签
Goto Next Bookmark
F2
移动光标至下一个书签处
Goto Previous Bookmark
Shift+F2
移动光标到上一个书签处
Clear All Bookmarks
清除当前文件的所有书签
Find
在当前文件中查找文本
F3
重复查找上次查找文本
Shift+F3
向前重复查找光标所在处文字
Ctrl+F3
向后重复查找光标所在处文字
Replace
替换文本
Find in Files
在多个文件中查找
Goto Matching Brace
选择相匹配的一对大括号、圆括号或方括号所包括的内容
3.视图菜单(View)
视图菜单项的命令、工具条图标及说明描述如表2-3所示。
表2-3 视图菜单(View)
菜单
工具栏
描述
Status Bar
显示/隐藏状态条
File Toolbar
显示/隐藏文件工具栏
Build Toolbar
显示/隐藏编译工具栏
Debug Toolbar
显示/隐藏调试工具栏
Project Window
显示/隐藏项目窗口
Output Window
显示/隐藏输出窗口
Source Browser
打开资源浏览器
Disassembly Window
显示/隐藏反汇编窗口
Watch & Call Stack Window
显示/隐藏观察和堆栈窗口
Memory Window
显示/隐藏
Code Coverage Window
显示/隐藏代码报告窗口
Performance Analyzer Window
显示/隐藏性能分析窗口
Symbol Window
显示/隐藏字符变量窗口
Serial Window #1
显示/隐藏串口1的观察窗口
Serial Window #2
显示/隐藏串口2的观察窗口
Toolbar
显示/隐藏自定义工具栏
Periodic Window Update
程序运行时,周期刷新调试窗口
Workbook Mode
显示/隐藏窗口框架模式
Options
设置颜色、字体、快捷键和编辑器的选项
2。1.2 项目(Project)、调试(Debug)、Flash
1.项目菜单(Project)
项目菜单项的命令、工具条图标、默认的快捷键及说明描述如表2—4所示。
表2—4 项目菜单(Project)
菜单
工具栏
描述
New Project
创建新工程
Import uVision1 Project
导入并转换一个mVision1的工程
Open Project
打开已存在的工程
Close Project
关闭当前的工程
Target Environment
定义工具包含文件和库的路径
Select Device for Target
从器件数据库中选择一个CPU
Remove
从工程中删除一个组或文件
Options
设置对象、组或文件的工具选项
Build Target
编译修改过的文件并生成应用
Rebuild all target files
重新编译所有的文件并生成应用
Translate
编译当前文件
Stop build
停止生成应用
1~10
打开最近使用过的工程
2.调试菜单(Debug)
编辑菜单项的命令、工具条图标、默认的快捷键及说明描述如表2—5所示。
表2-5 调试菜单(Debuge)
Debug菜单
工具栏
快捷键
描述
Start/Stop Debugging
Ctrl +F5
启动/停止调试模式
Go
F5
全速运行程序直到激活的断点
Step
F11
单步执行进入函数
Step Over
F10
单步执行越过函数
Step out of Current Function
Ctrl +F11
单步执行跳出当前函数
Run to Cursor Line
Ctrl +F10
全速运行程序至光标所在行
Stop Running
Esc
停止程序运行
Breakpoints
打开断点对话框
Insert/Disable Breakpoint
在当前行设置/清除断点
Enable/Disable Breakpoint
在当前行使能/禁止断点
Disable All Breakpoint
禁止程序中所有断点
Kill All Breakpoint
清除程序中所有断点
Show Next Statement
显示下一条可执行的语句或指令
Enable/Disable Trace Recording
使能跟踪记录,用于指令的观察
View Trace Records
观察以前执行的指令
Memory Map
打开存储器影像对话框
Performance Analyzer
打开性能分析器的设置对话框
Inline Assembly
对某一行重新汇编,可修改汇编代码
Function Editor
编辑调试函数和调试配置文件
3.Flash菜单及命令(Flash)
Flash菜单项的命令、工具条图标及说明描述如表2-6所示。
表2—6 Flash菜单及命令Flash
Flash菜单
工具栏
描述
Download
下载程序到Flash
Erase
擦除Flash原有程序
Configure Flash Tool
打开Flash配置对话框
2。1。3 外围器件 (Peripherals)、工具(Tools)、视窗(Window)
1.外围器件菜单(Peripherals)
外围器件菜单项的命令、工具条图标及说明描述如表2-7所示。
表2—7 外围器件菜单Peripherals
Peripherals菜单
工具栏
描述
Reset CPU
复位CPU
Interrupt
打开中断对话框
I/O-Ports
打开I/O对话框
Serial
打开串行口对话框
Timer
打开定时器对话框
对话框的列表和内容由所选择的CPU类型决定,不同类型的CUP的外设不同,该菜单项目也不同,例如有些器件带有A/D、D/A转换等外设资源。
2.工具菜单(Tools)
工具菜单项的命令及说明描述如表2—8所示。
表2-8 工具菜单命令及描述
Tools菜单
描 述
Setup PC-Lint
设置Gimpel Software的PC—Lint程序
Lint
用PC—Lint处理当前编辑的文件
Lint all C Source Files
用PC-Lint处理项目中所有的C源代码文件
Setup Easy—Case
设置Siemens的Easy—Case程序
Start/Stop Easy—Case
运行/停止Siemens的Easy—Case程序
Show File(Line)
用Easy—Case处理当前编辑的文件
Customize Tools Menu
添加用户程序到工具菜单中
3.视窗菜单(Window)
视窗菜单项的命令、工具条图标及说明描述如表2-9所示.
表2—9 视窗菜单及视窗命令
Window菜单
工具栏
描述
Cascade
层叠所有窗口
Tile Horizontally
横向排列窗口(不层叠)
Tile Vertically
纵向排列窗口(不层叠)
Arrange Icons
排列主框架底部的图标
Split
把激活的窗口拆分为若干窗格
Close All
关闭所有的窗口
1~10
激活选中的窗口
另外,mVision2还有SVCS菜单和帮助菜单,SVCS用来配置软件版本控制系统的命令,帮助菜单可以打开在线帮助手册和技术支持、离线帮助手册及mVisiond2版本号等信息。
2.2 用µVision2建立与调试工程
mVision2集成开发环境有一个工程管理器,使得8051系列单片机应用系统的程序设计更为简单方便.利用mVision2建立的应用项目是多文件模式,所有的文件包括源程序(包括C语言程序、汇编语言程序)、头文件及说明性的技术文档都可以放在工程项目文件里统一管理。
源程序编译通过并不意味着程序执行后就能实现用户的既定目标,可能还隐含着很多看不见的错误,这就需要对源程序进行调试。调试相关的命令在Debug菜单下.
2。2。1 工程创建、设置、编译与链接
1.工程创建
mVision2是一个标准Windows应用程序,直接点击程序图标就可以启动它,mVision2启动后,程序窗口的左边为一个工程管理窗口。该窗口中有3个标签,分别是Files、Rges和Books,分别显示当前项目的文件结构、CPU的工作寄存器和部分特殊功能寄存器,以及所选CPU的附加说明文件,当首次启动mVisions2时,3个标签全是空的。
从mVision2的Project菜单中选择New Project,将打开如图2-2所示的标准的Windows对话框,给将要建立的工程文件起一个名字,并选择合适的存储位置,然后单击“保存"按钮,出现下一个对话框。
这个对话框要求用户选择目标CPU型号,从图中可以看出,Keil支持的CPU种类繁多,几乎所有目前流行的芯片厂家的CPU型号都包含于内。用户可根据实际情况选用的CPU,在器件厂商列表中单击所用器件厂商名字前的“+",展开之后选择对应型号即可。
选择好CPU型号后,会弹出如图2-3所示的对话框,询问用户是添加标准的8051启动文件(STARTUP.A51),单击“是”按钮,启动文件自动添加到工程文件组中。
图2—2 创建新工程对话框 图2-3 启动代码添加对话框
文件STARTUP。A51是8051系列CPU的启动代码,启动代码主要用来对CPU数据存储器进行清零,并初始化硬件和重入函数堆栈指针等.用户也根据自己所用目标硬件来修改启动文件,以适应实际需要。
使用菜单File/New或单击工具栏的新建文件按钮,即可在项目窗口的右侧打开一个新的文本编辑窗口,在该窗口中输入源程序代码,然后保存文件。注意保存时必须加上扩展名。源文件的编写也可以使用另外的文本编辑器。
虽然源文件已创建并保存好了,但此时与工程项目并无任何关系,还需要采用下述方式把其添加至项目中。如图2—4所示,右击Project窗口中Files标签页中的“Source Group 1"弹出快捷菜单,单击菜单中的“Add Files to Group 'Group 1’”选项,可打开一个如图2-4所示的对话框,从对话框中选择用户创建的源文件,单击Add按钮即可把其加入之项目中.
图2—4 添加文件对话框
2.工程设置
工程建立好之后,还要对工程进一步的设置,以满足实际需要。mVision2允许为目标硬件及其相关元件设置必要的参数.mVision2还可以设置C51语言编译器、A51汇编器、链接及定位和转换等软件开发工具选项。使用鼠标或键盘可以选择相应的项目或更改选项设置.
在选择“Project/Options for Target”命令弹出的对话框中,可以通过各个选项卡定义目标硬件及所选的所有相关参数。各目标硬件选项卡说明如表2—10所示.
表2-10 目标硬件选项卡说明
选项
描述
Target
定义应用的目标硬件
Output
定义Keil工具的输出文件并让定义生成处理后执行的用户程序
Listing
定义Keil工具输出的所有列表文件
C51
设置C51编译器的特别工具选项,如代码优化或变量分配
A51
设置汇编器的特别工具选项,如宏处理
BL51 Locate
定义不同类型的存储器和存储器的不同段的位置。典型情况下,可选择Memory Layout from Target Dialog 来获得自动设置
BL51 Misc
其他与链接器相关的设置,如告警或存储器指示
Debug
Vision2 Debugger的设置
Utilities
文件和文件组的文件信息与特别选项
(1)Target选项
软件默认的选项为目标(Target)选项,可设置的主要参数及其描述如下。
①Xtal(MHz)
Xtal(MHz)用来设置单片机的工作频率,默认值是所选CPU的最高可用的频率值,如果单片机所用晶振是11。0592MHz,那么就在文本框里输入11.0592即可。
②Use On–chip ROM (0x0–0xFFF)
Use On–chip ROM (0x0–0xFFF)是使用片上的Flash ROM。例如,At89c52有8KB的Flash ROM,就要用到这个选项。如果单片机的EA引脚接高电平,要选这个选项;如果单片机的EA接低电平,表示使用外部ROM,那么不要选中该选项。
③Off–chip Code memory
Off–chip Code memory是在片外所接ROM的开始地址和大小,如果没有外接程序存储器,那么不要输入任何数据.假如使用一个片外的ROM,地址从0x8000开始,Size则为外接ROM的大小.
④Off–chip Xdata memory
Off–chip Xdata memory可以输入外接的Xdata。例如,接一个片外62256,则可以指定Xdata的起始地址为0x4000,大小为0x8000。
⑤Code Banking
Code Banking是使用Code Banking 技术,Keil C51可以支持程序代码超过64KB的情况,最大可以有2MB的程序代码。如果代码超过64KB,那么就要使用Code Banking技术来支持更多的程序空间。Code Banking支持自动的Bank的切换,它建立一个大型的系统的需求例如,要在单片机里实现汉字字库,实现汉字输入法,都要用到该技术.
⑥Memory Model
单击Memory Model下三角按钮,会有3个选项:
lSmall为变量存储在内部RAM里;
lCompact为变量存储在外部RAM,使用8 位页间接寻址;
lLarge为变量存储在外部RAM里,使用16位间接寻址.
一般使用Small 来存储变量,单片机优先把变量存储在内部RAM里,如果内部RAM 不够才会存到外部RAM中。Compact的方式要自己通过程序来指定页的高位地址,编程比较复杂。Compact模式适用于比较少的外部RAM 的情况。Large 模式是指变量会优先分配到外部RAM中。要注意3种存储方式都支持内部256字节和外部64KB的RAM,区别是变量优先存储在哪里.除非不想把变量存储在内部RAM,才使用后面的Compact、Large模式。因为变量存储在内部RAM里,运算速度比存储在外部RAM 要快的多,大部分的应用都是选择Small的模式.
⑦Code Rom Size
单击Code Rom Size下三角按钮,共有3个选项:
lSmall:“Program 2K or less"选项适用于程序存储空间只有2KB 的单片机,所有跳转地址只有2KB,如果代码跳转超过2KB 就会出错。
lCompact:“2K functions,64k program"选项表示每个子函数的程序大小不超过2KB,整个工程可以有64KB的代码。
lLarge:“64K program”选项表示程序或子函数大小都可以大到64KB。使用code bank程度大小还可以更大.Code Rom Size选择Large方式速度不会比Small慢很多,所以一般没有必要选择Compact或Small 的方式,通常情况下一般选择此选项即可。
⑧Operating
单击Operating下三角按钮有3个选项:
lNone选项表示不使用操作系统;
lRTX–51 Tiny选项表示使用Tiny 操作系统;
lRTX–51 Full 选项表示使用Full 操作系统。
Keil C51提供了Tiny系统,Tiny 是一个多任务操作系统,使用定时器0作为任务切换。一般用11。0592MHz时,切换任务的速度为30ms。如果有10个任务同时运行,那么切换时间为300ms,同时不支持中断系统的任务切换,也没有优先级。因为切换的时间太长,实时性大打折扣,对内部RAM的占用也过多.多任务操作系统一般适合于16位、32位这样的速度更快的CPU。
Keil C51 Full是比Tiny要好一些的系统,但需要用户使用外部RAM,支持中断方式的多任务和任务优先级,但Keil C51里不提供该运行库。
一般情况下不使用操作系统,即该项的默认值为None.
(2)Output选项
设置对话框中的“Output”页面.
①Select Folder for Object:单击该按钮可选择编译后目标文件的存储目录,如果不设置,就存储在项目文件的目录里。
②Name of Executable:设置生成目标文件的名字,默认情况下和项目文件名字一致。目标文件可以生成库或OBJ、HEX等文件格式.
③Create Executable:如果要生成OMF和HEX文件,一般选中Debug Information和Browse Information.选中这两项,才有调试所需要的详细信息,比如要调试C语言程序,如果不选中,调试时无法看到高级语言编写的程序。
④Create HEX File:选中该项后,编译之后即可生成HEX文件.默认情况下该项未选中。如果要把程序写入硬件必须选中该项,这一点容易被初学者忽视。
⑤Create Library:选中该项是将生成lib库文件。一般的应用是不生成库文件的。默认情况下该项未选中.
⑥After Make栏中有以下几个选项。
Beep when complete:编译完成后发生蜂鸣声。
Start Debugging:编译完成后即启动调试,一般不选.
Run User Program #1,Run User Program #2:设置编译完成后所要运行的其他应用程序。
(3)Listing选项
“Listing”标签页用于调整生成的列表文件选项。
①Select Folder for Listing
该按钮用来选择列表文件存放目录,默认情况下为项目文件所在目录.
在汇编或编译完成后将生成(*.lst)的列表文件,在链接完成后也可产生(*。m51)的列表文件,该页用于对列表文件的内容和形式进行细致的调节。这两个文件可以告诉用户程序中所使用的idata、idata、bit、xdata、code、RAM、ROM等相关信息,以及程序所需要的代码空间。
实际使用中,一般选中“C Compile Listing”下的“Assemble Code”项,选中该项可以在列表文件中生成C语言源程序所对应的汇编代码。
②C51语言标签页的设置选项
用于对Keil的C编译器的编译过程进行控制,其中比较常用的是“Code Optimization”组。
该选项中的“Level”是优化等级,C51语言在对源程序进行编译时,可以对代码进行9级的优化,默认为第8级,一般无须修改,如果在编译中出现问题,可以尝试降低优化级别。
“Emphasis”是选择编译优先方式,第1项是代码量优化(最终生成的代码量最小),第2项是速度优化(最终生成的代码速度最快),第3项是默认。默认情况下是速度优先,可根据需要更改。
(4)Debug选项
Debug标签页用来设置mVision2调试器,其选项如图2-5所示.
图2—5 Debug选项
从图中可以看出,仿真有两种方式:“Use Simulator”(软件模拟)和“Use:Keil Monitor—51 Driver”(硬件仿真).软件模拟是纯粹的软件仿真,此模式下,不需要实际的目标硬件就可以模拟80C51单片机系列的很多功能,在硬件做好之前,就可以测试和调试嵌入式应用程序。mVision2 可以模拟很多外围部件,包括串行口、外部I/O和定时器。外围部件设置是在从器件数据库选择CPU时选定的.
硬件仿真选项有高级GDI驱动和Keil Monitor-51驱动,运用此功能用户可以把Keil C51嵌入到自己的系统中,从而实现在目标硬件上调试程序.若要使用硬件仿真,则应选择Use选项,并在该栏后的驱动方式选择框内选这时的驱动程序库。
Load Application at Start:选择此选项,Keil会自动装载程序代码。
Go till main:调试C语言程序时可选择此项,PC会自动运行到main程序处.
3.编译与链接
工程建立并设置好后需要对工程进行编译。编译命令位于如图2—6所示Project菜单下,也可单击如图2-7所示的工具栏中的相应按钮。
图2-6 Project菜单中编译命令
图2-7 工具栏中编译命令
如果一个项目包含多个源程序文件,而仅对某一个文件进行了修改,则不用对所有文件编译,仅对修改过的文件进行编译即可,选择Project→Build target()即可。如果要对所有的源程序进行编译,选择Project→Rebuild all target files()即可.
编译之后,如果没有错误,开发环境的下方会显示编译成功的信息,如图2-8所示。
图2-8 编译成功信息
2。2.2 用mVision2调试工程
源程序编译通过并不意味着程序执行后就能实现用户的既定目标,可能还隐含着很多看不见的错误,这就需要对源程序进行调试。调试相关的命令在Debug菜单下。
1.程序执行与断点设置
单击Debug菜单下的Start/Stop Debug()命令,mVision2 会载入应用程序进入调试启动模式。如图2—9所示,mVision2 保持编辑器窗口的布局,并恢复最后一次调试时窗口显示CPU指令,下一条可以执行的语句用黄色箭头标出。
图2—9 调试模式
调试时,编辑器的很多功能仍然可以使用。例如,使用查找命令或纠正程序的错误.程序的源文件在同一窗口显示。mVision2 调试模式和编辑模式有以下的不同点:
①提供Debug菜单和Debug命令;
②不能修改项目结构或工具参数,所有Build命令禁止。
程序调试必须明确两个重要的概念,即单步执行和全速执行。全速执行是指一行程序执行完后接着执行下一行程序,中间没有间断,程序执行速度很快,只能看到程序执行的总体结果,如果程序中存在错误,则难以判断错误的具体位置。单击菜单命令Debug→Go()或快捷键F5,程序全速执行。
单步执行是指每一次执行一行程序,执行完该行程序即停止,等待命令执行下一行程序,可以方便地观察每条程序语句的执行结果,可以依次判断程序错误的具体位置.
单击Debug菜单下的Step()或快捷键F11可以单步执行程序。使用Debug菜单下的Step Over()或快捷键F10可以以过程单步形式执行命令.所谓过程单步,是指将汇编程语言中的子程序或C语言中的函数作为一条语句来执行。
另外,单击Debug菜单下的Step out of Current Function(),单步执行跳出当前函数。单击Debug菜单下的Run to Cursor Line(),全速运行程序至光标所在行。单击Debug菜单下的Stop Running(),程序停止运行。
程序调试时,一些程序必须满足一定的条件才能被执行,如程序中某一变量达到一定的值、按键被按下、有中断产生等事件发生,这些条件发生往往是异步发生或难以预先设定的,这类问题使用单步执行的方法是很难调试的,这时就需要使用程序调试中的另一种重要方法:断点设置。
mVision2可以用几种不同的方法定义断点。在程序代码翻译以前,也可以在编辑源文件时,设置断点。断点可以用以下的方法定义和修改。
①用工具栏按钮.在Editor编辑器或Disassembly(反汇编)窗口选中代码行,然后单击断点按钮().
②用快捷菜单的断点命令.在Editor编辑器或Disassembly(反汇编)窗口选中代码行,单击鼠标右键,打开快捷菜单.
③Debug菜单下的Breakpoints对话框可以查看、定义和修改断点设置。这个对话框可以定义不同访问属性的断点。
另外,菜单命令Debug→Enable→Disable Breakpoint()用来开启或暂停光标所在行的断点功能,Debug→Disable All Breakpoint()用来暂停所有的断点,Kill All Breakpoint()用来清除所有的断点设置。
设置好断点后可以全速运行程序,一旦执行到设置断点的程序行即停止运行,可以在此观察相关变量或特殊寄存器的值,以判断确定程序中存在的问题.
2.调试窗口
mVsion2提供了友好的人机交互界面,如图2-10所示,其编译环境包括多个窗口,主要有观察窗口(Watch & Call Stack Window)、存储器窗口(Memory Window)、反汇编窗口(Disassembly Window)、输出窗口(Output Window)和串行窗口(Serial Window)等。启动调试模式后,可以通过菜单View下的命令打开或关闭这些窗口。
图2—10 调试窗口
(1)观察窗口
如图2—11所示,观察窗口可以查看和修改程序变量,并列出当前函数的嵌套调用.观察窗口的内容会在程序停止运行后自动更新。也可以使用View→Periodic Window Update选项,在目标程序运行时自动更新变量的值。如果要在程序运行中或运行后观察某一变量的值,可以在观察窗口中按F2键,然后在文本框中输入相应的变量名字。
图2—11 观察窗口
(2)存储器窗口
存储器窗口能显示各种存储区的内容,如图2—12所示。最多可以通过4个不同的页观察4个不同的存储区.用上下文菜单可以选择输出格式。
图2-12 存储器窗口
在存储器窗口“Address”后的文本框内输入“字母:数字”即可显示相应存储单元的值,其中字母可以是C、D、I和X,分别代表程序存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间和扩展的片外RAM空间;数字表示要显示区域的起始地址。例如,输入“D:50”,即可观察到首址为0x50的片内RAM单元的值。使用View→Periodic Update选项,可以在程序运行时自动更新存储器窗口。该窗口的显示值可以以不同形式显示,如十进制、十六进制、无符号字符型、有符号字符型等。另外,可以改变存储单元的值,改变显示方式和存储单元值的方法是把鼠标置于数值上,单击鼠标右键,在弹出的菜单中选择即可。
(3)反汇编窗口
如图2-13所示,反汇编窗口用源程序和汇编程序的混合代码或汇编代码显示目标应用程序,可以在该窗口进行在线汇编,利用该窗口跟踪已经执行的代码,并在该窗口按汇编代码的方式单步执行。
图2—13 反汇编窗口
如果选择反汇编窗口作为活动窗口,则所有程序的单步执行命令会工作在CPU的指令级,而不是源程序的行。可以用工具栏按钮或上下文菜单命令在选中的文本行上设置或修改断点.
可以使用Debug菜单打开In Line Assembly对话框修改CPU指令.同时允许在调试时在纠正错误或目标程序上进行暂时的改动.
(4)串行窗口
mVision2有两个串行窗口,可以用于串行口输入和输出。从仿真CPU输出的串行口数据在这个窗口中显示,而在串行窗口键入的字符将被输入到仿真CPU中,用该窗口可以在没有硬件的情况下用键盘模拟串口通信。
SCON=0x50; //串口模式1,8位
TMOD=0x20; //定时器器1为模式2,8位自动装载
TH1=0xf4; //T1为1200bit/s的装载值,16MHz
TL1=0xf4;
EA=1;
TI=1;
TR1=1;
(5)工程窗口的寄存器页面
在进入调试模式前,工程窗口的寄存器页面是空白的,进入调试后,此页面就会显示当前仿真状态下寄存器的值,如图2-14所示。
图2—14 工程窗口的寄存器页面
寄存器页面包括了当前的工作寄存器组和一些特殊的寄存器(如累加器A、乘法器B、堆栈寄存器SP、状态寄存器PSW等)。当程序运行改变某一寄存器值时,该寄存器则以反色显示,用鼠标单击后按下F2键,可修改该寄存器的值.
2。2。3 C51程序调试举例说明——HELLO。C
HELLO。C是一个样例程序,位于C:\KEIL\C51\EXAMPLES\HELLO\中。这个程序只是将Hello World输出到串行口。整个程序只包含一个源文件HELLO.C。
HELLO的硬件是基于标准的8051CPU的。使用的唯一片内外围器件是串行口。不需要实际的目标CPU,因为mVision2可以模拟程序所需要的
展开阅读全文