80C51和CH375的USB打印機驅(qū)動設(shè)計
引 言
本文引用地址:http://m.butianyuan.cn/article/20770.htm本課題來源于北京普析通用公司的一個項目。由于公司現(xiàn)有單機版光譜儀器產(chǎn)品(如1810、t6等)采用的是并行口打印技術(shù),而隨著usb打印機技術(shù)的逐漸普及,并行口打印機越來越不好買到,而且有些用戶的打印機只是usb接口而非并行口,因此現(xiàn)有儀器產(chǎn)品對打印機的支持變得不能適應(yīng)用戶需要。為了實現(xiàn)能將公司的并行口儀器直接和usb打印機相連進行打印,決定設(shè)計開發(fā)一款lpt-usb打印機的驅(qū)動器,負責并口儀器和usb打印機的連接。
本文利用單片機和usb總線接口芯片實現(xiàn)lpt-usb打印機的驅(qū)動器設(shè)計。利用該設(shè)計將能夠?qū)崿F(xiàn)并行打印口數(shù)據(jù)可以在usb打印機上的直接打印工作,克服了有些并口儀器必須連接并口打印機才能打印的弊端,極大地方便了用戶的使用。
1 ch375芯片特點及工作原理
1.1 ch375芯片特點
ch375 是一個usb總線的通用接口芯片,支持host主機方式和slave設(shè)備方式。ch375芯片內(nèi)部集成了pll倍頻器、主從usb接口sie、數(shù)據(jù)緩沖區(qū)、被動并行接口、異步串行接口、命令解釋器、控制傳輸?shù)膮f(xié)議處理器、通用的固件程序等。在本地端,ch375 具有8 位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到單片機/dsp/mcu 等控制器的系統(tǒng)總線上。ch375 的usb 主機方式支持各種常用的usb 全速設(shè)備,外部單片機/dsp/mcu 可以通過ch375 按照相應(yīng)的usb 協(xié)議與usb 設(shè)備通信。ch375芯片有如下特點:
?、?全速usbhost 主機接口usb v1.1,支持動態(tài)切換主機與設(shè)備方式,外圍元器件只需要一個晶體和2個電容;
② 主機端點輸入和輸出緩沖區(qū)各64 b,支持常用的12 mbps 全速usb設(shè)備;
?、?支持usb 設(shè)備的控制傳輸、批量傳輸和中斷傳輸;
?、?自動檢測usb 設(shè)備的連接和斷開,提供設(shè)備連接和斷開的事件通知;
?、?內(nèi)置控制傳輸協(xié)議處理器,簡化常用的控制傳輸;
?、?并行接口包含8 位數(shù)據(jù)總線,4 線控制(讀選通、寫選通、片選輸入和中斷輸出);
⑦ 串行接口包含串行輸入、串行輸出和中斷輸出,支持通信波特率動態(tài)調(diào)整;
⑧ 支持5 v電源電壓和3.3 v電源電壓。
1. 2ch375芯片工作原理
如圖1所示,ch375芯片通過被動并行接口芯片可以很方便地掛接到各種8 位單片機、dsp和mcu 的系統(tǒng)總線上,并且可以與多個外圍器件共存。并口信號線包括:8 位雙向數(shù)據(jù)總線d7~d0、讀選通輸入rd、寫選通輸入wr、片選輸入cs、中斷輸出int以及地址輸入線a0。ch375 芯片的rd和wr可以分別連接到單片機的讀選通輸出引腳和寫選通輸出引腳。int可以連接到單片機的中斷輸入引腳,中斷請求是低電平有效。當cs和rd以及a0 都為低電平時,ch375 中的數(shù)據(jù)通過d7~d0 輸出;當cs和wr以及a0 都為低電平時,d7~d0 上的數(shù)據(jù)被寫入ch375 芯片中;當cs和wr都為低電平而a1 為高電平時,d7~d0 上的數(shù)據(jù)被作為命令碼寫入ch375 芯片中。
圖1主機通過ch375控制usb設(shè)備原理圖
圖2硬件電路原理圖
2 硬件電路設(shè)計
單片機通過ch375控制usb打印機的硬件電路,如圖2所示。
如圖2所示,ch375芯片通過被動并行接口芯片掛接到8 位單片機的系統(tǒng)總線上,ch375 的txd 引腳接地,從而使ch375 工作于并口方式。ch375芯片的8 位雙向數(shù)據(jù)總線d7~d0直接與單片機的p0數(shù)據(jù)口相連,rd和wr分別連接到單片機的讀選通輸出引腳和寫選通輸出引腳。片選信號cs連接到單片機的p26引腳,該引腳為低電平時選通ch375芯片。int可以連接到單片機的中斷輸入int0引腳,中斷請求是低電平有效。地址輸入線a0連接至單片機的p25引腳,當a0引腳為高電平時選擇命令端口,可以寫入命令;當a0引腳為低電平時選擇數(shù)據(jù)端口,可以讀寫數(shù)據(jù)。
采用74hc245三態(tài)雙向總線驅(qū)動器作為打印機口向單片機傳送并口數(shù)據(jù)的接口,其片選信號與單片機的p27相連,方向控制位dir與單片機的t0相連。當dir置成高電平時,數(shù)據(jù)從a端口向b端口傳送,此時單片機可以通過讀取74hc245數(shù)據(jù)端口即可得到并口數(shù)據(jù)。打印機狀態(tài)信號busy連接至單片機的p15引腳,并口數(shù)據(jù)采集控制信號ctrl直接連至單片機的int1中斷引腳,當int1產(chǎn)生中斷時,單片機從并口將數(shù)據(jù)取走,然后再發(fā)送至打印機打印出來。
3 軟件設(shè)計實現(xiàn)
軟件實現(xiàn)的流程如圖3所示。該軟件編程是用c語言實現(xiàn)的,通信過程主要包括兩部分:初始化和并口數(shù)據(jù)的采集。
并口數(shù)據(jù)的采集是通過中斷方式進行的。采集數(shù)據(jù)的控制信號ctrl連接至單片機的中斷int1引腳,通過不斷檢測int1的狀態(tài)來進行并口數(shù)據(jù)的采集。當打印機不忙(即busy=0)時,如果有int1中斷產(chǎn)生,則從74hc245的數(shù)據(jù)端口將并口數(shù)據(jù)讀出,同時將打印機忙標志busy置1(表示打印機忙)。當數(shù)據(jù)已經(jīng)發(fā)送至打印機打印時,則將打印機忙標志busy置0。然后重復(fù)上述步驟進行并口數(shù)據(jù)的采集及打印。
初始化過程分兩部分:單片機初始化和打印機的枚舉初始化。單片機的初始化過程就是直接向相應(yīng)的i/o口寫初始化值及設(shè)置看門狗,可調(diào)用函數(shù)watchdog_init()實現(xiàn)設(shè)置看門狗。
圖3軟件實現(xiàn)流程圖
打印機的枚舉初始化過程很重要,要實現(xiàn)打印采集到的并口數(shù)據(jù),首先必須成功地枚舉初始化打印機。初始化usb打印機函數(shù)init_print()主要用到以下幾個主要函數(shù):
get_descr(1),獲取設(shè)備描述符。
rd_usb_data(buffer),從ch375中讀取數(shù)據(jù)到單片機中。
set_addr(3),設(shè)置打印機的usb地址。
get_full_descr(buffer),獲取配置描述符。
set_config(unsigned char cfg),加載usb配置值。
編者注:具體程序見本刊網(wǎng)站:www.mesnet.com.cn
結(jié)語
本文詳細介紹了基于80c51單片機和usb總線通用接口芯片ch375的lpt-usb打印機驅(qū)動器設(shè)計及c語言實現(xiàn)。經(jīng)測試表明,利用該設(shè)計能夠?qū)崿F(xiàn)并口儀器數(shù)據(jù)直接經(jīng)usb打印機打印出來,打印結(jié)果正確無誤。該設(shè)計現(xiàn)已被用于并口儀器上,利用該驅(qū)動器,并行口儀器可以直接和usb打印機相連進行打印,極大克服了有些并口儀器必須連接并口打印機才能打印的弊端,從而很大程度上方便了用戶。
評論