📄 main.c
字号:
#include "adc.h"
int nStart;
int nADC_Count;
int nADC_Flag;
int ADC_BUF_Temp[32];
int ADC_BUF[32];
void main(void)
{
int i;
int pBuf[32];
int sum;
int nTemp;
float fVal;
// 关闭看门狗
WDTCTL = WDTPW + WDTHOLD;
// 关闭中断
_DINT();
//变量初始化
nADC_Count = 0;
nADC_Flag = 0;
nStart = 0;
fVal = 0;
//时钟初始化
Init_CLK();
//端口初始化
Init_Port();
//定时器A初始化
Init_TimerA();
//循环处理
for(;;)
{
//采集完成
if(nADC_Flag == 1)
{
//清除标志
nADC_Flag = 0;
//取出数据
for(i = 0;i < 32;i++)
{
pBuf[i] = ADC_BUF_Temp[i];
}
//取平均值,sum为测量的值
sum =0;
for(i = 0;i < 32;i++)
{
sum += pBuf[i];
}
sum >>= 5;
//判断增益是否合适,407对应0。3V
if(sum < 407)
{
nTemp = getGain();
nTemp *= 10;
setGain(nTemp);
}
else
{
//测量结束
nStart = 0;
sum *= 3;
fVal = (float)(sum) / 4096;
fVal *= 1000;
nTemp = getGain();
//电阻值
fVal /= nTemp;
//LED显示
P1OUT |= BIT3;
}
}
}
}
//////////////////////////////////////////////
// 定时器中断,完成 ADC 转换
#if __VER__ < 200
interrupt [TIMERA0_VECTOR] void TimerA_ISR(void)
#else
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA_ISR(void)
#endif
{
int i;
if(nStart == 1)
{
// 关闭转换
ADC12CTL0 &= ~ENC;
// 读出转换结果
ADC_BUF[nADC_Count] = ADC12MEM0;
nADC_Count += 1;
if(nADC_Count == 32)
{
//设置标志
nADC_Flag = 1;
nADC_Count = 0;
// 将数据倒向数据缓冲区
for(i = 0;i < 32;i++)
{
ADC_BUF_Temp[i] = ADC_BUF[i];
}
}
// 开启转换
ADC12CTL0 |= ENC + ADC12SC;
}
}
#if __VER__ < 200
interrupt [PORT1_VECTOR] void PORT_ISR(void)
#else
#pragma vector=PORT1_VECTOR
__interrupt void PORT_ISR(void)
#endif
{
Delay_us(100);
if(P1IFG & BIT2)
{
//设置初始增益为1
setGain(1);
//设置标志
nStart = 1;
// 清除中断标志位
P1IFG &= ~(BIT2);
Delay_us(100);
//LED不显示
P1OUT &= ~(BIT3);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -