CH376與Pc機通訊

向上位機傳送一個16384字節(jié)的數(shù)據(jù)包 但上位機接收是有點問題,丟數(shù)據(jù)。不如說接完64個0x01后,然后就接受0x30,中間丟了好多數(shù)據(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) { flag=1; CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ } }

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); } } }

下位機發(fā)送數(shù)據(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緩沖區(qū) */ 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); 至于你發(fā)送多少數(shù)據(jù)只需要在加一個變量,或者你發(fā)數(shù)據(jù)的時候才用指針的方式來送數(shù)據(jù)就可以。


不好用啊

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緩沖區(qū) */ }

}

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);才能接到數(shù) 為什么啊 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緩沖區(qū) */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); CH375_WR_DAT_PORT( 64); for ( i = 0; i < 64; i ++ ) CH375_WR_DAT_PORT(DATA);

} } 執(zhí)行這個 程序一直在中斷里循環(huán)么 謝謝


程序中有個問題:初始化完CH375,就開始上傳數(shù)據(jù)了,但這個時候PC還沒有枚舉好CH375,上傳的數(shù)據(jù)是無效的,有2種做法: 1、PC先下傳一包數(shù)據(jù),通知下位機上傳數(shù)據(jù) 2、初始化后延時一會再上傳,不同的PC,該延時不同,可以先設(shè)大一點,這個方法只可臨時測試用 另,while( 1 )必須要,否則程序會復位的


問題解決了 謝謝各位 還有個小問題 主程序里傳送64字節(jié)沒問題。中斷里傳63字節(jié)沒問題 可是傳64字節(jié)就失敗了 不知道什么原因


是上傳一次數(shù)據(jù)后,不能繼續(xù)上傳了? 1、上次一次成功后是怎么處理的 2、上位機有沒有繼續(xù)讀


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频