?? weigh.c
字號(hào):
#include "weigh.h"
//10000記數(shù) = 10kg=10000g
#define CAL_MIN_MAX_SPAN 10000
#define BRIDGE_SUPPLY (BIT0 | BIT1)
#define PUSH_BUTTON BIT0
int nStart;
int ad_flag;
void Init_Sys(void)
{
//停止看門狗
WDTCTL = WDTPW + WDTHOLD;
//設(shè)置晶體的電容
FLL_CTL0 |= XCAP18PF;
//定時(shí)器的中斷為0.5s
BTCTL = BTDIV + BT_fCLK2_DIV64;
//定時(shí)器中斷使能
IE2 |= BTIE;
//P1口輸出為1
P1OUT = 0xff;
//P1口為輸出方向
P1DIR = 0xff;
//P1.0為輸入方向
P1DIR &= ~PUSH_BUTTON;
//下降沿觸發(fā)中斷
P1IES = PUSH_BUTTON;
//清除中斷標(biāo)志
P1IFG = 0;
//使能P1.0中斷
P1IE = PUSH_BUTTON;
//P2口輸出為1
P2OUT = 0xff;
//P2口為輸出方向
P2DIR = 0xff;
//SD16設(shè)置
//增益為32,信道對(duì)為A0+,A0-
SD16INCTL0 = SD16GAIN_32 + SD16INCH_0;
//連續(xù)轉(zhuǎn)換方式
//SD16轉(zhuǎn)換中斷使能
SD16CCTL0 = SD16DF + SD16IE;
}
void StartNextConversion(void)
{
//結(jié)果清零
SD16Temp = 0;
SD16TempCtr = 0;
//對(duì)全橋傳感器供電
P2OUT |= BRIDGE_SUPPLY;
//允許電壓的設(shè)置時(shí)間,(46+4)x244us=12ms
VoltageSettleCtr = 46;
//開始轉(zhuǎn)換
SD16CCTL0 |= SD16SC;
}
#if __VER__ < 200
interrupt [SD16_VECTOR] void SD16_ISR(void)
#else
#pragma vector=SD16_VECTOR
__interrupt void SD16_ISR(void)
#endif
{
long CurrentResult;
//讀轉(zhuǎn)換結(jié)果
SD16CCTL0 &= ~SD16LSBACC;
CurrentResult = (long)(int)SD16MEM0 << 2;
SD16CCTL0 |= SD16LSBACC;
CurrentResult |= ((int)SD16MEM0 & 0xc0) >> 6;
//等待電壓設(shè)置
if(VoltageSettleCtr)
{
//減數(shù)
VoltageSettleCtr--;
return;
}
//累加求和
SD16Temp += CurrentResult;
//是否采集了256次
if(++SD16TempCtr >= 256)
{
//設(shè)置轉(zhuǎn)換完成標(biāo)志
ad_flag = 1;
//結(jié)果清零
SD16TempCtr = 0;
//累加結(jié)果除以256得到轉(zhuǎn)換結(jié)果的平均數(shù)
SD16Result = SD16Temp >> 8;
//禁止轉(zhuǎn)換
SD16CCTL0 &= ~SD16SC;
//停止對(duì)全橋傳感器供電
P2OUT &= ~(BRIDGE_SUPPLY);
//存儲(chǔ)新的轉(zhuǎn)換結(jié)果
LastADCValue = SD16Result;
//進(jìn)入LPM3低功耗模式
__bis_SR_register_on_exit(LPM3_bits);
}
}
#if __VER__ < 200
interrupt [PORT1_VECTOR] void PORT1_ISR(void)
#else
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
#endif
{
volatile unsigned int i;
//是否有按鍵按下?
if(P1IFG & BIT0)
{
//清除中斷標(biāo)志位
P1IFG &= ~(BIT0);
}
//延遲一點(diǎn)時(shí)間
for (i = 0x7fff; i; i--);
__bic_SR_register_on_exit(SCG1 + SCG0);
}
void main(void)
{
long ad_value;
//關(guān)閉中斷
_DINT();
//初始化
Init_Sys();
//初始化變量
nStart = 0;
//打開中斷
_EINT();
//循環(huán)處理
for(;;)
{
//測量按紐按下
if(nStart == 1)
{
//清除標(biāo)志
nStart = 0;
//開啟轉(zhuǎn)換
StartNextConversion();
//轉(zhuǎn)換完成
if(ad_flag == 1)
{
//清除標(biāo)志
ad_flag = 0;
ad_value = LastADCValue;
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -