[!江湖急救!]mspf149片上adc12模块多通道重复转换设置问题
msp430f149 片上的ADC12模块设置多通道重复采样方式时设置的相关流程应当是如何的?我的adc12采不起来?急救!哪位指点指点我~!?
我把我设置的一部分初始化程序扔到这,哪位仁兄帮我看看:
文件:adc.c
#include <msp430x14x.h>
#define uchar unsigned char
#define uintunsigned int
uchar tempval; //定义全局变量 tempval 小车的状态参量
/************************************
函数名:adc_init()
功能:adc12初始化---基准电压:AVCC
采样模式:8通道连续重复采样
***********************************/
void adc_init(void)
{
P6OUT = 0xff;
P6SEL = 0xff; //Enable ADC module
ADC12CTL0 = ADC12ON+SHT0_2+MSC; // 打开ADC,设置采样保持时间
ADC12CTL1 = SHP+CONSEQ_3; // 使用采样定时器
ADC12MCTL0 = INCH_0; // ref+=AVcc, channel = A0
ADC12MCTL1 = INCH_1; // ref+=AVcc, channel = A1
ADC12MCTL2 = INCH_2; // ref+=AVcc, channel = A2
ADC12MCTL3 = INCH_3; // ref+=AVcc, channel = A3
ADC12MCTL4 = INCH_4; // ref+=AVcc, channel = A4
ADC12MCTL5 = INCH_5; // ref+=AVcc, channel = A5
ADC12MCTL6 = INCH_6; // ref+=AVcc, channel = A6
ADC12MCTL7 = INCH_7 + EOS; // ref+=AVcc, channel = A7, end seq.
ADC12IE = 0x80; // Enable ADC12IFG.3
ADC12CTL0 |= ENC; // Enable conversions
}
/***********************************
函数名:adc_cov();
功能:对八通道采样数据进行处理,当ADC12MENx >=2.5V/(Vref) * 2^12,
temp_val 置1,否则为0
************************************/
unsigned char adc_cov(void)
{
uchar temp_val;
uchar i;
i=0;
temp_val=0x00;
for(i=0;i<8;i++)
{
switch(i)
{
case 0: if(ADC12MEM0>0x7ff)
temp_val |= 0x01;
break;
case 1: if(ADC12MEM1>0x7ff)
temp_val |= 0x02;
break;
case 2:if(ADC12MEM3>0x7ff)
temp_val |= 0x04;
break;
case 3:if(ADC12MEM4>0x7ff)
temp_val |= 0x08;
break;
case 4:if(ADC12MEM5>0x7ff)
temp_val |= 0x10;
break;
case 5:if(ADC12MEM6>0x7ff)
temp_val |= 0x20;
break;
case 6:if(ADC12MEM6>0x7ff)
temp_val |= 0x40;
break;
case 7:if(ADC12MEM7>0x7ff)
temp_val |= 0x80;
break;
default :break;
}
}
return tempval;
}
主程序mail.c部分程序:
……………
……………
/************主函数***********************************************/
void main(void)
{
//uchar car_stat;
WDTCTL = WDTPW + WDTHOLD;
int_xt2_clk(); //XT2高速时钟启动(8MHz)
adc_init(); //adc12初始化
pwm_init(); //电机PWM初始化
pwm_rate(1.00,1.00); //pwm数率
car_front(); //小车前进
for(;;)
{
ADC12CTL0 |= ADC12SC; // Start conversion
_EINT(); // Enable interrupts
}
}
//中断服务子程序,随便测试一下,假如
//有传感器检测在黑线上,输出电压小于1.5V左右,电机则反转
#pragma vector=ADC_VECTOR
__interrupt void ADC12_ISR(void)
{
uchar car_stat;
car_stat=adc_cov();
if(car_stat!=0)
car_back(); //电机反转
_NOP();
}
………… 哪位好心人帮我看看
我估计是相关设置没搞好。
但是就是找不到原因!
感激涕零啊! 给点反应 同志们
我盯着屏幕有好几个小时了 似乎参考电压没打开!!!!REFON
试试吧
页:
[1]