/*-------------------------------Include--------------------------------------*/
#include <msp430x16x.h>
#include "Extern.h"
#include "define.h"
//#include "math.h"
void adc_138A_choose(unsigned int channel);
void adc_138_voltage(unsigned int channel);
void adc_deal(void)
{
unsigned int i;
switch(adc_deal_status)
{
case 0:
adc_deal_time = system_time_a;
adc_deal_status = 5;
break;
case 5:
if((system_time_a - adc_deal_time)> _adctime)
{
adc_deal_time = system_time_a;
adc_deal_status = 10;
}
break;
case 10:
adc_138A_choose(times); //选通138通道,10个单只电池,6个电池总电压
adc_deal_status = 15;
break;
case 15:
ADC12CTL0 |= ADC12SC;
while((ADC12IFG & 0x1ff) != 0x1ff);//这两句程序耗时5us
for(int jj=0;jj<500;jj++); //增加一段延时
adc_138_voltage(times); //将电压值传到AD1,AD2
adc_voltage_add1[times] += adc_voltage[times];//电压和累加
adc_count++;
if(adc_count >= _ADC_COUNT)
{
adc_count=0;
adc_deal_status=20;//双路电压的总值记录完,进入到下一步
}
break;
case 20:
times++;
if(times == 16)
{
adc_deal_status = 30;
}
else
{
adc_deal_status = 10;
}
break;
case 30:
for(i=0;i<_BatNum;i++) //_BatNum电池总数量
{
runVoltage1[i]=(int)((float)(adc_voltage_add1[i])/(float)(_ADC_COUNT));//*(_MaxVoltage/3700);
} //求平均值
adc_deal_status = 35;
break;
case 35:
for(i=0;i<16;i++)
{
adc_voltage_add1[i] = 0; //清零
}
adc_deal_status = 0;
break;
default:
break;
}
}
void adc_138A_choose(unsigned int channel)
{
P2OUT |= BIT3;
if(channel < 10)
{
switch(channel)
{
case 0:
P2OUT &= ~BIT0;//电压采样 选通DCLOSE1 根据138真值表
P2OUT &= ~BIT1;
P2OUT &= ~BIT2;
break;
case 1:
P2OUT |= BIT0;// 选通DCLOSE2
P2OUT &= ~BIT1;
P2OUT &= ~BIT2;
break;
case 2:
P2OUT &= ~BIT0;// 选通DCLOSE3
P2OUT |= BIT1;
P2OUT &= ~BIT2;
break;
case 3:
P2OUT |= BIT0;// 选通DCLOSE4
P2OUT |= BIT1;
P2OUT &= ~BIT2;
break;
case 4:
P2OUT &= ~BIT0;// 选通DCLOSE5
P2OUT &= ~BIT1;
P2OUT |= BIT2;
break;
case 5:
P2OUT |= BIT0;// 选通DCLOSE6
P2OUT &= ~BIT1;
P2OUT |= BIT2;
break;
case 6:
P2OUT &= ~BIT0;// 选通DCLOSE7
P2OUT |= BIT1;
P2OUT |= BIT2;
break;
case 7:
P2OUT |= BIT0;// 选通DCLOSE8
P2OUT |= BIT1;
P2OUT |= BIT2;
break;
case 8:
P2OUT &= ~BIT4;//第二片128电压采样 选通DCLOSE9
P2OUT &= ~BIT5;
P2OUT &= ~BIT7;
break;
case 9:
P2OUT |= BIT4;// 选通DCLOSE10
P2OUT &= ~BIT5;
P2OUT &= ~BIT7;
break;
default:
break;
}
}
else if(channel < 16)
{
switch(channel)
{
case 10:
P2OUT &= ~BIT4;// 选通DCLOSE11
P2OUT |= BIT5;
P2OUT &= ~BIT7;
break;
case 11:
P2OUT |= BIT4;// 选通DCLOSE12
P2OUT |= BIT5;
P2OUT &= ~BIT7;
break;
case 12:
P2OUT &= ~BIT4;// 选通DCLOSE13
P2OUT &= ~BIT5;
P2OUT |= BIT7;
break;
case 13:
P2OUT |= BIT4;// 选通DCLOSE14
P2OUT &= ~BIT5;
P2OUT |= BIT7;
break;
case 14:
P2OUT &= ~BIT4;// 选通DCLOSE15
P2OUT |= BIT5;
P2OUT |= BIT7;
break;
case 15:
P2OUT |= BIT4;// 选通DCLOSE16
P2OUT |= BIT5;
P2OUT |= BIT7;
break;
default:
break;
}
}
else
{
times = 0;
}
}
void adc_138_voltage(unsigned int channel)
{
if(channel < 8)
{
adc_voltage[channel] = ADC12MEM1;
}
else
{
adc_voltage[channel] = ADC12MEM2;
}
}