This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

采样程序在RAM中运行与在FLASH中运行不一致



如题所示,下面一段采样程序在FLASH与在RAM中运行不一致,由于是对电池电压采样,所以要求误差不能太大。在RAM中采用时读数为:2.14V,在FLASH中运行时为3.29V。不知道是什么原因:

float CellVoltageDetect(void)

 {  float SampleValue = 0;  

int32 Sum = 0,AveValue = 0;

 int i,n;

 _iq Temp;  for(i=0;i<8;i++){ /*-------------------------------- 软件触发,启动第一次ADCINA0转换 --------------------------------- */   

EALLOW;  

AdcRegs.ADCSOCFRC1.bit.SOC9 =1;  // 采用SOC9,SOC0同时触发ADCINA0,目的是丢弃第一个采样值,             // PiccoloB版有此BUG,A AdcRegs.ADCSOCFRC1.bit.SOC0 =1;  // 版该问题已经解决;     

EDIS;  

 for(n=1;n<=1000;n++);  //延时,等待转换结束。为什么延时:60MHz,一条指令是约为17ns,"28035—adc"datasheetP11          //Table 1.描述了常见的采样保护时间,所以此处需要延时1us以上。   

Sum = Sum + AdcResult.ADCRESULT0;  }  

AveValue  = ( Sum>>3 );  //求平均值  

Temp = _IQmpyI32(_IQ(K_Vcell),AveValue);  

 

SampleValue = _IQtoF(Temp-_IQ(0.014));  // -0.04v为蓄电池电压修正值,该数据是通过实验得出。  return SampleValue; }