DSP电压采集与串口发送

AD的采样频率为100HZ,去采样一个20HZ的正弦信号,一个周期内按说可以采集100个点,但是采集然后采集一个输出一个你就会发现一个周期内才采样了16个点,这是为什么呢?
我的串口也不慢了,波特率为256000,我的AD采集快,而我串口并不能及时发送,如何解决这个问题,请给出解决方案。发送程序如下所示, while(1)
{
while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

adc_vol=((AdcRegs.ADCRESULT0)>>4)*3.0/4095;
LED4_TOGGLE;
adc_temp=adc_vol*100000;
adcbuf[0]=adc_temp/100000+0x30;
adcbuf[1]='.';
adcbuf[2]=adc_temp%100000/10000+0x30;
adcbuf[3]=adc_temp%100000%10000/1000+0x30;
adcbuf[4]=adc_temp%100000%10000%1000/100+0x30;
adcbuf[5]=adc_temp%100000%10000%1000%100/10+0x30;
adcbuf[6]=adc_temp%100000%10000%1000%100%10+0x30;
adcbuf[7]='\0';
UARTa_SendString("\r\nVOLT=");
UARTa_SendString(adcbuf);
}
  1. 你把ADC采样频率算错了,16,20都是整数像是内置滤波或者时钟分频你算错了
  2. 计算过程过于繁琐耗时太长,提高优化级别,优化速度,或者手动优化,%运算太多了没必要
adcbuf[2]=dac_temp/10000%10+'0';
adcbuf[3]=adc_temp/1000%10+'0';
adcbuf[4]=adc_temp/100%10+'0';
adcbuf[5]=adc_temp/10%10+'0';
adcbuf[6]=adc_temp%10+'0';
  1. 串口速度不够快这个可能性很小