#include "msp430x14x.h"
#define uchar unsigned char
#define uint unsigned int
uint Results[32]; //存放ADC的转换结果
long A_verage; //存放32个数据之和
uint A_ve = 0; //存放32个数的平均值
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
P6DIR = BIT0;
P6SEL |= 0x01; // Ena××e A/D channel A0
ADC12CTL0 = ADC12ON + SHT0_15 + MSC; // Turn on ADC12, set sampling time
ADC12CTL1 = SHP + CONSEQ_2; // Use sampling timer, set mode
ADC12IE = 0x01; // Ena××e ADC12IFG.0
ADC12CTL0 |= ENC; // Ena××e conversions
ADC12CTL0 |= ADC12SC; // Start conversion
TBCTL = TBSSEL_1 + TBCLR + MC0;
TBCCTL1 = OUTMOD_7;
TBCCR0 = 500;
TBCCR1 = 250;
P4DIR = 0X02;
P4SEL = 0X02;
_EINT();
while(1);
}
/*******************************************
函数名称:ADC12ISR
功 能:ADC12的中断服务函数
参 数:无
返回值 :无
********************************************/
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uchar index = 0;
Results[index++] = ADC12MEM0; // Move results, IFG is cleared
if(index == 32)
{
uchar i;
A_verage = 0;
for(i = 0; i < 32; i++)
A_verage += Results[i];
A_verage >>= 5; //除以32求平均值
if(A_verage > A_ve)
{
if(TBCCR1 < 500) TBCCR1 = TBCCR1 + 10;
else TBCCR1 = 0;
}
else
{
if(TBCCR1 > 10) TBCCR1 = TBCCR1 - 10;
else TBCCR1 = 500;
}
A_ve = A_verage;
index = 0;
}
}
|