AVR单片机与PC机打印口高速
双向数据通信接口
胡平平王晶杰
(北京机械工业学院计算机及自动化系,北京100085)
摘 要 文章给出了一个简单而又实用的利用PC机打印口进行高速双向数据通信的接口,详细介绍了接口的原理和
Windows环境下驱动程序的
,并以该接口与AVR单片机的连接为例,介绍了它的使用方法。最后给出了各种情况下
通信性能的测试结果。
关键词数据通信EPP接口Windows驱动程序单片机
文章编号1002—8331一(2005)25—0112—04文献标识码A 中图分类号TP334
TheHighSpeedBidirectionalDataCommunicationInterface
betweenAVRSCMandPCPrinterPort
HuPingpingWangJingjie
(Computer&AutomationDepartment,BeijingInstituteofMachinery,Beijing100085)
Abstract:Asimpleandpracticalhigh-speedbidirectionaldatacommunicationinterfacewithPCprinterportisgiven.
ItshardwareprincipleanddriverprogrammingforWindowssystemarediscussedindetail.ItsapplicationbetweenAVR
SCMandPCprinterportisgivenandtheperformencesinseveralcasesaretestedanddiscussed.
Keywords:datacommunication,EPPinterface,Windowsdriver,SCM
基于PC机的数据采集和监测控制系统往往用各种单片
机构成现场部件.因为它具有高可靠、低成本、小体积和抗干扰
性好的特点,而PC机则完成数据
处理和构成友好易用的
人机界面。在这样的系统中,单片机与PC机间的数据通信是
不可缺少的一个环节。传统系统多利用PC机的串行接口与单
片机进行数据通信。一则因为系统的数据量不大,--贝tl因为大
多数单片机都内置了串行接口,数据通信只需要简单的软件编
程即可实现。
随着计算机的发展,一方面传统串行接口因速率太低而逐
渐被淘汰,尤其是便携计算机.已很少再配备传统的串行接
13了;另一方面,应用系统要求的数据通信量也不断增加,
传统串行接口已不能满足要求。虽然新型USB串行接口的
出现解决了PC机传统串行接口速率低的问题,但同时也大
大增加了通信的软硬件成本,造成用于通信的成本和复杂
性大于现场设备本身的现象。在批量较少的情况下,问题更
为突出。
在PC机提供的各种接13中,打印接口一直是必备的接
口.而且已经从SPP方式的单向输出接El扩充为EPP和ECP
方式的双向接口,其通信速率也可以达到500KBytes/s到
2MBytes/s。利用PC机打印接口进行数据双向通信的成本和
复杂性又远比USB接口低,因此是单片机与PC机问数据通
信的一个较好的替代
。与利用传统的串行接口通信方案
相比.该方案涉及到硬件接口设计和Windows驱动程序设计
两个额外的问题,本文就这两方面的问题给出了较为详细的
论述。
基金项目:北京市科委资助科技项目(编号:KM200311232136)
1122005.25计算机工程与应用
l EPP端口通信原理
1.1 EPP端口的引脚和定义
用于进行数据双向通信的EPP端口相关的引脚和定义如
表1所示。
表1 EPP端口相关引脚的定义和说明
7
注:Base表示EPP端口的基地址,一般为378h;!表示状态相反。
1.2 EPP端口的操作
EPP端口的操作分数据和地址两种,通过对数据寄存器和
地址寄存器的读写操作可以完成数据和地址的输入和输出。在
端口上,则以nDStrb和nAStrb分别为低加以区分。除了这两个
信号外,数据和地址操作的其他信号状态完全一样。每一条对
数据或地址寄存器的读写指令,便会自动启动并完成一次EPP
端口的输入或输出操作。EPP端口的寄存器地址和定义如下:
基地址(378h):端口数据输出,锁存输入地址。
基地址+1(379h):状态输入端口,bit6~bit3分别为端口引
脚10,12,13和15的状态。
万方数据
基地址+2(37Ah):控制输入/输如端口(该端Elbit4必须
置l才能使外部中断信号线nIntr的上升沿产生打印端口
中断)。
基地址+3(37Bh):地址寄存器。
基地址+4(37Ch):数据寄存器。
1.3 EPP端口输入操作时序
任何时候,当nWait为低时读数据或地址寄存器的指令将
产生图1所示的输入操作时序。在IOR为低后,nWrite保持为
高表示输入,主机检测到nWait为低后使nDStrb或nAStrb变
低.表示开始输入操作。当有效的输人数据在ADO~AD8上准
备好时,外设可以使nWait变高,这时主机使nDStrb或nAStrb
变高,数据(地址)被读人到特定的寄存器,输入操作结束。为进
行下一次操作,外设必须使Wait变低。
IOR:——_\!塑旦堕墅兰兰笪!!厂——一
nWrite:
nDStrb/nAStrb:———]、厂——一
nWait:厂————、ADO--AD7:二二二二二二二]C巫匾巫匾X二
图1 EPP端口输入操作时序
1.4 EPP端口输出操作时序
任何时候,当nWait为低时写数据或地址寄存器的指令将
产生图2所示的输出操作时序。在10W为低后,nWrite也变为
低表示输出,同时将有效的输出数据送到ADO~AD8。主机检测
到nWait为低后使nDStrb或nAStrb变低,表示开始输出操作,
外设得到数据后,可以使nWait变高,这时主机使nDStrb或
nAStrb变高,输出操作结束。为进行下一次操作,外设必须使
Wait变低。
(端口内部参考信号)
10W
nWrite
nDStrb/nAStrb
ADO竺AD7兰支兰兰三j三~ :一—————j—————』,、L———二———~LLj—————/,L————一
图2 EPP端口输出操作时序
由上述操作时序可知,EPP的输入和输出操作可以在一个
ISA总线的I/0读写周期内完成,因而其速度非常快,可以达
到500KBytes/s到2MBytes/s。
2 EPP接口设计
从上面的介绍可以看到,EPP数据传输采用的是异步应答
方式.尽管其最高传输速率可以达到ISA总线的I/O读写速
率.但在实际应用中的传输速率要取决于外设的使用和处理方
式。EPP端口和单片机最简单的连接是在单片机方采用软件控
制方式.由软件产生响应的应答信号,这种方式需要几个单片
机的指令才能完成一次数据的传输,是最慢的方式。用少量的
芯片构成EPP接口,以便自动产生EPP的应答信号并提供必
要的状态信号,这种方式可以最大限度地提高数据的传输速
率。图3给出一种EPP接口的原理图,下面做一简单介绍。
图3中的接口没有使用EPP端口的nAStrb信号,因此只
能进行数据的输入和输出。图的左端为与EPP端口相连的各
种信号线。右端为与单片机相连的各种信号线。
图3 EPP数据传送接口的原理图
主机向单片机送数据:在OBE为高时。主机可以向EPP的
数据寄存器写数据,该操作使nWrite和nDStrb先后变低,两者
的或信号使INTa/IBEa(OBE)变低,由于nDStrb变低导致
nWait为高.于是主机将使nDStrb变高,这个高电平将ADO—
AD7的数据锁存到锁存器A中。而此时nWait变低,一次EPP
数据输出结束。INTa/IBEa(OBE)为低一方面通知单片机可以
取走数据.另一方面通知主机不能再输出数据。单片机方在
INTa/IBEa为低时,可以使OEa为低从锁存器A读出数据到
DBIa上,为低的OEa信号又使INTa/IBEa(OBE)变高,一次数
据传输结束。
单片机向主机送数据:在OBFa为低时。单片机可以在CPa
上产生一个高电平脉冲把DBOa上的输出数据锁存到锁存器
B中,CPa变高时,其反信号将nIntI/IBF(0BFa)信号变高,一
方面通知主机可以取走数据,另一方面通知单片机不能再输出
数据。主机在nIntr/IBF信号变高时,便可以从EPP的数据寄存
器读数据,该操作将使nDStrb变低,于是锁存器B的OE为
低,一方面使锁存器B的数据送到EPP的ADO—AD7上,另一
方面使nIntr/IBF(OBFa)信号变低。由于nDStrb变低导致nWait
为高,于是主机将使nDStrb变高。将数据读入主机,此时nWait
变低,一次数据传输结束。
图3中除了两个锁存器外,其余的电路可以很方便地用一
片GALl6V8实现。该GAL的编程方程如下所示:
module_EppAvr
titleqnterfaceforEPPandAVRdataexchange’
EppAvrdevice"P16V8C’;
”InputPins
nDStrb,nWrite,OEa,CPapin1,2,3,4;
”OutputPins
nWait,OE,CP,INTa,nIntrpin12,13,14,15,16;
EQUATIONS
CP=nDStrb#nWrite:
OE=nDStrb#!nWrite;
nWait=!nDStrb;
INTa=!(OEa&!(CP&INTa));
nIntr=!(!CPa&!(OE&nIntr));
end
计算机工程与应用2005.25113
万方数据
3接口的使用
接口中各信号与EPP端口的连接如表1同名信号所示.
OBE可以连接到EPP端口引脚12、13和15中的任何一个(这
里假设连接到引脚12上)。接13与单片机的连接是:DBIa和
DBOa分别接到单片机的8位输入和输出端13;对于没有读写
控制信号的单片机,Ea和CPa只能接到单片机的输出I/O线
上,通过多条指令完成数据的输出和输入;对于有读写控制信
号的单片机,Ea和CPa应该和读写控制及译码信号结合,用一
条指令便可完成数据的输出和输入。OBFa和IBEa分别接到单
片机的两个输入I/O线上(采用中断方式时,这两个信号应该
连接到单片机的外部中断线上)。
我们用AVR单片机AT90S8535构成的系统与上述接口
相连.由于资源限制,DBIa和DBOa都接到了8535的PORTC。
因此在数据的输入和输出转换时.都要对端口PORTC的方向
进行重新设置;又因为8535没有读写控制信号.每次输入和输
出都需要多条指令完成,因而对数据通信的最高速度会有一定
的限制。在交替输入和输出的情况下,一次数据的输入或输出
需要五条指令;在连续输人或输出的情况下,一次数据的输入
或输出需要三条指令。如果在8MHz的主频下单片机每条指令
需要0.125us,因此两种情况下的最高通信速率限制分别约为
1.6MB/s和2.6MB/s,基本上与EPP端口的最高速率相当。从
本文后面给出的结果可以看到,单片机方面的这一限制并不是
影响通信速度的主要因素。
查询方式数据传输:主机端通过读I/O地址Base+l得到
nIntr和OBE的状态,当nIntr为1时,表示有数据从单片机送
来,主机可以读I/O地址Base+4得到数据;当OBE为1时.表
示单片机已取走数据,主机可以将数据写到I/O地址Base+4
将其发送到接口供单片机读取。单片机方面.当IBEa为O时。
表示有数据从主机送来,单片机可以将OEa置低从DBIa得到
数据;当OBFa为0时,表示主机已取走数据,单片机可以将数
据送到DBOa上然后在CPa上产生一个正脉冲将数据发送给
主机。
中断方式数据传输:将EPP的L/0地址Base+2的bit4置
l,nIntr由低变高时可以产生主机的打印中断,INTa(低电平有
效)则可以当作单片机的中断信号,从而在两方都能实现数据
的中断接收。此外。OBFa的低电平状态也可以当作单片机的另
一路中断信号,以实现数据从单片机到主机的中断方式发送。
双方对数据的读写方法与查询方式一样。
4 EPP数据传输驱动程序的编写
上面介绍的数据通信过程中涉及到主机对EPP的啪端
口的读写操作,这在Windows环境的应用程序中是无法实现
的,必须靠驱动程序来实现。下面简单介绍一下用WinDriver
编写驱动程序进行EPP数据通信的方法。
4.1编写驱动程序
启动WinDriver的DriverWizard。选择Createanewdriver
project。在SelectYourDevice页面的列表中选中Parallelport。
在DefineandTestResourceforYourDevice页面的各选项单
中做如下设置:
I/O选项单:IORangel的范围设置为0x378到0x37f(默
认值)。
Interrupts选项单:In认的InterruptNumber值设置为7.触
1142005.25计算机工程与应用
发方式为EdgeTriggered(默{)A.值)。
Registers选项单:保留control(2),status(1)和strobe_data0
(4)三个寄存器即可(括号内数字为地址偏移量offset的值)。
在SelectCodeGenerationOptions页面选中C和MSDe.
veloperStudio6,5。
最后为项目文件取名并保存到某个文件夹中。按Finish结
束后,MSVC++IDE将自动打开项目文件,编译连接,可以得
到WinDriver生成的一个基于控制台的测试程序,在该程序的
基础上便可以编制EPP端口的数据通信程序。
4.2查询方式EPP数据通信程序
在WinDriver生成的EPPDRV_diag.C中(其中EPPDRV是
您为项目取的名字),保留对EPPDRV_Open(&hEPPDRV)和
EPPDRV』lose(hEPPDRV)的调用,将其间的代码改为您自己
的通信代码,即可完成Windows环境下基于控制台的查询方式
EPP数据通信程序。这里给出从EPP端口读和写一个字节的
子程序。
#defineOBE0x20
//OBE连接到EPP端口的12脚,为1时可以输出
#defineIBFOx40
//IBF(即nIntr)连接到EPP端口的10脚,为1时输入有效
#defineINTEN0x10
//控制端口的中断允许位
从EPP读人一个字节,返回一1表示无可用数据:返回0—255为读
到的数据
intReadEppByte(EPPDRVHANDLEhEPPDRV)
f
if(EPPDRV_Readstatus(hEPPDRV)&IBF)
returnEPPDRV_Readstrobe_data_0(hEPPDRV)&Oxff;
elsereturn一1;
j
将一个字节输出到EPP,返回FALSE表示不能输出(上一
次输出还没有取走),返回TRUE表示输出成功
BOOLWriteEppByte(EPPDRV—HANDLEhEPPDRV,BYTEData)
f
if(EPPDRVReadstatus(hEPPDRV)&OBE)
{
EPPDRV_Wntestrobedata0(hEPPDRV,Data);
returnTRUE;
l
elseretumFALSE;
J
4.3 中断方式EPP数据通信程序
对上面查询方式EPP数据通信程序进行如下改动:
(1)在EPPDRV_Open(&hEPPDRV)调用成功后加入下面
语句允许中断并使能打印口中断:
EPPDRV_IntAEnable(hEPPDRV,
EPPDRV_IntAHandlerRoutine);
EPPDRVWriteeontrol(hEPPDRV,
(BYTE)(EPPDRV—Readeontrol(hEPPDRV)IINT_EN));
//读一次数据以便能产生下一次中断
EPPDRV_Readstrobe_data._0(hEPPDRV);
(2)在EPPDRV—Close(hEPPDRV)调用之前加入下面语句
禁止中断:
if(EPPDRVIntAIsEnabled(hEPPDRV))
万方数据
EPPDRV_IntADisable(hEPPDRV);
EPPDRV_Wfitecontrol(hEPPDRV.
(BYTE)(EPPDRVReadcontrol(hEPPDRV)&~
INT_ENABLE_BIT));
(3)修改中断响应程序,在其中加入对EPP端13数据的读
入处理
void EPPDRV_IntAHandlerRoutine(EPPDRV_HANDLE
hEPPDRV,EPPDRV_IntA_RESULT女intResuh)
(
if(EPPDRV_Readstatus(hEPPDRV)&IBF)
f //取新收到的数据
RecData=EPPDRV_Readstrobe_data_0(hEPPDRV);
DataOk=TRUE://置数据收到标志
IntNum++;
】
)
其中RecData、DataOk和IntNum都是全局变量,当DataOk
为TRUE时,RecData则为新收到的数据,主程序中用完该数
据后应将DataOk置为FALSE,以免重复使用;IntNum则用于
计算中断接收数据的个数。另外,为保证中断方式数据通信成
功.应在Windows系统的硬件设备管理中允许打印端I:1使用中
断并将其中断号设定为7。
5 结论
我们将上述EPP接13电路和AVR单片机AT90S8535构
成的系统相连,验证了接13的正确性,并在主机不同操作系统
下进行测试,得到如表2所示的数据。
表2中单片机方的程序是用AVR汇编语言编写的,均采
用查询方式;主机方WinXP和Win98下的程序都是WinDriver
生成的VC++控制台程序,主机方Win98DOS下的程序是用基
于DOS的X86宏汇编语言编写的(WinXP下的命令提示符环
境已经不支持基于DOS的X86宏汇编程序对某些端El的访
问)。测试使用的主机为SamSungV30笔记本电脑(P4-2.66G)。
表2 EPP端口通信测试结果
运行环境和方式 双方同时收发 主机发单片机收单片机发主机收
从表2的数据可以得到下述结论:
(1)Windows系统下程序对端口的访问速度不如DOS系
统下的程序。
(2)WinXP系统下程序对端口的访问速度优于Win98
系统。
(3)WinDriver用户方式下的驱动程序中断方式的执行效
率不如查询方式,即中断处理的代价比较大。
(4)对EPP端口通信速度的限制因素主要在主机方而不
是单片机方。
鉴于上述情况,在Windows系统下对EPP端口的处理,最
好用查询方式.将数据输入和输出查询程序分别放在两个独立
的线程中去完成.这样即可以得到较高的数据通信速率,又易
于编程实现通信程序各种处理任务。(收稿日期:2005年1月)
参考文献
1.IntroductiontotheIEEE1284ParallelPortStandard.http://www.
f却o.com/1284int.htm
2.伍丁红.增强并行口EPP
及高速并行口A/D转化转换器的设
计【J].电子技术应用,1998;(2):47-48
3.朱世鸿.可编程逻辑器件PLD实用设计技术[M】.北京:电子工业出版
社.1994
(上接105页)
优化控制还缺乏一个有效的手段,只能通过建议的方法提出优
化策略,最终由人工完成对数据库的调整。未来可以在这方面
进行更深入的研究[sJ。
(3)7rPCCkader为数据库系统的性能优化和自管理研究
提供了一个平台,未来可以进一步将它的研究成果扩展到其他
应用程序和数据库自管理程序中唧。(收稿日期:2005年5月)
参考文献
1.TransactionProcessingPerformanceCouncil(TPC)TPCBENCH—
MARKTMC StandardSpecificationRevision5[S].2004-04
2.Quest公司:BenchmarkFactoryReferenceManual.http://www
quest.com
3.TPCCouncil.http://www.tpc.org/
4.MartinP.Luri(IBM公司):在Linux上模拟大规模并行数据库处理.
http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarti-
cles/02031urie/02031urie_eng.shtml
5.GLanfranchi.PDellaPeruta,APerroneeta1.Towardanewlands—
capeofsystemsmannagementinanautonomiccomputingenviron—
mentiJ].IBMSYSTEMSJOURNAL,2003;42(1)
6.人大金仓信息技术有限公司.KingbaseES管理员手册与JDBC开发
手册(KingbaseES产品技术文档)
7.Johnson.OCP:Oracle9i性能调整学习指南JosephC[M].电子工业出
版社
8.LWRussell.SPMorgan.EGChron.Clockwork:Anewmovementin
autonoticsystems[J】.IBMSYSTEMSJOURNAL,2003;42(1)
9.JKephart.DChess.TheVisionofAutonomicComputing[J].Computer
Magazine,IEEE,2003;(1)
10.印是.Java与面向对象程序设计教程【M].第一版,高等教育出版社
计算机工程与应用2005.25115
万方数据
AVR单片机与PC机打印口高速双向数据通信接口
作者: 胡平平, 王晶杰, Hu Pingping, Wang Jingjie
作者单位: 北京机械工业学院计算机及自动化系,北京,100085
刊名: 计算机工程与应用
英文刊名: COMPUTER ENGINEERING AND APPLICATIONS
年,卷(期): 2005,41(25)
引用次数: 0次
参考文献(3条)
1.Introduction to the IEEE 1284 Parallel Port Standard
2.伍丁红 增强并行口EPP协议及高速并行口A/D转换器的设计[期刊论文]-电子技术应用 1998(2)
3.朱世鸿 可编程逻辑器件PLD实用设计技术 1994
相似文献(5条)
1.期刊论文 汪洋.叶湘滨 利用EPP接口协议实现高速数据通信 -单片机与嵌入式系统应用2001(1)
如何实现PC与单片机系统间的高速数据通信,是测量控制系统中经常遇到的难题.本文系统地介绍利用EPP接口协议实现高速数据通信的原理,并从硬
件、软件两方面给出一个应用EPP接口协议的设计实例.
2.期刊论文 郭荣军 用嵌入式汇编检测打印机联机状态 -电脑开发与应用2003,16(4)
在Windows98环境下,详细介绍了打印机接口、数据通信原理、用C++Builder5.0的嵌入式汇编功能,通过直接对打印机端口的读写实现了打印机联机
状态的检测,实现很方便且检测到的状态比其他方法更好.最后提出了利用PC机的打印机接口应用于其他数据通信场合的设想.
3.期刊论文 汪洋.王湘祁.叶湘滨.隋卫平 基于EPP的便携式数据采集处理系统 -仪器仪表学报2001,22(z1)
EPP(Enhanced Parallel Port,增强型并行口)接口协议解决了PC与数据采集系统间的高速双向数据通信问题。本文提出了利用EPP接口实现便携式数
据采集处理系统的一般架构,并举出了一个利用EPP接口实现PC与单片机数据采集系统的通信的实例。
4.会议论文 汪洋.王湘祁.叶湘滨.隋卫平 基于EPP的便携式数据采集处理系统 2001
EPP(Enhanced Parallel Port,增强型并行口)接口协议解决了PC与数据采集系统间的高速双向数据通信问题.本文提出了利用EPP接口实现便携式数
据采集处理系统的一般架构,并举出了一个利用EPP接口实现PC与单片机数据采集系统的通信的实例.
5.期刊论文 曹海燕.葛艳蕊.CAO Hai-yan.GE Yan-rui EPP协议及其在光释光断代仪中的设计与应用 -河北省科学
院学报2006,23(3)
在矿物研究、地质样品年龄测定以及考古等领域,光释光仪器有着举足轻重的地位,而如何实现仪器与计算机的高速数据通信是仪器运行的关键.作者
阐述了EPP协议,并给出了接口电路的
.实验表明,EPP接口电路工作良好,符合要求.
本文链接:http://d.g.wanfangdata.com.cn/Periodical_jsjgcyyy200525034.aspx
下载时间:2010年1月4日