51单片机是很适合初学单片机的人学习的,一则其结构和原理相对于其他单片机而言要简单些,二则现在国内关于51的书籍等学习资源也是很丰富的。
初学单片机的人可以在动手自己制作的过程中得到到动手能力的锻炼,而且往往动手过程要比只坐在那里写程序而言更为有趣味些。尤其是这个过程中往往多少经历些失败挫折最终获得成功。
学单片机呢,仿真器往往是最为让人着迷的了,因为它可以帮助人更好理解和学习程序知晓程序的运行程序的结构,并能从中获得更多成功的喜悦---亲眼一步一步地看到自己程序的运行,而自制仿真器也是一件很有挑战和好玩的事了。
自己也亲手做过51和AVR单片机的仿真器,这里先介绍51单片机的Moniter-51仿真器,能在Keil编译环境中对51单片机仿真。
下图为用万用板焊的Monitor-51仿真器,由于不是做板焊的,多少看起来是有点粗糙了。Monitor-51https://static.assets-stash.eet-china.com/album/old-resources/2009/4/22/a3b44d1c-3f92-4adf-b817-346e02a296e5.rar制作的资料包括电路图和调试程序等。
其实光是焊好还并不代表好使,之后的软件配置和烧写过程还颇费些力气的。
下面就介绍在XP系统中利用Keil编译器的仿真器配置文件INSTALL.BAT来生成自己做的仿真器所需要的配置文件。这个文件在\Keil\C51\MON51中,同意文件夹下还有INSTALL.A51和MON_BANK.A51,这两个文件是Moniter-51的资源配置文件,用户需要修改相关的参数后才能使得仿真器正常运行。
首先由“开始”-->“运行”-->“CMD”进入XP系统的DOS状态,在进入提示界面光标闪烁处键入“CD C:\Keil\C51\MON51 ”(其中C:\为Keil所在的硬盘,可以根据你自己的电脑所安装的路径修改)然后敲”回车“进入MON51所在的文件夹。
然后在下一行的光标闪烁处键入”install.bat 0 7f 0"再敲回车,中途按提示按一次任意键就OK了(其中参数0 7f 0 是可更改的,需要根据自己的仿真器的电路来设置。
第一个0所在参数是用于设置单片机串口相关的参数,为0~12的正整数;
7f所在参数用于指定Moniter-51监控程序的外部存储单元的页号,取值0x00~0xFF,如果是用内部的RAM(比如说内部有大容量的RAM的单片机,则硬件电路上不用外扩RAM[62256],在该项配置为内部的RAM就可以了。
第二个0所在参数用于设定监控程序代码在程序存储器的起始页,取值0x00~0xF0之间的十六进制数,缺省值为0x00;
另有BANK参数是可选项可不写,用于为代码区分组的应用程序的安排,可通过INSTALL.A51来修改)如下图所示:
执行完上述的操作后就会在INSTALL.BAT所在的文件夹中生成一个MON51.HEX文件,将其用烧写器烧写到仿真器的仿真控制器(一片51单片机芯片中,比如89C51或者52S系列如AT89S52后就完成仿真器部分的工作了。INSTALL.A51文件中的内容如下图所示:
可以修改PC机与仿真器之间的通信波特率,通常为9600bit/s。
接下来就是设置KEIL软件中仿真相应部分(对于每一个工程文件都需要重新进行以下设置,同一个工程下一次运行时也应该检查以下的设置项是否正确):
点击下图中红框处:
在弹出的对话框中修改以下标签:
1.”Target“中修改晶振频率为11.0592MHz
3.在”BL51 Locate”标签的Code键入“0x8000”
4.在“debug”标签中选中“Use keil monitor-51 driver”:
5.鼠标单击“Setting”,根据自己电脑的串口选择Port:
6.选中“Load Appliaction at Start”,再选中“Go till main()”,注意每次点击主菜单上的“Debug”进行仿真前都要检查该项是否选中了,不然程序仿真会出错。
7.设置“STARTUP.C51"文件中的代码初始存放地址”0“改为”08000“。(只是硬件仿真时设定为08000,而仿真后生成实际目标板的HEX文件时,即烧写代码到实际工作的单片机芯片前要重新改回”0“而且再编译一次生成的HEX文件才能烧写进去以正常工作。
8.将硬件连接好(仿真器的串口线连到电脑的串口,仿真头插入目标板的单片机芯片插座中)然后启动电源,点击主菜单“debug”,进入仿真模式。其中的操作与软件仿真时差不多,按快捷键F10或F11可以实现单步运行,方便跟踪单步运行的结果(仿真前可以按图标按钮设置以便于全速运行时运行到断点处停止查看运行状态和结果,而按钮可以取消断点。)。
二者可以点图标实现切换。
当然自己做的Monitor-51仿真器,结构相对简单实现的功能也有限,除了不能仿真串口通信的程序(因为51单片机只有一个串口)外,相对于像AVR等高级系列单片机的JTAG仿真而言,用起来也还是比较麻烦了些。有可能程序代码的地址分配不好会出现仿真死机或者提示代码溢出等等。需要自己重新设定STARTUP.A51文件中的配置。有时也会在运行过程中发生掉线,需要重启电源后再点连接”Try Again“,如下图示:
这个仿真器仿真大的程序(代码很长的那种)也易死机,不过仿真些小的程序没有问题的,这对于初学单片机的人理解单片机的原理和运行过程是很有帮助的。
个人感觉如果是用于学习的仿真器,还是选用内部有大容量的RAM的单片机来做,比如说STC、SST的增强型51等等,用89S52/C51、89S/C51来做不划算用起来也不爽,不过作为爱好者可以做一个当做收藏了,说不定某天89S52/C51、89S/C51全下线,一个经典单片机时代就过去了 .......
512826028 2010-9-24 22:28