新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 80C51和CH375的USB打印机驱动设计

80C51和CH375的USB打印机驱动设计

——
作者:作者:中国地质大学 王小芳 郑宽磊 强伟锋 时间:2007-01-26 来源:《单片机与嵌入式系统应用》 收藏


引言

本文引用地址:https://www.eepw.com.cn/article/20835.htm

本课题来源于北京普析通用公司的一个项目。由于公司现有单机版光谱仪器产品(如1810、t6等)采用的是并行口打印技术,而随着usb打印机技术的逐渐普及,并行口打印机越来越不好买到,而且有些用户的打印机只是usb接口而非并行口,因此现有仪器产品对打印机的支持变得不能适应用户需要。为了实现能将公司的并行口仪器直接和usb打印机相连进行打印,决定设计开发一款lpt-usb打印机的驱动器,负责并口仪器和usb打印机的连接。

本文利用单片机和usb总线接口芯片实现lpt-usb打印机的驱动器设计。利用该设计将能够实现并行打印口数据可以在usb打印机上的直接打印工作,克服了有些并口仪器必须连接并口打印机才能打印的弊端,极大地方便了用户的使用。

1 ch375芯片特点及工作原理

1.1 ch375芯片特点

ch375是一个usb总线的通用接口芯片,支持host主机方式和slave设备方式。ch375芯片内部集成了pll倍频器、主从usb接口sie、数据缓冲区、被动并行接口、异步串行接口、命令解释器、控制传输的协议处理器、通用的固件程序等。在本地端,ch375具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/dsp/mcu等控制器的系统总线上。ch375的usb主机方式支持各种常用的usb全速设备,外部单片机/dsp/mcu可以通过ch375按照相应的usb协议与usb设备通信。ch375芯片有如下特点:

①全速usbhost主机接口usbv1.1,支持动态切换主机与设备方式,外围元器件只需要一个晶体和2个电容;

②主机端点输入和输出缓冲区各64b,支持常用的12mbps全速usb设备;

③支持usb设备的控制传输、批量传输和中断传输;

④自动检测usb设备的连接和断开,提供设备连接和断开的事件通知;

⑤内置控制传输协议处理器,简化常用的控制传输;

⑥并行接口包含8位数据总线,4线控制(读选通、写选通、片选输入和中断输出);

⑦串行接口包含串行输入、串行输出和中断输出,支持通信波特率动态调整;

⑧支持5v电源电压和3.3v电源电压。

1.2 ch375芯片工作原理

如图1所示,ch375芯片通过被动并行接口芯片可以很方便地挂接到各种8位单片机、dsp和mcu的系统总线上,并且可以与多个外围器件共存。并口信号线包括:8位双向数据总线d7~d0、读选通输入rd、写选通输入wr、片选输入cs、中断输出int以及地址输入线a0。ch375芯片的rd和wr可以分别连接到单片机的读选通输出引脚和写选通输出引脚。int可以连接到单片机的中断输入引脚,中断请求是低电平有效。当cs和rd以及a0都为低电平时,ch375中的数据通过d7~d0输出;当cs和wr以及a0都为低电平时,d7~d0上的数据被写入ch375芯片中;当cs和wr都为低电平而a1为高电平时,d7~d0上的数据被作为命令码写入ch375芯片中。



2 硬件电路设计

单片机通过ch375控制usb打印机的硬件电路,如图2所示。

如图2所示,ch375芯片通过被动并行接口芯片挂接到8位单片机的系统总线上,ch375的txd引脚接地,从而使ch375工作于并口方式。ch375芯片的8位双向数据总线d7~d0直接与单片机的p0数据口相连,rd和wr分别连接到单片机的读选通输出引脚和写选通输出引脚。片选信号cs连接到单片机的p26引脚,该引脚为低电平时选通ch375芯片。int可以连接到单片机的中断输入int0引脚,中断请求是低电平有效。地址输入线a0连接至单片机的p25引脚,当a0引脚为高电平时选择命令端口,可以写入命令;当a0引脚为低电平时选择数据端口,可以读写数据。

采用74hc245三态双向总线驱动器作为打印机口向单片机传送并口数据的接口,其片选信号与单片机的p27相连,方向控制位dir与单片机的t0相连。当dir置成高电平时,数据从a端口向b端口传送,此时单片机可以通过读取74hc245数据端口即可得到并口数据。打印机状态信号busy连接至单片机的p15引脚,并口数据采集控制信号ctrl直接连至单片机的int1中断引脚,当int1产生中断时,单片机从并口将数据取走,然后再发送至打印机打印出来。

3 软件设计实现

软件实现的流程如图3所示。该软件编程是用c语言实现的,通信过程主要包括两部分:初始化和并口数据的采集。

并口数据的采集是通过中断方式进行的。采集数据的控制信号ctrl连接至单片机的中断int1引脚,通过不断检测int1的状态来进行并口数据的采集。当打印机不忙(即busy=0)时,如果有int1中断产生,则从74hc245的数据端口将并口数据读出,同时将打印机忙标志busy置1(表示打印机忙)。当数据已经发送至打印机打印时,则将打印机忙标志busy置0。然后重复上述步骤进行并口数据的采集及打印。

初始化过程分两部分:单片机初始化和打印机的枚举初始化。单片机的初始化过程就是直接向相应的i/o口写初始化值及设置看门狗,可调用函数watchdog_init()实现设置看门狗。

打印机的枚举初始化过程很重要,要实现打印采集到的并口数据,首先必须成功地枚举初始化打印机。初始化usb打印机函数init_print()主要用到以下几个主要函数:

◇get_descr(1),获取设备描述符。

◇rd_usb_data(buffer),从ch375中读取数据到单片机中。

◇set_addr(3),设置打印机的usb地址。

◇get_full_descr(buffer),获取配置描述符。

◇set_config(unsignedcharcfg),加载usb配置值。

编者注:具体程序见本刊网站:www.mesnet.com.cn

结语

本文详细介绍了基于80c51单片机和usb总线通用接口芯片ch375的lpt-usb打印机驱动器设计及c语言实现。经测试表明,利用该设计能够实现并口仪器数据直接经usb打印机打印出来,打印结果正确无误。该设计现已被用于并口仪器上,利用该驱动器,并行口仪器可以直接和usb打印机相连进行打印,极大克服了有些并口仪器必须连接并口打印机才能打印的弊端,从而很大程度上方便了用户。



关键词:

评论


相关推荐

技术专区

关闭