如題:我用的80C196KB單片機(jī),375B操作鍵盤。用的下載例程,獲取配置描述戶總是不成功 只能返回14h,和以前操作打印機(jī)遇到的問題一模一樣。是需要演延時(shí),還是什么原因? 我瀏覽論壇上相關(guān)帖子,說有些鍵盤是所謂的復(fù)合設(shè)備,怎么知道的? 可否也發(fā)個(gè)例程給我? SLJ8816@163.COM 謝謝解答
14H應(yīng)該是一個(gè)中斷狀態(tài),發(fā)送完獲取描述符命令之后,有沒有等待中斷狀態(tài)產(chǎn)生,如果有 那么先獲取中斷狀態(tài),然后在讀數(shù)據(jù)。
復(fù)合設(shè)備可以根據(jù)描述符判定,或者插在電腦上看看出現(xiàn)幾個(gè)設(shè)備。很容易判斷。 這個(gè)現(xiàn)象應(yīng)該主要是你程序有問題,你把代碼貼出來看看。
返回14H的中斷狀態(tài)應(yīng)該為正確的中斷狀態(tài),你需要去跟蹤下你的程序,到底在哪個(gè)步驟返回了這個(gè)狀態(tài),還有一個(gè)需要注意的就是在設(shè)置地址之后需要加2MS的延時(shí),這個(gè)延時(shí)可以大于2MS,但是不能小于1MS。
;*******************************;設(shè)置USB地址函數(shù) 入口參數(shù)C 地址值1——127 SET_ADDR: LDB A,#CMD_SET_ADDRESS ;設(shè)定USB設(shè)備端的USB地址 STB A,CH375_CMD_PORT ; NOP ; LDB A,#06H STB C,CH375_DAT_PORT; JBc POR2,2,$ SET_ADDR2: LDB A,#CMD_GET_STATUS ;讀中斷狀態(tài)并獲取狀態(tài) STB A,CH375_CMD_PORT LDB Aal,CH375_DAT_PORT
CMPB Aal,#USB_INT_SUCCESS ;判斷是否操作成功 JNE SET_ADDR2 LDB A,#CMD_SET_USB_ADDR ;同步設(shè)定USB主機(jī)端的USB地址 STB A,CH375_CMD_PORT ; NOP ; LDB A,#06H STB C,CH375_DAT_PORT; RET
USB_PRINT: RET A,#CMD_SET_USB_MODE ;設(shè)定工作模式6 STB A,CH375_CMD_PORT NOP LDB A,#06H STB A,CH375_DAT_PORT; LDB A,#0bh ;設(shè)定375為低速模式 STB A,CH375_CMD_PORT NOP LDB A,#17H STB A,CH375_DAT_PORT; NOP LDB A,#0d8H STB A,CH375_DAT_PORT; JBC POR2,2,$ USB_PRINT1: LDB A,#CMD_GET_STATUS ;讀中斷狀態(tài)并獲取狀態(tài),請(qǐng)求數(shù)據(jù)讀出 STB A,CH375_CMD_PORT ;/* 等待連接 */ LDB C,CH375_DAT_PORT CMPB C,#USB_INT_CONNECT ;判斷是否連接上 JNE USB_PRINT1 LDB C,#01H LCALL GET_DESCR ;獲取設(shè)備描述符
LD W5,#AR_DATA ;讀取設(shè)備描述符 LCALL RD_USB_DATA //讀出的設(shè)備描述符是12 01 10 01 00 00 00 08 81 0A 01 01 10 01 01 02 00 01 LDB C,#05H LCALL SET_ADDR ;設(shè)置USB地址函數(shù) LCALL DELAY50MS ;新加的延時(shí)50MS
LDB C,#02H LCALL GET_DESCR ;獲取配置描述符 LD W5,#AR_DATA LCALL RD_USB_DATA ;讀配置描述符 ;不管加不加延時(shí),讀取的都是14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
插在電腦上出現(xiàn)目錄:人體學(xué)輸入設(shè)備 下面四個(gè)子目錄: HID-compliant device USB 人體學(xué)輸入設(shè)備 USB 人體學(xué)輸入設(shè)備 符合 HID 標(biāo)準(zhǔn)的用戶控制設(shè)備
請(qǐng)問故障在哪里?它是復(fù)合設(shè)備嗎?
看看配置描述符就知道是不是復(fù)合設(shè)備,但是根據(jù)設(shè)備管理器中的設(shè)備信息來看,應(yīng)該是一個(gè)復(fù)合設(shè)備,但只要描述符長(zhǎng)度小于64字節(jié)就可以用內(nèi)置固件模式, LCALL GET_DESCR ;獲取配置描述符 具體貼出來看看
;*******************************獲取設(shè)備描述符函數(shù) 入口參數(shù)C(1或2) GET_DESCR: LDB A,#CMD_GET_DESCR STB A,CH375_CMD_PORT NOP STB C,CH375_DAT_PORT; 寫入入口參數(shù)C JBc POR2,2,$ GET_DESCR2: LDB A,#CMD_GET_STATUS ;讀中斷狀態(tài)并獲取狀態(tài),請(qǐng)求數(shù)據(jù)讀出 STB A,CH375_CMD_PORT LDB C,CH375_DAT_PORT
CMPB C,#USB_INT_SUCCESS ;判斷是否操作成功 JNE GET_DESCR2 RET
請(qǐng)過目:此函數(shù)讀設(shè)備描述符就沒有問題
獲取完配置描述符之后,測(cè)試一下 CH375中斷引腳的電壓是高電平還是低電平?
好像一直是5V
http://m.findthetime.net/bbs/View.asp?T=1&S=101&I=19463 一樓有匯編的程序,參考一下,檢查流程是否正確。
就是375操作鼠標(biāo)的例程吧?照著改了一下,還是照舊