设置的是MCLK=1MHz下面是ADC12初始化,中断和转换代码,求大神指导
void Init_ADC(void)
{
P6SEL |= 0x01; // 使能P6.0为ADC通道
ADC12CTL0 = ADC12ON+SHT0_15+MSC; // 打开ADC,设置采样时间
ADC12CTL1 = SHP+CONSEQ_2; // 使用采样定时器,单输入所次转换
ADC12IE = 0x01; // 使能ADC中断
ADC12CTL0 |= ENC; // 使能转换
ADC12CTL0 |= ADC12SC; // 开始转换
}
////////////////////////////////////////////////////////////////////////////////
/////////////////////////初始化ADC12,P6.0作为模拟信号输入//////////////////////
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uchar index = 0;
results[index++] = ADC12MEM0; // Move results
if(index == 64)
{
uchar i;
H_result = 0;
for(i = 0; i < 64;i++)
{
H_result += results[i];
}
H_result >>= 6;//多次取平均
index = 0;
H2D(H_result);
}
}
////////////////////////////////////////////////////////////////////////////////
void H2D(uint H)
{
ShiDu=0;
ShiDu1=0;
ShiDu2=0;
unsigned long caltmp;
uint Volt;
caltmp = H;
/*由于设置的AVcc = 3.3V,DVss = 0V*/
caltmp = (caltmp << 5) + H; //caltmp = Hex_Val * 33
caltmp = (caltmp << 3) + (caltmp << 1); //caltmp = caltmp * 10
Volt = caltmp >> 12; //Curr_Volt = caltmp / 2^n
ShiDu = Volt*100/3;
ShiDu1 = ShiDu/100;
ShiDu2 = ShiDu%100;
}
|