admin 管理员组

文章数量: 1086019


2024年4月30日发(作者:xquery 子句)

中国观代敷甫装备 2008年第l2期(总第70期) 

单片机串行在线编程器的设计与实现木 

毋茂盛 

肇庆学院 广东肇庆 526061 

摘要:本文主要研究了对AT 8 9 S 5 1单片机进行串行在线编程技术。首先介绍了编程系统的硬件结构,然 

后讨论了Int el Hex文件格式和系统软件的编制方法,并设计了通过USB口对AT8 9s 51进行在线编程的硬 

件电路;最后给出了对单片机进行读、写一个字节数据的子程序。 

关键词:单片机在线编程通用串行总线 

单片机因具有体积小、成本低、功能强等优点在工 

业控制、家用电器、电子玩具、仪器仪表以及汽车电子 

等领域得到了广泛应用,我国的各类技校、大专、本科 

甚至研究生教育中有许多专业如电子、计算机、自动 

化、机电一体化、通信、仪器仪表等都开设了《单片机 

原理与开发》课程,这是一门实用性很强的课程,学好 

的关键在于动手实验。虽然MCS一5 1系列单片机是一种 

基于总线结构的单片机,且功能较弱,但凶为网上有许 

多免费的编译程序,故在国内单片机教学中有很高的普 

及率。Atme1公司的Flash技术领先全球,它把F1ash 

大家介绍一种对AT89S51单片机进行串行编程的系统设 

计与制作方法。 

系统设计 

1.系统的结构与功能 

编程系统主要由计算机和对AT89S51单片机进行串 

行编程的编程单元两部分组成,结构如图1所示: 

技术 ̄HMCS一5l单片机内核相结合,设计出了与MCS一51 

相兼容的AT 8 9系列单片机,如AT 8 9 C 5 1/5 2/5 5、 

AT89S51/52等。与MCS一51相比,AT89S51系列单片机 

增加了4KB可串行在线编程(ISP)Flash程序存储器和 

看门狗电路【】],使用更方便,功能更强大,成为国内最 

为畅销的单片机之一,也是教学中使用最多的单片机。 

目前,大学生的就业压力很大,许多学生为了提高自己 

的动手能力,非常渴望在校学习期间或毕业设计时能够 

动手开发具有一定功能的单片机应用系统,购买一台编 

程器对于在校大学生是一笔不小的开支, 此,本文给 

算 

机 

¨ 

I SPI接}_=】 

∞ 

疑 

图1 A T 8 9 s 5 1单片机串行编程系统结构 

为了实现对AT89S51单片机进行串行编程,需要完 

成三项工作,①编写在计算机上运行的系统软件:②设 

计编程单元硬件电路;③编写在编程单元上运行的对 

AT89S5 1单片机进行串行编程的程序。 

2.系统软件编写 

系统软件的功能主要是向编程单元发送各种命令 

(如芯片擦除、查空、编程等)、待编程的机器码以及 

显示编程过程中的各种相关信息等,可以用VC、VB以及 

收稿日期:2 00 8—09—1 8 

Delphi等编程语言中任何一个来编写。由于vc++具有 

界面友好,功能强大等特点,一直深受业内人士的青 

睐,故在计算机上运行的系统软件选用VC++编写。为了 

降低编程难度,选择串行口发送待编程的代码数据。这 

样,系统软件主要涉及对代码文件和计算机串行口进行 

操作,用VC++设计系统软件时,可以用相同的API函数 

作者简介:毋茂盛,博士,教授。 

・本文系河南省教育厅科技攻关计划项目,项目名 

称:大学生科技创新能力培养训练系统开发。项 

目编号:2 0 0 8A 5 2 0 01 4。 

58 

~e@ 膨 

2008年第l2期(总第70期) 

实现对代码文件和计算机串行口进行打开、读、写和关 

闭等操作,如CreateFile()、ReadFile()、 

WriteFile 0以及CloseHandle 0函数等分别实现 

打开、读、写以及关闭文件或串口;对文件和串口的操 

作过程也相同,都是先打开,然后进行读、写操作,最 

后关闭;对文件和串口操作的API函数还有许多,如移 

动文件指针、删除文件、设置串口、清除串口输入输出 

缓冲区等 ,这里不再详述。下面主要介绍待编程的代 

中国现代毂育装备 

4332 3932 3734 3038 3131”,这是代码数据,每两 

个字节对应一个字节的机器码,分别为:75 8l 60 78 

OA D2 92 74 08 1l 25 C2 92 74 08 l1。 

第41、42字节“323l”为校验和,其值为十六进 

制数“21H”; 

最后两个字节(ODOA)为回车和换行,这两个字节 

在WORD不显示。 

注意:上面数据之间的空格,是为了让读者更容易 

码文件及其格式。 

AT89S51单片机代码文件采用Inte1 HEX格式,它 

是文本文件,由若干行组成,每一行称为一个记录,每 

个记录都以“:”(3A)开始,以回车、换行(ODOA)结 

束,中间由十六进制字符组成,两个字符表示一个字节 

代码数据。记录形式如下: 

:LLAAAATTDD…DDCC’’ 

” 记录的起始标志; 

“LL” 记录长度,表示该记录中的数据字节数; 

“AAAA”数据装入的首地址; 

“TT” 记录类型,o0表示数据记录,0l表示文 

件结束; 

“DD” 代码数据,每两个表示一个字节; 

“CC”校验和。即将其本身与记录中除起始标志 

外的所有字节相加和应为0。 

在CC的后面是回车、换行(ODOA)。 

例如,某汇编语言程序对应的Int el HEX文件用 

WORD打开时显示如下所示: 

:10000O0O758l6078OAD2927408l125C29274081121 

:100010OO25D8F27805D292743C1125C292743C1115 

:1OO02OO025D8F280DEF53O7F647E7DDEFEDFFAD5F6 

:0300300030F52286 

:00000001FF 

由于Intel HEX文件是采用文本文件格式,第一行 

内容在文件中的实际存储为: 

“3A 3130 3030 3030 3030 3735 383l 3630 

3738 3041 4432 3932 3734 3038 3131 3235 4332 

3932 3734 3038"3131 3231 ODOA”,其中: 

第0字节“3A”为记录起始标志,显示为“:” 

第1、2字节“3130”为记录长度,显示为IOH,即 

该记录含有1 6个字节的代码数据; 

第3、4、5、6字节“30303030”为记录装入首地 

址,即“O000H”; 

第7、8字节“3030”为记录类型,显示为“OOH” 

表示该记录为数据记录; 

第9—40字节共32个字节,分别为“3 735 383 1 

3630 3738 3041 4432 3932 3734 3038 3131 3235 

一 @2 肥 

看清楚才加入的,实际文件中是没有空格的。 

了解了Intel HEX文件的格式后,就可以用VC++提 

供的API函数,首先打开Inte1 HEX格式的代码文件, 

读出文件中的数据,然后转换成十六进制数,通过串行 

口送给编程单元。 

3。编程单元硬件电路设计 

目前,对AT89S5 l单片机的串行编程有两种方法: 

种是基于计算机并口实现的,另一种是通过计算机串 

行口的RTS,CTS,DTE,DCE信号实现。这两种方法都 

需要设计专门的电源电路。由于USB具有速度快、支持 

热插拔、易于扩展以及自带电源等优点口],目前已成为 

计算机中最流行的外设接口,许多原来采用并行接口或 

串行接口的外设现在都采用了USB接口,因此,本文设 

计了基于uSB接口的串行编程单元,硬件电路如图2所 

示。编程单元中主要使用了两个芯片,即CP 2 1 0 2和 

AT89C2051单片机。CP2l02是美国Si l icon Labora— 

tories公司设计的单片USB—UART转换芯片,内部集成 

了USB发送接收器、内部时钟以及1024字节的EEPROM 

等,不需要外接电阻或时钟,支持USB2.0规范,采用 

28针QFN封闭方式,尺寸为5x5mm…。由它实现USB到 

UART的转换非常方便,且系统电源可直接由USB接口获 

取。CP21O2的驱动程序可直接从SiliCon Laborat0一 

ries公司网站下载,安装成功后,对CP2102连接的USB 

口的操作就变成了对一个虚拟串口的操作,这样省去了 

编写USB接口驱动程序的麻烦。AT89C2051内部含有2K 

的F1ash程序存储器、15条可编程的I/0口线以及UART 

等资源。它通过CP2102接收来自PC机的代码或命令, 

通过SPI接口实现对AT89S51单片机进行串行编程。 

P3.5 AT89('2o5l 

— 

PP.3 J?'三|= 

I)_ 

D十 

GND 

C!P2lO2 

冀c 9 E E E 

图2对AT 8 9 s 51单片机进行串行鳊程的硬件电路 

59 

中国观代敷有装备 

4.编程单元的软件编程 

对AT89S5 1单片机进行串行编程共有9条命令,分 

别用来实现编程允许、芯片擦除、读/写数据(字节或 

RLC 

2008年第1 2期(总第7O期) 

A 

DJr ̄Z 

MOV 

CLR 

REX 

R3,INB 

MEM1,A 

SCK 

页模式两种)、读加密位以及读签名字节内容等功能 

 l5l

AT89C2051单片机通过P1.4、P1.5、P1.6模拟SPI 

接口信号,完成对AT89S51单片机的串行编程和校验。 

编程和校验波形如图3所示: 

s呸 厂-I-I ] 

MO 

< ) …二× 

竺 二二>< ) 二…二× 

图3 A T 8 9 s 5 1单片机串行编程与校验波形 

从图3可以看出,对AT 8 9 S 5 1单片机编程或校验 

时,字节数据总是高位在前,低位在后。写数据(编 

程)时,在SCK为低电平期间,将数据送NMosI;而读 

数据(校验)是在SCK为高电平时进行。发送和读取一 

个字节数据的子程序如下: 

SCK BIT P1.4 :时钟 

MOSI BIT P1.5 :数据输出(编程) 

M1SO BIT P1.6 :数据输入(校验) 

MEM1 EOU 30H :存放待读/写的数据 

发送一个字节数据的子程序如下: 

OUTBYTE: 

MOV A,MEM1 

MOV R3,#8 

OUTB: CLR SCK  ・

NOP 

RLC A 

MOV MOSI,C 

NOP 

SETB SCK 

NOP 

DJNZ R3,O1JTB 

LCALL DLTSOOuS :延时500 1.t S 

CLR SCK 

RET 

读取一个字节数据的子程序为: 

INBYTE: 

M0V R3. #8 

INB: CLR SCK 

NOP 

SETB SCK 

NOP 

MOV C,MISO 

6o 

二、结束语 

本文主要讨论了对AT89S51单片机进行串行编程的 

技术,有非常重要的应用价值。文中提到的CP2 l O2芯 

片采用QFN封装,它的引脚在芯片的底部,不能使用普 

通的电烙铁进行焊接,焊接后也无法用万用表测量焊接 

效果,所以,焊接时一定要十分小心。文中设计的对 

AT89S51单片机串行编程系统在多个高校的单片机实验 

室进行了实际应用,效果良好。 

本文设计的对AT89S51单片机进行串行编程系统, 

采用USB接口,省去了电源电路,使用方便。通过串行 

方法实现对单片机的编程,为单片机应用系统的在线编 

程奠定了基础。对于用串行方法实现对单片机编程的用 

户来讲,用本文所述的方法为产品升级软件时,不再需 

要打开机箱,甚至在异地通过internet和GPRS等就可 

以完成;对于用AT89S5 1单片机开发各种应用系统的大 

学生、研究生以及单片机爱好者,可以不用再去购买编 

程器就能完成系统开发。 

参考文献 

【1]A t m e l C o r D 0 r a t i 0 n.A t me l 8一b i t 

MiCrocont roller wi th 2K Bytes Fla sh AT89C2051 

【EB/OL】.http://www.atme1.com/dyn/re sou rce s/ 

pr0d—document S/doc 0 368.pdf,2 005,6 

【2]龙勇.基于Vc 6的分布式仿真系统多线程串 

行通信的实现【J].计算机工程与应用,2 O 0 6,6 

[3]张安生.PDI uSBD1 2在USB接口设计中的应用 

探析[J].中国现代教育装备,2 0 O 8,2 

【4]Si 1 icon Laboratories INC.SII ̄GLE—CHIP 

USB TO IJART BRIDGE CP21 02[EB/OL】.http://www. 

SilabS.com/pub1iC/document S/tpub—doc/dSbeet/ 

Mi C rocont ro1 l e r s/Inte rface/en/cp21 02.pdf, 

2 0 0 5,9 

【5]A t me l C 0 r p 0 r a t i 0 n.A t me l 8一b i t 

Microcont rol ler wi th 4K Bytes In—Sy S tem Pro- 

grammab1e Fla sh AT8 9S 51【F,B/OL】.httD://www. 

atme\.com l dYn|t e s our ce s| rod—d0Ctimen t S| 

doc 248 7.pdf,2O05,3 

琶 

V 


本文标签: 编程 单片机 串行 进行 数据