51单片机学习的新手,由于没有仿真器,编写的程序往往只能通过编程器烧写到单片机里,通过观察单片机运行状况来判断程序是否符合要求。烧写次数一多,单片机就容易出现烧写错误,以至不能再次烧写,单片机只得报废。本文介绍一种新型的HEX调试器,由于采用特殊方法,使单片机不再会因为烧写次数多而损坏。
电路原理
电路原理图如上图所示。
电路的核心是常用的51单片机。常用的AT89C51和89C52由于成本的限制,内部集成的FLASHROM并不多,而传统的51外部最大可以扩展64KB的程序存储器。利用这个特点,笔者在一块89C51外部扩展了一块64KB的RAM,通过特殊的接法,使其可以像。ROM一样被51访问。利用RAM不因读写次数多而影响寿命的特性,就可以无限制地进行程序的调试而不必再担心单片机的损坏。
使用89C51时,一般都将EA脚置高,以访问内部程序存储器,而将EA脚置低时将访问外部程序存储器。利用这个功能,向单片机内部的FLASHROM写入一段服务程序,在EA脚为高时,单片机运行该服务程序将PC机端的待调试的程序下载进RAM,然后改变EA脚为低,通过复位重新从RAM中读取代码运行程序。访问RAM程序存储器的要点在于一个与门。单片机访问外部存储器的时序如下图所示。
相比较而言,在两个ALE之间,如果读写数据存储器,PSEN就不会有一个下降脉冲,而RD有一个下降脉冲,由于RD,WR和PSEN三者不能并存,所以相互用与门进行逻辑运算也不会起冲突,因此将RD和PSEN相“与”,就可以用RAM模拟程序存储器,又不会影响数据的读写,并可用程序存储器的方法读取RAM内部代码并运行。
由于使用了一个与门,单片机同时也可以甩读数据的方式读取程序段的代码,方便了通过电脑下载程序之后的校验。
元器件选型
该电路所用均为常用元件;74LS373为常用的锁存器,RAM采用61256(32KB),如果需要,可以换用更大容量的RAM;与门采用74LS08或74LS00,一个与非门,另一个接成非门,两者互相连接,构成一个与门;晶振采用12MHz;串口电平转换采用MAX232或者其他232电路均可;单片机采用AT89C51;其他如电阻、电容、LED则没有特别要求。如果需要节约成本,也可以将MAX232用两个三极管代替,由于三极管代替232的电路比较常见,这里就不再介绍。
软件使用
1.上位机软件
电路上位机软件笔者采用的是串行调试器软件,其界面如下图所示,有兴趣的读者可在本期配刊光盘中找到。
这个软件的使用方法很简单.打开上图的软件界面以后,连上串口和单片机,按动S1开关,使LED点亮(表示EA端为高电平,内部程序段有效)就可以进行调试了。首先打开文件,该软件可以打开IntelHex和Bin文件,并且显示在缓冲区1。“保存文件”按钮可以将Hex文件转化为Bin文件并保存在相应的文件夹下。软件可以工作在两种模式下:Hex调试模式和串口调试模式。Hex调试模式用来调试单片机程序,串口调试模式则可以用作简单的串口调试器。在Hex调试模式下,调试器的波特率是一定的,为1200。有兴趣的读者,可以提高89C51单片机的主频,以提高传输速率;串口调试模式下,可以通过“串口设置”按钮进行串口设置,包括端口号、波特率、检验位,数据位,停止位,串口开启与关闭及调试模式的切换。
串口设置界面如下图所示。
软件默认为Hex调试模式。点击主界面的“发送”,就可以将读入的IntelHex或者Bin文件通过串日发到单片机,并通过单片机存储到RAM中。缓存区2下的进度条显示发送的进程。
如果想验证PC机发送的数据是否正确,可以按“校验”,使单片机从RAM中读回已存入的代码发回PC机,与源代码进行比较,并显示在缓存区2,如果正确则显示检验成功。然后,就可以改变S1,使LED熄灭(表示EA端为低电平,外部程序存储器有效),然后按SB,重置单片机,使单片机开始运行外部的程序。
2.单片机服务程序为了和上位机通信,需要在单片机内部写入一段服务程序,用于代码数据的写入和读出,串口波特率设定为1200。程序代码很小,只有200多个字节,可以用编程器写入单片机一次,以后要应用的单片机程序就直接用PC机通过串口下载即可。由于系统使用12MHz晶振,在中断程序中需要进行数据存取判断处理,所以速度不能太快,以免影响数据的传输。如果需要加快传输速度,可以更改晶振频率,并对波特率相应加大,有兴趣的读者可以自己进行尝试。
电路测试
为了测试该电路,笔者采用C语言编写了一个流水灯的程序。该测试程序很简单,在硬件部分只需要在P1.0、P1.1、P1.2三个IO口接三个LED即可(注意,最好限流)。通过软件下载到单片机后,按动S1,改变EA脚的电平,使EA脚的LED熄灭。按SB复位单片机后,程序就开始正常运行,三个LED轮流点亮。至此串行HEX调试器宣告成功。平时不需要下载时,改变软件的模式为串口调试模式,就变成了一个简单的串口调试助手,在缓冲区1输入字符,按动“发送”,就可以将字符串通过串口发送出去。
在RAM中调试程序的方法在ARM单片机中是很常见的。然而,经过特殊处理,我们可以使51单片机也能轻松地在RAM中调试代码,对于其他不支持RAM调试的单片机,这种方法也是一种很好的启发。
本文关键字:制作 自动控制-单片机,电子制作 - 自动控制-单片机
上一篇:砂滤器全自动控制装置的设计