我用ch372通过单片机接受电脑上下传的字节,然后 再回传给电脑,再自己布的电路板上总是在下传5个字节,然后回传给电脑的时候,单片机死机,电脑找不到CH372外部端口;但是1,2,3,4,6个以上字节都可以正确回传.. 但是把同样单片机同样的程序放到在贵公司购买的CH372学习版上,却无论是几个字节,都可以正确回传,没有这个问题,我仔细对比了下电路图,在CH372部分都是一样,只是布板位置不同. 请问下这可能是我编的软件有问题还是布板有问题? 请速答复,谢谢
你自己的板子是用模拟I/O的方式读写数据,命令的吗?
你可能在发数据时,数据长度05被CH375当作收到了复位命令(0x05)而进行了复位。
我自己的扳子是用总线方式和ch372通讯的. 只有在回传5个字节时才会死机,收到5个字节不回传给电脑的情况下,不会出现找不到硬件的情况. ps:只有在自己的板子上才会出现这个情况,在ch372试验板上没有这个现象.
可以不可以将你的3个读写子程序发出来看下
CH375_UPLOAD: NOP JNB FLAY_YES,CH375_EXIT_ ;为了防止计算机程序没有读取数据而导致单片机一直在此等待,可以计算超时,参考CH375_UP_INT子程序 JB FLAG_SEND_WAIT,CH375_UPLOAD ;如果正在等待发送(前次发送尚未完成)则继续等待,超过正常应该取走数据的时间未取走数据则认定为超时,可以跳出等待 ; CLR EX0 ;为了防止中途被中断而乱了顺序,必须先禁止中断 MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_WR_USB_DATA7 MOVX @DPTR,A ;向USB端点2的发送缓冲区写入数据块 NOP ;如果时钟频率低于16MHz则无需该指令延时 DEC DPL ;数据口地址 MOV A,R7 MOVX @DPTR,A ;首先写入后续数据长度 MOV R0,#RECV_BUFFER CH375_UPLOAD_1: MOV A,@R0 INC R0 MOVX @DPTR,A ;发送数据 DJNZ R7,CH375_UPLOAD_1 ;继续发送数据直至结束 SETB FLAG_SEND_WAIT ;置等待发送标志 CLR FLAY_YES ; SETB EX0 ;允许中断 CH375_EXIT_: RET --------------------------------------------------- 这是发送程序,接收是中断接受,是CH372试验板自带的调试程序,没有变动,发送是主循环里检查到中断接受到数就跳到发送子程序回传的.
怎么一直没人来回答? 给贵公司技术支持打电话说要发邮件给他,结果邮件都发了3封,时间过了一个礼拜,怎么一点消息都不回?
我们这边并没有收到您发的邮件,请重新发一次好吗? tech@wch.cn
CH375_UPLOAD: NOP JNB FLAY_YES,CH375_EXIT_ ;为了防止计算机程序没有读取数据而导致单片机一直在此等待,可以计算超时,参考CH375_UP_INT子程序 JB FLAG_SEND_WAIT,CH375_UPLOAD ;如果正在等待发送(前次发送尚未完成)则继续等待,超过正常应该取走数据的时间未取走数据则认定为超时,可以跳出等待 ; CLR EX0 ;为了防止中途被中断而乱了顺序,必须先禁止中断 MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_WR_USB_DATA7 MOVX @DPTR,A ;向USB端点2的发送缓冲区写入数据块 NOP ;如果时钟频率低于16MHz则无需该指令延时 NOP NOP;加大延时试下看可以不可以? NOP DEC DPL ;数据口地址 MOV A,R7 MOVX @DPTR,A ;首先写入后续数据长度 MOV R0,#RECV_BUFFER CH375_UPLOAD_1: MOV A,@R0 INC R0 MOVX @DPTR,A ;发送数据 DJNZ R7,CH375_UPLOAD_1 ;继续发送数据直至结束 SETB FLAG_SEND_WAIT ;置等待发送标志 CLR FLAY_YES ; SETB EX0 ;允许中断 CH375_EXIT_: RET