刘楚浩
摘要:本文详细介绍了利用AT89S8252单片机的在系统编程功能,用Visual Basic6.0(以下简称VB)在Windows环境下开发制作一款MCS51单片开发工具的方法。内容涉及VB编程、PC机并口控制及单片机在系统编程等内容。
关键词:VB编程AT89S8252 在系统编程 DIY
目前介绍单片机应用的文章很多,但介绍单片机开发工具制作的文章却较少。由于单片机是一门实践性很强的课程,所以单片机爱好者(尤其是初学者)往往更希望看到单片机开发工具制作方面的文章。本文正是因此而作,旨在帮那些DIY爱好者开发制作出适合自己的开发工具。
一、当前常用开发模式介绍
目前基本上有两种开发模式:
1,用仿真器优点:方便,可以设置断点,可以观察存贮器及寄存器的内容
缺点:价格昂贵,且仿真器终究不是单片机,有时代码在仿真器上能通过,但在单片机中不能正常工作,反而增加了调试的难度。
2,用编程器优点:价格相对便宜,通常一款编程器可编多种器件。
缺点:操作相当不便,每次要将芯片在目标板与编程器之间转移,并且还要在编译操作界面与编程器操作界面之间切换,大部份时间在做简单的重复的工作。
二、一种新的开发模式介绍及芯片选择
本文介绍的开发工具采用一种新的开发模式(类似于编程器开发模式)。由于利用了芯片的在系统编程功能,因此不需要移动芯片,在软件设计时设计成一旦代码文件被重新编过即自动下载到芯片并自动复位运行,真正的“所编即所得”。
目前很多单片机都支持在系统编程,MCS51系列单片机支持在系统编程的也很多,但大多数是支持通过PC机的串口对单片机进行编程。这样有三个不方便的地方:一是如果项目本身要与PC机串行通讯就不方便;二是要增加一片MAX232电平转换芯片;三是有的芯片要按特定的步骤进入下载模式,编程过程需要手工干预。
经过比较,Atmel公司生产的AT89S8252是一种比较理想的芯片,适合我们用来制作开发工具。此芯片有如下特点:
l 与MCS51兼容
l 内含8K可擦写1000次的程序存贮器,2K可擦写超过100000次的数据存贮器及256字节8位宽内部RAM
l 可通过SPI接口在系统串行编程,与MCS51兼容
l 串行编程时有自动擦写周期,在调试大程序时可以分段下载,节约时间
l 低电压下载,无需12V编程电压
三、AT89S8252串行编程介绍
1、 AT89S8252串行编程模式介绍
当芯片的RST引脚置高电平时,所有程序和数据存贮器可以通过SPI总线接口[SCK,MOSI(input),MISO(output)]编程。RST变高以后,在编程或擦除操作之前必须首先发送一条编程允许命令。在串行编程模式下,芯片会在字节编程之前自动插入一个擦除周期。因此,除非芯片的代码保护位被编程,编程之前不需要执行全片擦除命令。SPI接口之SCK时钟频率须低于晶振频率的1/40。
2、 AT89S8252串行编程步骤
a) 在XTAL1与XTAL2之间连接一个3-24MHz的晶振,在VCC与GND之前加上电源电压,将RST置高,等待10ms。
b) 发送串行编程允许命令
c) 发送写/读/擦除等命令及数据,串行数据高位在前,低位在后,数据在时钟的上升沿锁定
d) 如果上一步是写命令等待至少2.5ms
e) 需要时重复C,D两步
f) 将RST置低,芯片开始运行
3、 AT89S8252串行编程命令介绍
4、 AT89S8252串行编程时序图
四、硬件设计:
a) 通过计算机并口与单片机SPI口连接
b) 为了保护计算机并口,增加一片74HC244作为隔离
实用的原理图如下:
(原理图文件为mcu51diy.sch)
五、用VB编程进行并口控制介绍
打印端口的基地址一般为0x278,0x378或0x3BC,这可以从控制面板中查到。为了方便读者,下面以表格形式列出常用打印端口脚位及寄存器位元说明。
在Windows环境下最简单易学的语言恐怕非VB莫属,所以我们的开发工具也选用VB作为编程语言。但由于Windows的保护,VB无法直接读写打印端口,因此我们需要另外的程序模块来实现打印端口的的直接读写。在Internet网上可以找到许多的此类模块,并且相当多的模块可以免费使用。经过试用,笔者推荐使用Winio v2.0,该模块支持Win9X/NT/2000/XP(http://www.internals.com Yariv Kaplan ),并且带有详细的帮助、例子程序及源码。使用时将Winio.sys、Winio.dll、Winio.vxd及Winio.bas四个文件拷贝到工作目录下,在VB中直接添加Winio.bas模块即可。本例中用到的函数有四个,分别说明如下:
1、 Initialize():允许端口控制函数,在使用端口输入输出函数之前调用一次,成功返回“1”,失败返回“0”,
2