?? weigh.c
字號:
#include "weigh.h"
//10000記數 = 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;
//設置晶體的電容
FLL_CTL0 |= XCAP18PF;
//定時器的中斷為0.5s
BTCTL = BTDIV + BT_fCLK2_DIV64;
//定時器中斷使能
IE2 |= BTIE;
//P1口輸出為1
P1OUT = 0xff;
//P1口為輸出方向
P1DIR = 0xff;
//P1.0為輸入方向
P1DIR &= ~PUSH_BUTTON;
//下降沿觸發中斷
P1IES = PUSH_BUTTON;
//清除中斷標志
P1IFG = 0;
//使能P1.0中斷
P1IE = PUSH_BUTTON;
//P2口輸出為1
P2OUT = 0xff;
//P2口為輸出方向
P2DIR = 0xff;
//SD16設置
//增益為32,信道對為A0+,A0-
SD16INCTL0 = SD16GAIN_32 + SD16INCH_0;
//連續轉換方式
//SD16轉換中斷使能
SD16CCTL0 = SD16DF + SD16IE;
}
void StartNextConversion(void)
{
//結果清零
SD16Temp = 0;
SD16TempCtr = 0;
//對全橋傳感器供電
P2OUT |= BRIDGE_SUPPLY;
//允許電壓的設置時間,(46+4)x244us=12ms
VoltageSettleCtr = 46;
//開始轉換
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;
//讀轉換結果
SD16CCTL0 &= ~SD16LSBACC;
CurrentResult = (long)(int)SD16MEM0 << 2;
SD16CCTL0 |= SD16LSBACC;
CurrentResult |= ((int)SD16MEM0 & 0xc0) >> 6;
//等待電壓設置
if(VoltageSettleCtr)
{
//減數
VoltageSettleCtr--;
return;
}
//累加求和
SD16Temp += CurrentResult;
//是否采集了256次
if(++SD16TempCtr >= 256)
{
//設置轉換完成標志
ad_flag = 1;
//結果清零
SD16TempCtr = 0;
//累加結果除以256得到轉換結果的平均數
SD16Result = SD16Temp >> 8;
//禁止轉換
SD16CCTL0 &= ~SD16SC;
//停止對全橋傳感器供電
P2OUT &= ~(BRIDGE_SUPPLY);
//存儲新的轉換結果
LastADCValue = SD16Result;
//進入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)
{
//清除中斷標志位
P1IFG &= ~(BIT0);
}
//延遲一點時間
for (i = 0x7fff; i; i--);
__bic_SR_register_on_exit(SCG1 + SCG0);
}
void main(void)
{
long ad_value;
//關閉中斷
_DINT();
//初始化
Init_Sys();
//初始化變量
nStart = 0;
//打開中斷
_EINT();
//循環處理
for(;;)
{
//測量按紐按下
if(nStart == 1)
{
//清除標志
nStart = 0;
//開啟轉換
StartNextConversion();
//轉換完成
if(ad_flag == 1)
{
//清除標志
ad_flag = 0;
ad_value = LastADCValue;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -