微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 福利:资深单片机工程师的开发经验总结

福利:资深单片机工程师的开发经验总结

时间:09-10 来源:电子发烧友网 点击:

AT89S8252串行编程命令

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

  表1

  

  (4) AT89S8252串行编程时序图

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

  

  图1

  4 硬件设计

  ① 通过计算机并口与单片机SPI口连接;

  ② 为了保护计算机并口,需要增加1片74HC244作为隔离。

  实用的原理图如图2所示。(已经过实践检验,可放心使用。)

  

  图2

  5 用VB编程进行并口控制

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

  

  表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 "WinIo.dll" () As Boolean

  Declare FuncTIon ShutdownWinIo Lib "WinIo.dll" () As Boolean

  Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean

  Declare Function SetPortVal Lib "WinIo.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的支持。

  再来几点:

先从最简单的AT89C5X(51,52,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top