如题:我用的80C196KB单片机,375B操作键盘。用的下载例程,获取配置描述户总是不成功 只能返回14h,和以前操作打印机遇到的问题一模一样。是需要演延时,还是什么原因? 我浏览论坛上相关帖子,说有些键盘是所谓的复合设备,怎么知道的? 可否也发个例程给我? SLJ8816@163.COM 谢谢解答
14H应该是一个中断状态,发送完获取描述符命令之后,有没有等待中断状态产生,如果有 那么先获取中断状态,然后在读数据。
复合设备可以根据描述符判定,或者插在电脑上看看出现几个设备。很容易判断。 这个现象应该主要是你程序有问题,你把代码贴出来看看。
返回14H的中断状态应该为正确的中断状态,你需要去跟踪下你的程序,到底在哪个步骤返回了这个状态,还有一个需要注意的就是在设置地址之后需要加2MS的延时,这个延时可以大于2MS,但是不能小于1MS。
;*******************************;设置USB地址函数 入口参数C 地址值1——127 SET_ADDR: LDB A,#CMD_SET_ADDRESS ;设定USB设备端的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 ;读中断状态并获取状态 STB A,CH375_CMD_PORT LDB Aal,CH375_DAT_PORT
CMPB Aal,#USB_INT_SUCCESS ;判断是否操作成功 JNE SET_ADDR2 LDB A,#CMD_SET_USB_ADDR ;同步设定USB主机端的USB地址 STB A,CH375_CMD_PORT ; NOP ; LDB A,#06H STB C,CH375_DAT_PORT; RET
USB_PRINT: RET A,#CMD_SET_USB_MODE ;设定工作模式6 STB A,CH375_CMD_PORT NOP LDB A,#06H STB A,CH375_DAT_PORT; LDB A,#0bh ;设定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 ;读中断状态并获取状态,请求数据读出 STB A,CH375_CMD_PORT ;/* 等待连接 */ LDB C,CH375_DAT_PORT CMPB C,#USB_INT_CONNECT ;判断是否连接上 JNE USB_PRINT1 LDB C,#01H LCALL GET_DESCR ;获取设备描述符
LD W5,#AR_DATA ;读取设备描述符 LCALL RD_USB_DATA //读出的设备描述符是12 01 10 01 00 00 00 08 81 0A 01 01 10 01 01 02 00 01 LDB C,#05H LCALL SET_ADDR ;设置USB地址函数 LCALL DELAY50MS ;新加的延时50MS
LDB C,#02H LCALL GET_DESCR ;获取配置描述符 LD W5,#AR_DATA LCALL RD_USB_DATA ;读配置描述符 ;不管加不加延时,读取的都是14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
插在电脑上出现目录:人体学输入设备 下面四个子目录: HID-compliant device USB 人体学输入设备 USB 人体学输入设备 符合 HID 标准的用户控制设备
请问故障在哪里?它是复合设备吗?
看看配置描述符就知道是不是复合设备,但是根据设备管理器中的设备信息来看,应该是一个复合设备,但只要描述符长度小于64字节就可以用内置固件模式, LCALL GET_DESCR ;获取配置描述符 具体贴出来看看
;*******************************获取设备描述符函数 入口参数C(1或2) GET_DESCR: LDB A,#CMD_GET_DESCR STB A,CH375_CMD_PORT NOP STB C,CH375_DAT_PORT; 写入入口参数C JBc POR2,2,$ GET_DESCR2: LDB A,#CMD_GET_STATUS ;读中断状态并获取状态,请求数据读出 STB A,CH375_CMD_PORT LDB C,CH375_DAT_PORT
CMPB C,#USB_INT_SUCCESS ;判断是否操作成功 JNE GET_DESCR2 RET
请过目:此函数读设备描述符就没有问题
获取完配置描述符之后,测试一下 CH375中断引脚的电压是高电平还是低电平?
好像一直是5V
http://www.wch.cn/bbs/View.asp?T=1&S=101&I=19463 一楼有汇编的程序,参考一下,检查流程是否正确。
就是375操作鼠标的例程吧?照着改了一下,还是照旧