求助:如何能讓USB連續(xù)的發(fā)數(shù)據(jù)

以下是我寫的通過(guò)CH372向PC發(fā)送AD轉(zhuǎn)換數(shù)據(jù)的程序。波形可以顯示出來(lái)了,但不平滑,原因主要是:發(fā)送64B數(shù)據(jù)后得花時(shí)間再采集64B數(shù)據(jù),然后才能再發(fā)送64B。若改為一次讀取AD轉(zhuǎn)換后的1KB數(shù)據(jù)再發(fā)送,當(dāng)發(fā)完這1K后,也還得面臨采集的時(shí)間問(wèn)題。 如果能讓AD不斷的采集,準(zhǔn)備好數(shù)據(jù),當(dāng)USB發(fā)送成功后立即又能發(fā)下一個(gè)64B,那么波形就會(huì)平滑了。 (1) 因?yàn)椴挥肍IFO,想利用單片機(jī)的內(nèi)部存儲(chǔ)器來(lái)暫存數(shù)據(jù)。程序應(yīng)該怎樣改才能實(shí)現(xiàn)呢? case 0x0A://USB_INT_EP2_IN,批量數(shù)據(jù)發(fā)送成功 SendCommand372(ULK_USB); // 釋放當(dāng)前USB緩沖區(qū) for(i=0;i<64;i++)//每次讀取AD轉(zhuǎn)換的64B數(shù)據(jù) { //啟動(dòng)A/D12位轉(zhuǎn)換 PORTB&=~BIT(1); PORTB&=~BIT(2); //讀取A/D轉(zhuǎn)換數(shù)據(jù) while (PINB&(1< PORTB|=BIT(2); //進(jìn)行數(shù)據(jù)讀出 PORTB&=~BIT(1);//讀出高8位數(shù)據(jù) UsbSendBuf[i]=PINA;//存高8位數(shù)據(jù) PORTB|=BIT(1);//讀出低4位數(shù)據(jù) UsbSendBuf[++i]=PINA;//存低4位數(shù)據(jù) } WriteCH372Point2(UsbSendBuf, 64);//向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 break; (2)問(wèn)一下以下程序的執(zhí)行順序: if(send==1) { 。。。。 WriteCH372Point2(UsbSendBuf_S,1);//向USB端點(diǎn)2發(fā)送緩沖區(qū)寫入數(shù)據(jù) for(i=0;i<64;i++) {。。。} } 當(dāng)程序執(zhí)行完“WriteCH372Point2(UsbSendBuf_S,1);”就會(huì)跳到“case 0x0A://USB_INT_EP2_IN,批量數(shù)據(jù)發(fā)送成功 ”中,是不是要執(zhí)行到“case 0x0A:”結(jié)束后才會(huì)回來(lái)執(zhí)行:“for(i=0;i<64;i++){}”?還是執(zhí)行完:“ WriteCH372Point2(UsbSendBuf_S,1);”就接著往下執(zhí)行:“for(i=0;i<64;i++){}”?

謝謝各位的耐心閱讀,希望能給出一些建議。

你可以在你寫64字節(jié)的時(shí)候在開一個(gè)緩沖區(qū),把你需要采集的數(shù)據(jù)放到另外一個(gè)緩沖區(qū)里面去,這樣就不會(huì)出現(xiàn)你說(shuō)的丟數(shù)據(jù)的現(xiàn)象.


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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