我用的C196,CH375B,想枚举打印机。参照下载的51 C程序改成汇编的。 前面读出配置符都对。根据配置设置打印机返回14H。 到了查询端口状态时(GET_PORT_STASTUS函数)确出错: 根据我在执行中间一个issue_token(DATA阶段,准备接收DATA1)之前的延时长短不同(其余issue_token延时与否无影响,程序别的地方未延时),从短到长分别返回端口状态是14H,01H,18H,无论有纸无纸。 到底是什么问题? 是不是因为196比51快,还需要在哪里延时? 帮帮忙,急需搞定打印机啊[Emot]20[/Emot]已经停滞办个多月了
这是程序 ;**************************************;查询打印机端口函数返回值c GET_PORT_STATUS: ;只支持单向接口 LDB C,#0 LCALL TOGGLE_SEND ;主机发送同步控制函数 ;SETUP阶段为DATA0
LD COUNT,#AR_DATA ;SETUP数据,GET_PORT_STATUS LDB A,#0A1H STB A,[COUNT]+ LDB A,#1 STB A,[COUNT]+ LDB A,#0 STB A,[COUNT]+ STB A,[COUNT]+ STB A,[COUNT]+ STB A,[COUNT]+ LDB A,#1 STB A,[COUNT]+ LDB A,#0 STB A,[COUNT] ; LDB C,#8 ;C是长度 SETUP 数据,共8字节 LD W5,#AR_data LCALL WR_USB_DATA ;写数据块函数 SETUP 数据,共8字节
LDB C,#0 SHLB C,#4 LDB C,#DEF_USB_PID_setup
LCALL ISSUE_TOKEN
; LCALL DIS_ZERO_16H ;事务处理函数 LDB C,#1 LCALL TOGGLE_RECV ;主机接收同步控制函数 DAT阶段准备接受ADATA1 LDB C,#0 SHLB C,#4 ORB C,#DEF_USB_PID_IN lcall delay50ms LCALL ISSUE_TOKEN ;事务处理函数 ;DATA阶段操作成功 LD W5,#AR_data LCALL RD_USB_DATA ;读数据块函数 读出接受到的数据,通常只有1字节 LDB C,#1 LCALL TOGGLE_SEND ;主机发送同步控制函数 ;STATUS阶段为DATA1 LDB C,#0 ;C是长度 发送0长度的数据说明控制传输成功 LD W5,#AR_data LCALL WR_USB_DATA ;写数据块函数 发送0长度的数据说明控制传输成功
LDB C,#0 SHLB C,#4 ORB C,#DEF_USB_PID_OUT LCALL ISSUE_TOKEN ;事务处理函数 LD COUNT,#AR_DATA LDB C,[COUNT]+ ;返回值 PORTEND: RET
这个问题不是前面和你解释过了吗?你怎么还问这个问题呢?? 至于你说的不能打印的话,这个你需要问下打印机厂商,问下他们提供不提供这方面的技术支持。
问题是我试用了5种不同型号的打印机,都卡在这一步。难道都是打印机本身的特性吗?另外,各位枚举成功,能正确及时返回端口状态的打印机型号到底有哪些?
难道无人能回答吗?
你自己去看下这个帖子,看下这个上面给你的回复: /bbs/View.asp?S=101&I=37258 至于你说的不能正确回复状态,那么你可以自己去看下USB_PRINTF打印协议,我们是按照USB打印协议来进行操作的,如果都是这个状态,那么你去咨询下打印机厂商。