#include <msp430g2553.h>
int nADC_Flag;
int nADC_Count=0;
unsigned int ADC_BUF[40];
unsigned int ADC_BUF_Temp[40];
void Init_CLK(void);
void Init_ADC(void);
void Init_
timer0_A(void);
void Init_CLK(void)
{
DCOCTL=0X00;
//将DCO校准到1Mhz
BCSCTL1=CALBC1_1MHZ;
DCOCTL=CALDCO_1MHZ;
//将SMCLK和MCLK的时钟源设为DCO
BCSCTL2=SELM_0+SELS;
}
void Init_ADC(void)
{
P1SEL |= BIT1; //设置P1.1为模拟输入通道
ADC10CTL0 &=~ENC;
ADC10CTL1 = CONSEQ_0; //转换模式为:单通道、单次转换 CONSEQ_0
ADC10CTL0 = SREF_1 + REFON + REF2_5V; //SREF_1+REFON +REF2_5V表示使用内部参考电压2.5v
ADC10CTL0=ADC10SHT_0+MSC;//MSC转换时由SHI上升沿触发
ADC10CTL1 = INCH_1+SHS_0+ADC10SSEL_0; // input A1
ADC10CTL0=ADC10ON;
ADC10AE0 |= 0x02; // PA.1ADC option select
ADC10CTL0 |=ADC10IE;
}
void Init_Timer0_A(void)
{
// 选择SMCLK,清除TAR
TACTL = TASSEL_1+TACLR;
// CCR0 中断允许
TACCTL0 =CCIE;
// 时间间隔为 500us
CCR0 = 500;
// 增记数模式
TA0CTL |= MC_1;
}
void main(void)
{
int i;
// 关闭看门狗
WDTCTL = WDTPW + WDTHOLD;
// 初始化
Init_CLK();
// 打开中断
_EINT();
Init_Timer0_A();
Init_ADC();
// 循环处理
for(;;)
{
if(nADC_Flag == 1)
{
nADC_Flag = 0;
for(i = 0;i <40;i++)
{
ADC_BUF_Temp[i] = ADC_BUF[i];
ADC_BUF_Temp[i] =2.5*ADC_BUF_Temp[i] /1023;
}
}
}
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TimerA_ISR(void)
{
// 开启转换
ADC10CTL0 |= ENC + ADC10SC;
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC_ISR(void)
{
ADC10CTL0 &=~ENC;
ADC_BUF[nADC_Count] = ADC10MEM;
// 计数器加1
nADC_Count += 1;
// 采集完40个点
if(nADC_Count ==40)
{
// 设置标志
nADC_Flag = 1;
// 计数器清0
nADC_Count = 0;
}
}
不是低功耗应该不会影响结果吧
这样吗,我试试看!!
一周热门 更多>