<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 基于CH375的LPT-USB打印機驅(qū)動器的設(shè)計

          基于CH375的LPT-USB打印機驅(qū)動器的設(shè)計

          ——
          作者:王小芳 鄭寬磊 強偉 時間:2007-11-26 來源:國外電子元器件 收藏

          1 引言

              本課題來源于北京普析通用公司。 由于該公司現(xiàn)有光譜儀器的單機版(如1810和T6等)采用的是并行口打印技術(shù),而隨著USB打印機技術(shù)的逐漸普及,并行口打印機越來越少,有些用戶原有的打印機只是USB接口而非并行口,因此現(xiàn)有儀器對打印機的支持不能適應(yīng)用戶需要。為了使該公司的并行口儀器直接和USB打印機相連,筆者設(shè)計了一種LPT-USB,實現(xiàn)并口儀器與USB打印機的連接。

              筆者利用單片機和USB總線接口器件實現(xiàn)LPT-USB的設(shè)計。利用該設(shè)計將能夠?qū)崿F(xiàn)并行打印口數(shù)據(jù)在USB打印機上的直接打印,克服了有些并口儀器必須連接并口打印機才能打印的弊端,極大地方便了用戶的使用。

          2 CH375的特點及工作原理

          2.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的特點如下:

          (1)全速USB-HOST主機接口符合USB1.1,支持動態(tài)切換主機與設(shè)備方式,外圍元器件只需要1個晶體和2個電容;

          (2)主機端點輸入和輸出緩沖區(qū)各有64字節(jié),支持常用的12Mb/s全速USB設(shè)備;

          (3)支持USB設(shè)備的控制傳輸、批量傳輸、中斷傳輸;

          (4)自動檢測USB設(shè)備的連接和斷開,提供設(shè)備連接和斷開的通知;

          (5)內(nèi)置控制傳輸?shù)膮f(xié)議處理器,簡化常用的控制傳輸;

          (6)并行接口包含8位數(shù)據(jù)總線,4線控制:讀選通、寫選通、片選輸入和中斷輸出;

          (7)串行接口包括串行輸入、串行輸出和中斷輸出,支持通信波特率的動態(tài)調(diào)整。

          (8)支持5V電源電壓和3.3V電源電壓。

          2.2 CH375的工作原理

              如圖1所示,CH375通過被動并行接口電路可以方便地掛接到各種8位單片機、DSP、MCU的系統(tǒng)總線上,并且可以與多個外圍器件共存。并口信號線包括8位雙向數(shù)據(jù)總線D7-DO、讀選通輸入RD、寫選通輸入WR、片選輸入CS、中斷輸出INT及地址輸入線AO。CH375的RD和WR可以分別連接到單片機的讀選通輸出引腳和寫選通輸出引腳。INT可以連接到單片機的中斷輸入引腳,中斷請求是低電平有效。當(dāng)CS、RD及AO都為低電平時,CH375中的數(shù)據(jù)通過D7-DO輸出;當(dāng)CS和WR以及AO都為低電平時,D7-DO上的數(shù)據(jù)被寫入CH375;當(dāng)CS、WR都為低電平而A1為高電平時,D7-DO上的數(shù)據(jù)被作為命令碼寫入CH375。

          3 硬件電路設(shè)計

              圖2所示為單片機通過CH375控制USB打印機的硬件電路。CH375通過被動并行接口電路掛接到8位單片機的系統(tǒng)總線上,CH375的TXD引腳接地,使CH375工作于并口方式。CH375的8位雙向數(shù)據(jù)總線D7-DO直接與單片機的PO數(shù)據(jù)口相連,RD和WR分別連接到單片機的讀選通輸出引腳和寫選通輸出引腳。片選信號CS連接到單片機的P2.6引腳,該引腳為低電平時選通CH375。INT可以連接到單片機的中斷輸入INTO引腳,中斷請求是低電平有效。地址輸入線AO連接至單片機的P2.5引腳,當(dāng)AO引腳為高電平時選擇命令端口,可以寫入命令,當(dāng)AO引腳為低電平時選擇數(shù)據(jù)斷口,可以讀寫數(shù)據(jù)。

              采用74HC245型三態(tài)雙向總線驅(qū)動器作為打印機口向單片機傳送并口數(shù)據(jù)的接口,其片選信號與單片機的P2.7相連,方向控制位DIR與單片機的P3.4相連,當(dāng)DIR為高電平時,數(shù)據(jù)從A端口向B端口傳送,此時單片機可以通過讀取74HC245數(shù)據(jù)端口得到并口的數(shù)據(jù),打印機狀態(tài)信號BUSY連接至單片機的P1.5引腳,并口數(shù)據(jù)采集控制信號CTRL直接連至單片機的INT1中斷引腳,當(dāng)INT1產(chǎn)生中斷時,單片機從并口讀取數(shù)據(jù),然后再發(fā)送至打印機進(jìn)行打印。

          4 軟件設(shè)計

          4.1 軟件流程


              軟件流程如圖3所示。該軟件用C語言編程,通信過程主要包括初始化和并口數(shù)據(jù)的采集。

              并口數(shù)據(jù)的采集是通過中斷方式進(jìn)行的。采集數(shù)據(jù)的控制信號CTRL連接至單片機的中斷INT1引腳,通過不斷檢測INT1的狀態(tài)進(jìn)行并口數(shù)據(jù)的采集。當(dāng)打印機不忙(BUSY=0)時,如果產(chǎn)生INT1中斷,則從74HC245的數(shù)據(jù)斷口讀出并口數(shù)據(jù),同時將打印機忙標(biāo)志BUSY置1(表示打印機忙),當(dāng)數(shù)據(jù)已經(jīng)發(fā)送至打印機打印時,則將打印機忙標(biāo)志BUSY置0。然后重復(fù)上述步驟進(jìn)行并口數(shù)據(jù)的采集及打印。

              初始化過程分為單片機初始化和打印機的枚舉初始化。單片機的初始化過程是直接向相應(yīng)的I/0口寫初始化值及設(shè)置看門狗,可調(diào)用函數(shù)watchdog_init()設(shè)置看門狗。

              打印機的枚舉初始化過程是很重要的,要打印采集到的并口數(shù)據(jù)首先必須成功地枚舉初始化打印機。初始化USB打印機函數(shù)init_print()主要使用以下幾個主要函數(shù):

          4.2 主程序源代碼

          主程序代碼如下:

          5 結(jié)束語

              本文詳細(xì)介紹了基于80C51型單片機和CH375型USB總線通用接口電路的LPT-USB的設(shè)計及C語言實現(xiàn)。測試結(jié)果表明,利用該設(shè)計能夠?qū)崿F(xiàn)并口儀器數(shù)據(jù)直接經(jīng)USB打印機打印,打印結(jié)果正確無誤。該設(shè)計現(xiàn)已用于并口儀器上,并行口儀器利用該驅(qū)動器可以直接和USB打印機相連并進(jìn)行打印,克服了有些并口儀器必須連接并口打印機才能打印的弊端,方便了用戶。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();