并口编程技术

上传人:re****.1 文档编号:457982344 上传时间:2022-09-27 格式:DOCX 页数:7 大小:78.25KB
返回 下载 相关 举报
并口编程技术_第1页
第1页 / 共7页
并口编程技术_第2页
第2页 / 共7页
并口编程技术_第3页
第3页 / 共7页
并口编程技术_第4页
第4页 / 共7页
并口编程技术_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《并口编程技术》由会员分享,可在线阅读,更多相关《并口编程技术(7页珍藏版)》请在金锄头文库上搜索。

1、并口编程技术本文主要介绍并行端口的结构以及简单的对并口的读、写并以及如何获得端口的状态。并行接口的分类:SPP(标准并行接口),EPP(增强型并行接口 ),ECP(扩展型并行端口)标准并行端口(SPP)也是最早的端口定义,主要功能如下,1:并行端口提供了 8个数据线以进行并 行的字节传输, 2:计算机能够通过数据线向打印机发送选能信号,以通知打印机已经准备好接收数据, 3: 打印机招收到数据后,向计算机发送一个回应信号(NACK)。其各位信号线所代表的意义详见下表。增强型并行端口(EPP)的出现提供了一种更高性能的连接方式,并东路向下兼容所有在此之前存在 的并行接口及外设。与SPP不同之处在于

2、原来17个信号中的重新定义,在这17个信号中,EPP使用了其 中的14个信号进行传输,握手和选通,剩下的3个信号可以由外设设计者有来自定义。并行接口的大致结构:并行口一般有25个引脚,其中包括8位数据线,5位打印机状态线,4位控制线.下面将对这些引脚予以详细 说明:(注:1:出,表示由计算机发向打印机;入,表示由打印机发向计算机,2:低电平有效信号用上划线或星号表示(如S7*),高电平有效信号则没有上划线或星号)14AUTO FEEDC1+Cuntrul自动馈送氐电平有效E卩机对于每遇到一阶E 行.15/ERRORS3StatusA错误,该.信号由打印机. 明打印机处于错16/INITC2Cc

3、mtrul出初始化,低电平有热信对打印机进行17/SELINC3*Control出选择输入低电平有歹经选中的打18GND信号接*19GND信号接土20GND信号接土21GND信号割22GND信号閱23GND信号劇24GND信号劇25GND信吕閱打印机常用端口:对于LPT1:OX378为数据发送地址,0X379为打印机状态地址,0X37A为计算机向打印机控 制地址, 通常为了使程序具有通用性我们可以从注册表中取得这个地址,对于 WINDOWS CE 而言,这个值被 存储在HKEY_LOCAL_MACHINE/DRIVERS/BUILTIN/PARALLEL/IOBASE.然后我们就可以通过对 此

4、三个端口进行控制达到简单的并口编程的目的.下面是对打印机状态端口及打印机控制端口作一详细解释:控制端口:这个0x37A计算机控制打印机的地址,可以产生对打印机进行控制的必要信号,可写,两高位(7和8)没什 么用,第6位写1表示可以向并口输出数据。第五位中断信号(IRQ EN),利用此信号线,驱动程序可 以在STATUS端口信号(nAck)的帮助下,使用该信号对中断信号的产生与否进行控制。第3,2,1,0位 分别控制第17线,第16线,第14线和第1线。(可以控制它们的状态)具体作用可参见前表状态端口:Ok 3 79.(-S7)11忙.Css).应答12缺纟氐.网.13联机(S3)* 口 L天S

5、281SO0x379为打印机状态地址,可读,通过个端口打印机适配器可以很方便的读取打印机的状态。标记为S7的信号表示最高位,SO表示为最低位,只有S3-S7五个信号才是真正有用的信号。他们的具 体信号功能解释如下:S7*(busy):打印机使用该信号表示打印机正处于忙状态,不能再接收数据。需要强调的是,该信号通过适 配器板时,进行了反相处理,因此连接器上的低电平到微处理器时就变成了高电平。S6 (nAck):当适配器发出选通信号时,打印机就会产生该信号作为响应。通常情况下,该信号是高电平, 选通打印机之后,打印机首先把该信号设为低电平,然后再返回高电平。S5 (PE):当打印机缺纸时,它就会产

6、生一个这样的信号,通常情况下,该信号由打印机保持为低电平,打 印机纸使用完之后,该信号就会变成高电平。S4 (SELECT):当打印机恢复正常操作时,它就会插入一个高电平的该信号。当打印机处于无效状态时, 访信号就会变成低电平。S3 (NERROR):当打印机出现错误时就会产生这种邮错信号。产生出错的原因很多,如打印纸堵了或产 生了内部错误。产生错误时该信号就会设置成低电平。以下为在Windows CE下打印机各种状态时,所对应的状态寄存器的(AL)的值:1:在没接入打印机时寄存器AL值为127,对应二进制是:11111112:打印机在缺纸灯不亮时寄存器AL值为144,对应二进制是:10010

7、0003:打印机在缺纸灯亮时寄存器AL值为119;对应二进制值是:111011114:打印机在不缺纸的情况下寄存器AL值223,对应二进制值是:110111115:打印机在没开机的情况下得到 AH 值为 207,对应二进制值是: 11001111下面介绍对并口的编程控制:(编程控制示例)(为汇编代码)/ 此段代码为并口向打印机进行写数据,并发送控制信息。#define LPT_CLEAR_MASK 0x40#define LPT_STROBE_HI 0x0D#define LPT_STROBE_LO 0x0C#define LPT_STATUS_BITS 0xF8#define LPT_BIT

8、S_INVERT 0x48#define LPT_NOTBUSY 0x80#define LPT_PAPEROUT 0x20#define LPT_SELECT 0x10 #define LPT_NFAULT 0x08#define LPT_TimeOut 0x01 void OutByte(ULONG dataport, BYTE databyte) #if x86_asm mov dx, word ptr dataportmov al, byte ptr databyteout dx, alout dx, aladd dx, 2in al, dxand al, LPT_CLEAR_MASK

9、mov cl, alor al, LPT_STROBE_HIout dx, alout dx, alout dx, alout dx, alor cl, LPT_STROBE_LOmov al, clout dx, al#elseWRITE_PORT_UCHAR(PUCHAR)dataport,databyte);dataport+=2;databyte = (READ_PORT_UCHAR(PUCHAR)dataport) & LPT_CLEAR_MASK)| LPT_STROBE_HI;WRITE_PORT_UCHAR(PUCHAR)dataport,databyte);databyte

10、= (READ_PORT_UCHAR(PUCHAR)dataport) & LPT_CLEAR_MASK)| LPT_STROBE_LO;WRITE_PORT_UCHAR(PUCHAR)dataport,databyte);#endif/ 此段代码为读取打印机当前状态。BYTE CheckStatus(unsigned port) BYTE bRet;#if x86_asm mov dx, word ptrportCheckme:in al, dxmov ah, alnopnopin al, dxcmp al, ahjnz Checkmeand ah, LPT_STATUS_BITSxor a

11、h, LPT_BITS_INVERTtest ah, LPT_PAPEROUT or LPT_NFAULTjnz CS_HasErrortest ah, LPT_SELECTjz CS_HasErrorand ah, LPT_NOTBUSYjz CS_HasErrorxor eax, eaxCS_HasError:mov bRet,al#elseBYTE bStatus;do bRet= bStatus= READ_PORT_UCHAR(PUCHAR)port); while (bStatus != READ_PORT_UCHAR(PUCHAR)port); bStatus&= LPT_STATUS_BITS;bStatus LPT_BITS_INVERT;if (!(bStatus & (LPT_PAPEROUT | LPT_NFAULT) &(bStatus & LPT_SELECT) & (bStatus & LPT_NOTBUSY) bRet=0;#endifreturn bRet;/ The End

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号