#include <msp430x16x.h>
#define Num_of_Results 8
uint ADC_BUF0[Num_of_Results];
uint ADC_BUF1[Num_of_Results];
uint sumI; //定义电流采样均值
uint sumV; //定义电压采样均值
//***************************主程序*****************************************
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
Init_CLK(); // 时钟初始化
Init_Port(); // 端口初始化
Init_ADC(); //采样初始化
_EINT(); // 开总中断
while(1)
{
if(sumI>600)
P4OUT=0x00;
else
{
P4OUT=0xFF;
}
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uchar index = 0;
static uchar index2 = 0;
ADC12CTL0 &= ~ENC; // 关闭转换
ADC_BUF0[index++] = ADC12MEM0; // 读出转换结果
ADC_BUF1[index2++] = ADC12MEM1;
if(index == Num_of_Results)
{
uchar i;
sumI=0;
sumV=0;
for(i=0;i < Num_of_Results;i++)
{
sumV += ADC_BUF0
;
sumI += ADC_BUF1;
}
sumV >>=3; // 求平均值
sumI >>=3;
index = 0;index2 = 0;
}
ADC12CTL0 |= ENC + ADC12SC; // 开启转换
}
//**********************采样初始化程序***************************************
void Init_ADC(void)
{
P6SEL |= 0x03; // 使能ADC通道
ADC12MCTL0 = INCH_0 + SREF_2; //设置参考电压分别为VeREF和AVCC,输入通道为A0
ADC12MCTL1 = INCH_1 + SREF_2 + EOS; //设置参考电压分别为VeREF和AVCC,输入通道为A1
ADC12CTL0 = ADC12ON+SHT0_2+MSC; // 打开ADC,设置采样时间
ADC12CTL1 = SHP+CONSEQ_1; // 使用采样定时器
ADC12IE = 0x01; // 使能ADC中断
ADC12CTL0 |= ENC; // 使能转换
ADC12CTL0 |= ADC12SC; // 开始转换
}
//**********************时钟初始化程序***************************************
void Init_CLK(void)
{
unsigned char i;
BCSCTL1 &= ~XT2OFF;
do
{
IFG1 &= ~OFIFG;
for(i = 0xff; i > 0; i--);
}
while ((IFG1 & OFIFG));
BCSCTL2 |= (SELM_2 + SELS);
return;
}
此帖出自小平头技术问答
一周热门 更多>