为什么我进行在线调试的时候,在Register栏中查看MEM0,MEM1,MEM2,MEM3都是0000,这说明AD没有采样成功而且采样的值也没有写入MEMX寄存器吗?我该怎么解决,求告知,谢谢!!下面是我的程序:
#include<msp430.h>
#define Num_of_Results 32
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
ulong caltmp[4];
static uint results[Num_of_Results]; //保存ADC转换结果的数组
uint i;
/********************************************
函数名称:Init_ADC
功 能:初始化ADC
参 数:无
返回值 :无
********************************************/
void Init_ADC(void)
{
P6SEL |= 0x0f; // 使能ADC通道
ADC12CTL0 = ADC12ON+SHT0_15+MSC; // 打开ADC,设置采样时间
ADC12CTL1 = SHP+CONSEQ_3+CSTARTADD2; // 使用采样定时器,脉冲模式+单通道多次转换
ADC12MCTL0=INCH_0;
ADC12MCTL1=INCH_1;
ADC12MCTL2=INCH_2;
ADC12MCTL3=INCH_3+EOS; //以EOS结束此次转换
ADC12IE = 0x0f; // 使能ADC中断
//ADC12IV=ADC12IV_ADC12IFG3;
ADC12CTL0 |= ENC; // 使能转换
ADC12CTL0 |= ADC12SC; // 开始转换
// _BIS_SR(LPM0_bits + GIE);
for(i=0;i<50;i++)
_NOP();
_EINT();
//_BIS_SR(LPM0_bits + GIE);
}
函数名称:ADC12ISR
功 能:ADC中断服务函数,在这里用多次平均的
计算P6.0口的模拟电压数值
参 数:无
返回值 :无
********************************************/
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
//while((ADC12CTL1&0X01)==1);
caltmp[0]=ADC12MEM0;
caltmp[1]=ADC12MEM1;
caltmp[2]=ADC12MEM2;
caltmp[3]=ADC12MEM3;
}
/******************************************************************************************************************/
主程序
#include <msp430.h>
#include"AD_BAT.c"
#define uint unsigned int
#define uchar unsigned char
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器
uchar i,j;
do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?(判断晶振是否起振)
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
TACTL |= TASSEL_2 + ID_3; //计数时钟选择SMLK=8MHz,1/8分频后为1MHz
//_EINT();
Init_ADC();
for(j=0;j<100;j++)
_NOP();
return 0;
}