以下是我寫的通過CH372向PC發(fā)送AD轉(zhuǎn)換數(shù)據(jù)的程序。波形可以顯示出來了,但不平滑,原因主要是:發(fā)送64B數(shù)據(jù)后得花時間再采集64B數(shù)據(jù),然后才能再發(fā)送64B。若改為一次讀取AD轉(zhuǎn)換后的1KB數(shù)據(jù)再發(fā)送,當(dāng)發(fā)完這1K后,也還得面臨采集的時間問題。 如果能讓AD不斷的采集,準(zhǔn)備好數(shù)據(jù),當(dāng)USB發(fā)送成功后立即又能發(fā)下一個64B,那么波形就會平滑了。 (1) 因?yàn)椴挥肍IFO,想利用單片機(jī)的內(nè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ù) { //啟動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)問一下以下程序的執(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);”就會跳到“case 0x0A://USB_INT_EP2_IN,批量數(shù)據(jù)發(fā)送成功 ”中,是不是要執(zhí)行到“case 0x0A:”結(jié)束后才會回來執(zhí)行:“for(i=0;i<64;i++){}”?還是執(zhí)行完:“ WriteCH372Point2(UsbSendBuf_S,1);”就接著往下執(zhí)行:“for(i=0;i<64;i++){}”?
謝謝各位的耐心閱讀,希望能給出一些建議。