您的位置:控制工程论坛网论坛 » 嵌入式系统 » 8051 单片机开发工具 DIY

zlj

zlj   |   当前状态:离线

总积分:312  2024年可用积分:0

注册时间: 2007-04-02

最后登录时间: 2007-04-12

空间 发短消息加为好友

8051 单片机开发工具 DIY

zlj  发表于 2007/5/22 16:55:16      2656 查看 2 回复  [上一主题]  [下一主题]

手机阅读

引 言:

   目前介绍单片机应用的文章很多,但介绍单片机开发工具制作的文章却较少。由于单片机是一门实践性很强的课程,如果采用传统的开发模式,则要购买价格昂贵的仿真器、编程器等开发工具来作实验。其实由于芯片功能的日益完善,我们可以利用芯片的在系统编程( ISP )功能制作出实用而低价的开发工具。本文旨在帮助 DIY 爱好者开发制作出适合自己的开发工具。

1 当前常用开发模式

   目前,基本上有两种开发模式可供选择:用仿真器、用编程器。
① 用仿真器。优点:方便,可以设置断点,可以观察存储器及寄存器的内容。缺点:价格昂贵,不同类型的单片机要购买不同的仿真器;仿真器终究不是单片机,有时代码在仿真器上能通过,但在单片机中不能正常工作,反而增加了调试的难度。
② 用编程器。优点:价格相对便宜,通常一款编程器可编程多种器件。缺点:操作相当不便,每次要将芯片在目标板与编程器之间转移,并且还要在编译操作界面与编程器操作界面之间切换,大部分时间在做简单的重复工作。

2 新的开发模式介绍及芯片选择

   本文介绍的开发工具采用一种新的开发模式(类似于编程器开发模式)。由于利用了芯片的在系统编程功能,因此不需要移动芯片。在软件设计时设计成:一旦代码文件被重新编过,即自动下载到芯片,并自动复位运行,是真正的“所编即所得”。

   目前很多单片机都支持在系统编程。 8051 系列单片机支持在系统编程的也很多,但大多数是支持通过 PC 机的串口对单片机进行编程。这样有四个不方便的地方:一是项目本身与 PC 机串行通信不方便;二是要增加 1 片 MAX232 电平转换芯片;三是有的芯片要按特定的步骤进入下载模式,编程过程需要手工干预;四是有的芯片需要固件(定制的程序)的支持,如果不小心损坏了固件,则芯片的在系统编程功能也没有了。

   经过比较, Atmel 公司生产的 AT89S8252 是一种比较理想的芯片,适合制作开发工具。此芯片有如下特点:
· 与 8051 兼容;
· 内含 8KB 可擦写 1000 次的程序存储器, 2KB 可擦写超过 100 000 次的数据存储器及 256 字节 8 位宽内部 RAM ;
· 可通过 SPI 接口在系统串行编程,与 8051 兼容
· 串行编程时有自动擦写周期,在调试大程序时可以分段下载,节约时间;
· 低电压下载,无需 12V 编程电压。

3 AT89S8252 串行编程

(1)AT89S8252 串行编程模式

   当芯片的 RST 引脚置高电平时,所有程序和数据存储器可以通过 SPI 总线接口 [SCK , MOSI ( input ), MISO ( output ) ] 编程。 RST 变高以后,在编程或擦除操作之前必须首先发送一条编程允许命令。在串行编程模式下,芯片会在字节编程之前自动插入一个擦除周期。因此,除非芯片的代码保护位被编程,编程之前不需要执行全片擦除命令。 SPI 接口之 SCK 时钟频率须低于晶振频率的 1/40 。

(2)AT89S8252 串行编程步骤

① 在 XTAL1 与 XTAL2 之间连接一个 3~24MHz 的晶振;在 VCC 与 GND 之前加上电源电压,将 RST 置高,等待 10ms 。
② 发送串行编程允许命令。
③ 发送写 / 读 / 擦除等命令及数据,串行数据高位在前,低位在后,数据在时钟的上升沿锁定。
④ 如果上一步是写命令,至少等待 2.5ms 。
⑤ 需要时重复③、④两步。
⑥ 将 RST 置低,芯片开始运行。

(3)AT89S8252 串行编程命令

AT89S8252 串行编程命令如表 1 所列。

(4)AT89S8252 串行编程时序图

AT89S8252 串行编程时序如图 1 所示。

4 硬件设计

① 通过计算机并口与单片机 SPI 口连接;
② 为了保护计算机并口,需要增加 1 片 74HC244 作为隔离。
实用的原理图 如图 2 所示 。(已经过实践检验,可放心使用。)

5 用 VB 编程进行并口控制

   打印端口的基地址一般为 0x278 、 0x378 或 0x3BC ,可以从控制面板中查到。为了方便读者,表 2 列出了常用打印端口引脚及寄存器位元的说明。

   在 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 模块即可。本例中用到的函数有四个,分别说明如下。

① Initialize() :允许端口控制函数。在使用端口输入输出函数之前调用一次,成功返回“ 1 ”,失败返回“ 0 ”。
② Shutdown() :关闭端口控制函数。在退出程序时执行一次,成功返回“ 1 ”,失败返回“ 0 ”。
③ GetPortVal(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean :读取端口函数, PortAddr 为端口地址, Portval 为端口值, bSize 为要读取的字节数。读取成功时返回“ 1 ”,失败时返回“ 0 ”。
④ SetPortVal(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean :写端口函数。 PortAddr 为端口地址, Portval 为要写的值, bSize 为要写入的字节数。写入成功返回“ 1 ”,失败返回“ 0 ”。
四个函数在 Winio.bas 模块中的声明如下:
Declare Function InitializeWinIo Lib 揥 inIo.dll ” () As Boolean
Declare Function ShutdownWinIo Lib 揥 inIo.dll ” () As Boolean
Declare Function GetPortVal Lib 揥 inIo.dll ” (ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean
Declare Function SetPortVal Lib 揥 inIo.dll ” (ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean

6 Intel HEX 格式文件

   由于一般编译软件产生的用于写入芯片的文件都是 Intel HEX 格式的文件。 Intel HEX 文件属于文本文件,可以用记事本查看。一个 Intel HEX 文件的一行称为一个记录,每个记录都是由十六进制字符组成的,两个字符表示一个字节的值。 Intel HEX 文件通常由若干条记录组成,每个记录都具有如下的形式:
: LLAAAATTDD...DDCC
“:”——记录的起始标志;
LL ——记录长度,表示该记录中的数据字节数;
AAAA ——数据装入的首地址( 16 位);
TT ——记录类型, 00 表示数据记录, 01 表示文件结束; ( 注意:有的编译软件会产生大于 01 的记录类型,本应用中对大于 01 记录类型的记录忽略掉即可。 )
DD ——数据值(字节);
CC ——校验和。(将其本身与记录中除起始标志外的所有字节相加应为 0 ,不为 0 则有错。)
VB 编程详细说明见本刊网络补充版( http://www.dpj.com.cn )。(由于各子程序的流程都较简单,所以直接给出源码,而未画出流程图。程序采用由底至顶的设计方法。)

结 语
   虽然上述程序能实现各种基本的功能,但并不完善,并未考虑各种异常情况,读者可根据实际情况进行完善。编程功力较差的朋友可直接到笔者的网站( http: //www.mcudiy.com )下载相对较完善的应用程序 。如果充分理解了上述程序,那么 DIY 一个 AVR 或 PIC 单片机的开发工具也非难事。在笔者的网站也有制作完成的“ MCS51/AVR/PIC 三合一下载器资料”供爱好者下载。

   由于 AT89S8252 的价格还是较贵,所以现在市场上较难买,不过 Atmel 公司推出的替代 AT89C51/52 的 AT89S51/52 也有在系统编程功能,且价格便宜。其在系统编程的实现方法与 AT89S8252 类似,对本例部分程序稍作修改即可支持该器件。笔者制作的“ MCS51/AVR/PIC 三合一下载器”增加了对 AT89S51/52 的支持。

1楼 0 0 回复
总共 , 当前 /