Keil Monitor-51仿真板的制作与使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Keil Monitor-51仿真板的制作与使用
摘要: 介绍支持Keil C51的Monitor-51仿真板硬件电路及监控程序的生成方法,对使用中常出现的问题给出了解决方法。
关键词: 单片机 C语言仿真板监控程序
MCS-51单片机在我国应用最为广泛、经久不衰。以往单片机应用程序主要用汇编语言编写。由于汇编语言程序的可读性和可移植性都较差,采用汇编语言编写单片机应用程序不但周期长,而且调试和排错也比较困难。为了提高编制单片机应用程序的效率,改善程序的可读性和可移植性,采用高级语言无疑是一种最好的选择。C语言是一种通用的计算机程序设计语言,既具有一般高级语言的特点,又能直接对计算机的硬件进行操作,表达和运算能力也较强,许多以往只能采用汇编语言来解决的问题现在都可以改用C语言解决。德国Keil Software公司多年来致力于单片机C语言编译器的研究。该公司开发的Keil C51是一种专为8051单片机设计的高效率C语言编译器,符合ANSI标准,生成的程序代码运行速度极高,所需要的存储器空间极小,完全可以与汇编语言相媲美。
近年来,Keil C51不断升级,目前最高版本为V6.20。高版本的Keil C51编译器,尤其是Keil μVision2 (基于Windows的C51集成编译环境)以其性能优越、使用方便,受到了众多单片机爱好者的欢迎。Keil C51以软件包的形式向用户提供主要包括C51交叉编译器、A51宏汇编器、BL连接定位器等一系列工具和μVision2、软件仿真器dScope51等开发平台。C51具有丰富的函数库,包含100多种功能函数,为用户编程提供了极大的方便。C51程序可以实现与汇编语言的接口,两者相互之间的调用十分方便。
但目前支持高版本Keil C51编程的仿真器不多,且价格较高。为此Keil C51提供了Monitor-51仿真板的制作方法,但无完整的硬件电路图,软件设置也比较繁琐。也有关于自制Monitor-51仿真板的专门讨论,有很多爱好者在制作仿真板时遇到一些问题,当然也有成功者。笔者也是Keil C51的用户,并成功自制了Monitor-51仿真板,有一些心得。本文提供了Monitor-51仿真板的硬件电路,并对其进行了分析,详细说明了监控程序的生成方法,对使用中常出现的问题给出了解决方法。
1 硬件电路
Monitor-51仿真板的硬件资源要求如下:
·5K字节的程序存储空间,用于存放监控程序;
·256字节的外部数据存储单元(系统需要)和可选的5K字节的跟踪缓冲区;
·足够大的外部数据存储空间用于装载完整的用户应用程序;
·串行口及一个用作波特率发生器的内部定时器;
·6字节的堆栈空间,用于用户程序的测试;
·如果用户程序大于64K字节,P1口的部分引脚要用于程序存储空间扩展;
·其它资源均可为应用程序所用。
根据以上要求,笔者设计的Monitor-51仿真板电路原理如图1。
需要说明的是,图1中存放用户程序的32K字节外部数据存储器62256的是将CPU的称为von Neumann接法。此时外部数据存储器在就相当于外部程序存储器,当然监控程序的存放地址空间不能与这种接法的外部数据存储空间相重复。von Neumann接法的另一个作用是调试时可以在用户程序代码中设置断点,监控程序修改用户程序代码在所有的断点处插入ACALL指令。
2 监控程序
Monitor-51仿真板的监控程序可用Keil C51提供的INSTALL.BAT批处理文件生成,此文件在KEILC51MON51路径下,须在DOS环境下执行,语法如下:
INSTALL serialtype [xdatastart [codestart [BANK] [PROMCHECK]]],[]为可选项。
命令中的各参数解释如下:
serialtype:串行通信设置,现将有关MCS-51系列单片机的serialtype设置的含义列于表1中。
xdatastart:指定Monitor-51监控程序使用的外部存储单元的页号(一页为256字节),即上节所需硬件资源的第2项,取值为0~FF之间的十六进制数,缺省值为FF。例:xdatastart=FF,则X: 0xFF00..X: 0xFFFF(X表示外部数据存储单元)被Monitor-51监控程序存放内部变量,用户应用程序不能使用。
codestart:指定监控程序代码在程序存储器起始页数,即起始位置,取值为0~F0之间的十六进制数,缺省值为0。
BANK:可选项,为代码区分组的应用程序安排,应用程序不超过64K,一般不选此项。
PROMCHECK:可选项,Monitor-51监控程序在CPU复位时检查在程序存储区0地址处是EPROM还是RAM。
例:INSTALL 0 7F 0
这条命令将设置波特率为9600bps,内部定时器1为波特率发生器,要求CPU时钟为11.059MHz,Monitor-51内部变量空间为:X:0x7F00..X:0x7FFF,Monitor-51监控程序代码起始地址为:C: 0x0000(C表示程序存储单元)。该命令生成一个MON51.HEX,将其固化在EPROM 中即可使用。
应该提醒的是,INSTALL批处理命令中主要用到两个汇编文件:INSTALL.A51和MON_BANK.A51。根据硬件配置的具体情况,可能要作一些修改。
INSTALL.A51中修改项主要有两项:
(1)中断偏移量设置:当Monitor-51监控程序在ROM中起始地址为0时,用户程序将无法使用MCS-51的中断功能。为此Monitor-51将所有的中断入口地址转移至高地址的RAM区(大于监控程序的长度),这样用户程序就可以使用中断功能了。当Monitor-51监控程序代码的起始地址不为0时,中断偏移量设置无意义。
例:监控程序代码的起始地址为0,采用von Neumann接法的外部数据存储器起始地址为8000H,则中断偏移量必须设成8000H,而用户应用程序将存放在8000H之后。INSTALL.A51中的INT_ADR_OFF定义如下:
INT_ADR_OFF EQU 8000H。
(2)波特率修改:Monitor-51的波特率一般设置成9600bps或自适应。若要改成其它波特率,如4800bps,则修改“InitSerial:”节中的定时器初始化值。
INSTALL.A51中还有许多其它设置,一般不作修改。
MON_BANK.A51是为代码区分组的应用程序安排的,此处不作讨论。
3 使用中的几个问题
按前两节提供的硬件电路图和监控程序,如果仿真板与目标系统连接无误,就可调试使用了。但仿真板与目标系统连接有问题或Keil C51软件设置不当会遇到一些麻烦,在程序调试中的主要错误与警告有:
ERROR 22:NO CODE MEMORY AT 0x80xx, 这是因为仿真板用于存放用户程序的外部数