?? 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 + -