请教 单片机上传数据给CH375程序 是否正确?

单片机将8位数据传输给CH375 CH375等待PC机取走数据 如PC机取走数据 单片机继续执行上述过程 以下中断程序是否正确?8位数据时存储在 buffer[8]中么?

void mCh375Interrupt( ) interrupt 0 using 1 { unsigned char InterruptStatus; unsigned char i; unsigned char data buffer[ 8 ]; CH375_WR_CMD_PORT( CMD_WR_USB_DATA5 ); CH375_WR_DAT_PORT( 8 ); for ( i = 0; i < 8; i ++ ) CH375_WR_DAT_PORT( buffer[ 8 ] ); CH375_WR_CMD_PORT( CMD_GET_STATUS ); InterruptStatus = CH375_RD_DAT_PORT( ); switch ( InterruptStatus ) { case USB_INT_EP2_IN: { CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); CH375_WR_DAT_PORT( 8 ); for ( i = 0; i < 8; i ++ ) CH375_WR_DAT_PORT( buffer[ 8 ] ); break; } default: { CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); break; } } }

不正确,按照上传数据的的流程,应该是先把数据写进去,在去等中断,在未写数据的时候是没有中断的,请仔细看下我们的TEST.C的程序。


就是先上传 ,再中断, 中断程序中再执行上传数据的流程对么?TEST.C中是在中断中执行下传和上传数据的呀? 请教!!!!


TEST.C 只是一个演示程序,如果要上传数据,就先把数据写到CH372的上传缓冲区中去,等待上传成功中断之后,在上传后续数据。CH372的说明手册上面有上传下传流程。请仔细阅读


流程我看懂了,可是没有上传数据的程序例子,还有一些地方不太明白,能提供比较详细的例子么?


你好好看看说明书,对没一个命令的解释,TEST.C已经有上传的程序部分了。 CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向USB端点2的发送缓冲区写入数据块 */ CH375_WR_DAT_PORT( length ); /* 首先写入后续数据长度,回传刚接收到的数据长度 */ for ( i = 0; i < length; i ++ ) CH375_WR_DAT_PORT( ~ buffer[ i ] ); /* 数据取反后返回,由计算机应用程序测试数据是否正确 */


程序做如下修改,请问这次正确么 ?如果错误怎么修改

main( ) { unsigned char i, length; unsigned char data buffer[ 64 ] Delay50ms( );/* 延时等待CH375初始化完成,如果单片机由CH375提供复位信号则不必延时 */ CH375_Init( ); /* 初始化CH375 */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向USB端点2的发送缓冲区写入数据块 */ CH375_WR_DAT_PORT( 1); /* 首先写入后续数据长度 */ CH375_WR_DAT_PORT( AD ); /* AD为A/D转换器采集的8位数据*/ IT0 = 0; /* 置外部信号为低电平触发 */ IE0 = 0; /* 清中断标志 */ EX0 = 1; /* 允许CH375中断 */ EA = 1; /* 允许中断 */ while ( 1 ); /* 以下指令开始工作循环,等待PC机命令进行操作 */ }

/* CH375中断服务程序,使用寄存器组1 */ void mCh375Interrupt( ) interrupt 0 using 1 { unsigned char InterruptStatus; unsigned char i, length; unsigned char data buffer[ 64 ]; EA = 0; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 获取中断状态并取消中断请求 */ InterruptStatus = CH375_RD_DAT_PORT( ); /* 获取中断状态 */ USB_INT_EP2_IN: { /* 批量数据发送成功 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 释放当前USB缓冲区 */ EA=1; } } }


1、主程序中,在CH375_Init( )之后,向375写入数据之前,应增加一些延时(如1S,不同的PC,时间不同),保证375被PC成功枚举;建议是由PC先下传一包数据,单片机收到后再向PC发数据 2、中断程序中,如果有数据继续发送,那么USB_INT_EP2_IN中应再写入数据,再解锁


除了7楼所说的. 你的程序存在C语言语法错误。 EA = 1;最好放在外面,任何出中断都应该打开中断,而你的程序只有USB_INT_EP2_IN才重新开启中断,否则中断永远死掉


谢谢以上各位的指导!


请问版主,我把配套的示例程序(个人没有修改过)下载到STC90C50AD中,串口提示为 Start&nbsp375&nbspdemo&nbsp..n Set&nbspUSB &nbspmode

Error:&nbsp81

请问这是初始化时的错误吗?是不是硬件上的错误?我用的程序没有针对我的芯片进行修改,是不是就是出错的原因?我应该对程序进行那些修改呢?硬件I/O接口子程序又是应该怎样修改,放到什么位置呢?请指教,谢谢!


建议你自己的问题,你自己单发帖。这是公司的技术支持论坛,只要你提问就会得到及时答复。重复发帖会给我们技术人员需要每个帖子都查看,谢谢配合。


7楼所说的先让PC下载一段数据是 TEXT.C的例子吧。那样得应用到另一组寄存器吧??CH375_Init( ) 中不是已经对CH375进行上传 传数据的测试了么?为什么还要:建议是由PC先下传一包数据,单片机收到后再向PC发数据


1、“应用到另一组寄存器吧”,不明白是什么意思 2、如果数据能够下传,表示CH375已经被PC枚举成功了,这时上传数据才能成功


“应用到另一组寄存器吧” 枚举时 PC先下传一包数据,单片机收到后再向PC发数据 这个过程 得应用到另一组寄存器吗? 还是我直接修改我上传数据 应用的寄存器组?

枚举程序 我用CH372EVT\PUB\TEST\MCU中的TEST.C可以么?


1、由于使用的内置固件,枚举过程由CH375自行处理,单片机没有参与,PC先下传一包数据的目的就是告诉单片机已经枚举成功了,可以进行数据传输了 2、TEST.C实现了接收数据再回传的过程,收发过程都有了,可以参考


只有登录才能回复,可以选择微信账号登录