📄 adc12.c
字号:
#include<MSP430x16x.h>
#include"adc12.h"
#include <math.h>
unsigned int ADC_BUF[100];
float ADC_BUF_SUM=0.0;
float Vin=0.0;
float averg=0.0;
float effect=0.0;
unsigned char count=0; //对均方根进行30次累加
unsigned int nADC_Count=0;
extern unsigned int ADC_BUF[100];
extern unsigned char nADC_Flag;
void Init_ADC(void)
{
P6SEL = 0X01; //设置P6.0为模拟输入通道
ADC12CTL0 &= ~ENC;
ADC12CTL0 = ADC12ON+SHT0_1+REF2_5V+REFON;
ADC12CTL1 = SHP+SHS_1+CONSEQ_2;
ADC12MCTL0 = INCH_0+SREF_1;
ADC12IE = 0x0001; // Enable ADC12IFG.0
ADC12CTL0 |= ENC; //使能ADC转换
}
void Init_TimerA(void)
{
TACTL = TASSEL_2 + TACLR+MC_1; // 选择SMCLK,清除TAR,增记数模式
// TACTL += ID1;
// TACTL += ID0;
TACCTL0 &=~CCIE; // CCR0 中断不允许
TACCTL1 = OUTMOD_3; // Set/reset
TACCR0 = 80-1; // Init TACCR0 w/ sample prd=CCR0+1
TACCR1 = 10;
return;
}
void Init_CLK(void)
{
unsigned int i;
BCSCTL1 &= ~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; //清除振荡器失效标志
for (i = 0xff; i > 0; i--); //清除振荡器失效标志
}
while ((IFG1 & OFIFG)!=0);
BCSCTL2 = SELM_2+SELS; //MCLK,SMCLK的时钟源为TX2CLK
}
#pragma vector=ADC_VECTOR
__interrupt void Adc()
{
unsigned char i;
ADC_BUF[nADC_Count] =ADC12MEM0; // 读出转换结果
nADC_Count += 1; // 计数器加1
if(nADC_Count == 100) // 采集完100个点
{
ADC12CTL0 &= ~ENC; // 关闭转换
nADC_Count = 0; // 计数器清0
for(i = 0;i < 100;i++)
{
Vin=ADC_BUF[i]*2.5/4095.0;
Vin=pow(Vin,2);
ADC_BUF_SUM += Vin;
}
averg =sqrt(ADC_BUF_SUM/100.0);
effect +=averg;
ADC_BUF_SUM=0.0;
count++;
ADC12CTL0 |= ENC; //再次启动转换
if(count==30)
{
ADC12CTL0 &=~ENC; //关闭转换
effect=effect/30.0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -