CH376与Pc机通讯

向上位机传送一个16384字节的数据包 但上位机接收是有点问题,丢数据。不如说接完64个0x01后,然后就接受0x30,中间丢了好多数据 帮忙看看下位机程序有问题么?谢谢 下位机程序为 void mCh375Interrupt( ) interrupt 2 using 1 { unsigned char InterruptStatus; CH375_WR_CMD_PORT( CMD_GET_STATUS ); InterruptStatus = CH375_RD_DAT_PORT( ); if(InterruptStatus==USB_INT_EP2_IN) { flag=1; CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 释放当前USB缓冲区 */ } }

main( ) { unsigned char length,i,j; unsigned char DATA [64]; flag=1; length=64; for(i=0;i<64;i++) { DATA [i]=0; } Delay50ms( ); /* 延时等待CH375初始化完成,如果单片机由CH375提供复位信号则不必延时 */ CH375_Init( ); /* 初始化CH375 */ EA = 1; /* 允许中断 */ if(flag==1) { for(j=0;j>=255;j++) { flag=0; CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); CH375_WR_DAT_PORT( length ); for ( i = 0; i < length; i ++ ) CH375_WR_DAT_PORT(DATA[i]+j); } } }

下位机发送数据有问题,下位机程序应该这样写:

void mCh375Interrupt( ) interrupt 2 using 1 { unsigned char InterruptStatus; CH375_WR_CMD_PORT( CMD_GET_STATUS ); InterruptStatus = CH375_RD_DAT_PORT( ); if(InterruptStatus==USB_INT_EP2_IN) {

CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 释放当前USB缓冲区 */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); CH375_WR_DAT_PORT( 64); for ( i = 0; i < 64; i ++ ) CH375_WR_DAT_PORT(DATA);

} }

main( ) { unsigned char length,i,j; unsigned char DATA [64]; flag=1; length=64; for(i=0;i<64;i++) { DATA =0; } Delay50ms( ); /* 延时等待CH375初始化完成,如果单片机由CH375提供复位信号则不必延时 */ CH375_Init( ); /* 初始化CH375 */ EA = 1; /* 允许中断 */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); CH375_WR_DAT_PORT( 64); for ( i = 0; i < 64; i ++ ) CH375_WR_DAT_PORT(DATA); } while(1); 至于你发送多少数据只需要在加一个变量,或者你发数据的时候才用指针的方式来送数据就可以。


不好用啊

void mCh375Interrupt( ) interrupt 2 { unsigned char InterruptStatus,i; CH375_WR_CMD_PORT( CMD_GET_STATUS ); InterruptStatus = CH375_RD_DAT_PORT( ); if(InterruptStatus==USB_INT_EP2_IN) { CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 释放当前USB缓冲区 */ }

}

main( ) { unsigned char i; Delay50ms( ); /* 延时等待CH375初始化完成,如果单片机由CH375提供复位信号则不必延时 */ CH375_Init( ); /* 初始化CH375 */ EA = 1; /* 允许中断 */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); CH375_WR_DAT_PORT( length ); for ( i = 0; i < length; i ++ ) CH375_WR_DAT_PORT( i ); while(1); }

这样都不好用 去掉while(1);才能接到数 为什么啊 void mCh375Interrupt( ) interrupt 2 using 1 { unsigned char InterruptStatus; CH375_WR_CMD_PORT( CMD_GET_STATUS ); InterruptStatus = CH375_RD_DAT_PORT( ); if(InterruptStatus==USB_INT_EP2_IN) {

CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 释放当前USB缓冲区 */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); CH375_WR_DAT_PORT( 64); for ( i = 0; i < 64; i ++ ) CH375_WR_DAT_PORT(DATA);

} } 执行这个 程序一直在中断里循环么 谢谢


程序中有个问题:初始化完CH375,就开始上传数据了,但这个时候PC还没有枚举好CH375,上传的数据是无效的,有2种做法: 1、PC先下传一包数据,通知下位机上传数据 2、初始化后延时一会再上传,不同的PC,该延时不同,可以先设大一点,这个方法只可临时测试用 另,while( 1 )必须要,否则程序会复位的


问题解决了 谢谢各位 还有个小问题 主程序里传送64字节没问题。中断里传63字节没问题 可是传64字节就失败了 不知道什么原因


是上传一次数据后,不能继续上传了? 1、上次一次成功后是怎么处理的 2、上位机有没有继续读


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