你们谁知道msp430F149用多通道采样时为什么两个通道的采集电压会互相影响呢?
void ADC12(void)
{
P6SEL |=0X03; //使能ADC通道
ADC12CTL0=ADC12ON+SHT0_15+MSC+REFON + REF2_5V;//打开ADC,设置采样时间,多次转换
ADC12CTL1=SHP+CONSEQ_3;//使用采样定时器;多通道转换
ADC12MCTL0 |=SREF_1+INCH_0;//通道选择
ADC12MCTL1 |=SREF_1+INCH_1+EOS; //以EOS结束此次转换
ADC12IE=0X03;//使能ADC中断
ADC12CTL0 |=ENC+ADC12SC;//使能转换;开始转换
_EINT();
}
/*ADC中断服务函数,各个通道转换值的存储*/
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
k++;
if(k==100) {k=0;}
caltmp[k]=ADC12MEM0;
caltmpp[k]=ADC12MEM1;
}
void xian_shi(void)
{
int i,j ;
ulong AVR0,AVR1;
ulong sum0=0,sum1=0;
for(i=0;i<100;i=i+2)
sum0 += caltmp[i];
AVR0 = sum0/50;
//sum0=0;
Temp=(AVR0*25000)/4096; //计算十进制的电压值
ptr[0]=(int)Temp/10000;
ptr[1]=(int)Temp%10000/1000;
ptr[3]=(int)Temp%1000/100;
ptr[4]=(int)Temp%100/10;
ptr[5]=(int)Temp%10/1;
ptr[6]=11;
ptr[2]=10;
LCD_write_com(0x88);
DisplayCgrom(0x88,"电压: ");
for(i=0;i<7;i++)
{
delay_ms(100);
LCD_write_data(shuzi[ptr[i]]);
}
for(j=1;j<100;j=j+2)
sum1 += caltmpp[j];
AVR1 = sum1/50;
Temp=(AVR1*25000.0)/4096.0;
ptr[0]=(int)Temp/10000;
ptr[1]=(int)Temp%10000/1000;
ptr[3]=(int)Temp%1000/100;
ptr[4]=(int)Temp%100/10;
ptr[5]=(int)Temp%10/1;
ptr[6]=11;
ptr[2]=10;
LCD_write_com(0x98);
DisplayCgrom(0x98,"电压: ");
for(j=0;j<7;j++)
{
delay_ms(10);
LCD_write_data(shuzi[ptr[j]]);
}
}
//***********************************************************************
// 主程序
//***********************************************************************
void main(void)
{
WDT_Init(); //看门狗设置
Clock_Init(); //系统时钟设置
Port_init(); //系统初始化,设置IO口属性
delay_ms(100); //延时100ms
LCD_init(); //液晶参数初始化设置
LCD_clear(); //清屏
ADC12(); //ADC初始化
delay_ms(100);
DisplayCgrom(0X80,"傻人 有 傻福");
DisplayCgrom(0x90,"神啊!救救我吧");
while(1)
{
delay_ms(10);
xian_shi();
}
}
此帖出自
小平头技术问答
一周热门 更多>