软件:
word
SST89E516RD和Keil软件配合仿真51单片机
单片机实验和开发中最重要的一个环节就是程序的调试,在业余条件下大部分人都采用烧写芯片直接到目标板上试验的方法,但是这样做在程序出现问题时比较麻烦,有时候也很难找到程序的问题出在那里。另外也可以采用软件仿真的方式调试程序,但是这种方式也有局限性,软件仿真有时候并不能完全代替实际使用环境。因此单片机仿真器成了程序调试中一个重要的设备。但是在业余条件下很少有人使用价格比较高的仿真器。为解决这一问题,本文介绍一种用SST公司的单片机SST89E516RD做的基于MCS-51架构的简易51单片机仿真器,它支持与MCS-51架构兼容的芯片。
一、单片机SST89E516RD简介
SST89E516RD是8位集成存储器的51系列兼容单片机,和51系列单片机软件兼容、开发工具兼容、管脚也兼容。
SST89E516RD片内有两块SuperFlash EEPROM,分为64K主块(Block0)和8K次块(Block1)。Block0的地址范围是0000h~ffffh;Block1的地址范围是10000h~11fffh。做仿真器时Block1存储区烧写SoftICE仿真监控程序。
SST89E516RD具有在应用可编程(IAP)和在系统可编程(ISP)的功能,其中IAP是通过串口实现的。
仿真器就是利用了SST89E516RD的IAP功能。由于SST89E516RD具有两块独立的SuperFlash程序存储区,当监控程序在Block1存储区中运行时可以改写Block0程序存储区中的程序,这就是仿真器的基本特性。
SST89E516RD的引脚图见图1。
二、仿真器电路和工作原理
单片机SST89E516RD和晶振电路、复位电路一起组成单片机最小系统。SST89E516RD的引脚分别接在40脚的插针上,应用时40脚的插针插在目标板的单片机插座上。仿真器可能通过跳线的方式选择仿真器上的晶振或目标板上的晶振。仿真器使用目标板上的电源。 仿真器的工作过程就是在调试过程中随时对程序进行修改,来达到单步运行、跨步运行、断点运行和全速运行的目的。在通过KeilμVision2集成开发环境进行仿真时,需要调试的单片机程序目标代码通过串口被传送给监控芯片,并由监控程序烧写到监控芯片的Block0程序存储器中。在仿真调试过程中,监控程序可以随时改写被调试的程序来设置单步运行、跨步运行、断点运行。程序暂停执行后,在集成开发环境中可以观察单片机RAM、寄存器和单片机内部的各种状态。 仿真器的监控芯片SST89E516RD中要预先烧写监控程序才能使用。
四、使用Keil μVision2进行仿真调试
仿真器做好以后就可以配合Keil μVision2进行仿真调试,如果自己建项目进行设置,则相关设置过程如下:
1、在菜单Project中选择Optionsfor Target'Targetl',在"Optionsfor Trarget 'Targetl'"对话框的Debug 页面里,选择"Use:KeilMonitor-51 Driver"。相关设置见下图。直接点击Options for Target图标或者在鼠标右键菜单打开设置菜单
选择Debug栏 选中 Keil Monitor-51 Driver把下面的两个勾都打上
点击OK , 保存设置。
然后单击"Settings"选择要使用的计算机串行端口。Keil μ Vision2默认设置为COM1/9600。仿真器在一定范围内对串行通信波特率是自适应的,晶振频率为11.0592MHz时波特率可在4800~38400 之间选择。一般取最大值,以提高串口通信速度。相关设置见图6。最后单击"确定"按钮保存设定。仿真器或目标板也可以选择其他频率的晶振,比如晶振频率为6MHz时波特率可在2400~19200之间选择。如果使用目标板上的晶振,波特率要根据目标板上的晶振频率确定。
打开项目test.Uv2,完成上述设置后就可以进行仿真调试了。先单击工具栏上的Build target按钮 编译项目,编译成功后将生成目标代码。将仿真器按正确的方向插在目标板上,串口和计算机连接好后接通目标板的电源,按一下仿真器的复位键SB,再单击Start/Stop Debug session按钮 ,启动仿真调试环境,这时目标代码将被自动下载到仿真器的Block0用户程序空间。连接成功会后出现如图7所示的画面,连接过程中我们会发现发光二极管VD2在闪烁。连接不成功时请检查软件设置和硬件电路。
仿真时使用的主要调试按钮的功能如下:
上述各按钮的使用方法和软件仿真时相同。
进入仿真调试环境后,按一下全速运行按钮 ,目标板上的8个发光二极管就会轮流点亮,表示运行成功。如果我们在delay(100)前插入一个断点,按一下全速运行按钮 你会发现程序运行到断点后停止向下执行,只有第一个发光二极管点亮;再按一下全速运行按钮 ,刚轮流到第二个发光二极管点亮,以此类推。退出仿真时,请先按仿真器的复位键,然后再点一下按钮 ,就回到编辑模式,修改程序后重新编译,可以再次进入仿真调试环境。注意每次进入仿真调试环境前都要先按一下仿真器的复位按钮SB。
使用仿真器时请注意下面两点:
1.仿真器占用了仿真单片机的串行通信接口和用作波特率发生器的定时器2的资源,只有在全速运行时才释放这些资源,因此当目标板使用这些资源时就不能进行单步、跨步、断点等运行。这也是这个仿真器的一个不足之处。 2.仿真器监控芯片的SuperFlashEEPROM擦写寿命一般为每个存储单元1万次,而每一个单步执行都将擦写一次存储单元,因此应尽量少使用单步执行,多使用断点、跨步、断点和执行到光标行等节省擦写次数的功能,以延长仿真器的使用寿命。
点击settings 设置如下
【3】调试
点击调试图标
假如出现错误提示信息,请确保设置无误和电源已经打开。【本人的经验是关掉电源再开,点击Try Again就可以了】
正确设置与连接后,则可使用Keil菜单的工具栏按键进行仿真调试,按键功能与软件仿真一致
第二个设置:
请在硬件仿真设置选项中,选择 serial interrupt,在前面打勾。
如果以上设置你没有做,在装载过程中,仿真器会发出“嘀-” 的一声长声报警,这时的仿真结果将可
能不正确。
其余设置:
请选择 use keil Monitor-51 Driver ,这样才会使用硬件仿真
请选择 load Application at start ,在启动时直接装载程序
请选择 Go till main ,装载后直接运行到main 函数
请在硬件仿真设置选项中,选择115200bps 波特率,所有cache 都可以不选,或者只选cache code。同
时请选择正确的串口号