这段程序在IAR上编译没错,只是我有些地方不明白,由于我不会把行号也复制下来,所以忘见谅了。
不明白的地方我用红色标出
#include "msp430g2553.h"
#define uint unsigned int
#define uchar unsigned char
uint Results[32]; //存放ADC的转换结果
uint Average=0;
uint ad_value=0;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR&=~BIT0;
ADC10AE0=BIT0; //把普通引脚功能关掉,使能ADC10AEx
P1DIR|=BIT6;
//P1OUT|=BIT6;
//P1SEL|=BIT1;
ADC10CTL0|=ADC10ON+MSC+ADC10SHT_3+ADC10IE;
ADC10CTL1|=CONSEQ_2+INCH_0;
ADC10CTL0|=ENC+ADC10SC; //至此没有初始化单通道多次转换次数呀~
_EINT();
while(1)
{
_BIS_SR(LPM0_bits + GIE);
}
}
#pragma vector=ADC10_VECTOR //单通道多次转换是采集转换保存了一个结果后产生中断还是????
__interrupt void ADC10IN(void)
{
static uchar index = 0;
Results[index++] = ADC10MEM; // Move results, IFG is cleared
if(index == 31)
{
uchar i;
Average = 0;
for(i = 0; i < 32; i++) //这里为什么是32?难道是单通道多次转换32次把ADC10MNM存满退出?ADC10MNM多少满?
Average += Results;
Average >>= 5; //除以32求平均值
Average=(Average*35)/1023;
if (Average>30) //给的电压过高,LED6亮
P1OUT|=BIT6;
else P1OUT&=~BIT6;
index = 0;
_BIC_SR_IRQ(LPM0_bits); // Clear LPM0
}
}
这段程序在IAR上编译没错,只是我有些地方不明白,由于我不会把行号也复制下来,所以忘见谅了。
不明白的地方我用红色标出