?? flux_pca.c
字號:
/***********************************************************************************
PCA流量計控制程序 Flux_PCA.C
MCU 型號: Philips P89C668
時鐘頻率: 11.0592 MHz 6Clock
接口方式: PCA CEX.1
開發環境: Keil C51 V7.06
開發日期: 2003.09.24
程序編寫: BaoFang
***********************************************************************************/
#include <REG668.H>
#include <Flux_PCA.H>
#include <Menu.H>
#include <Timer.H>
#include <CAT24WC16P.H>
#include <BitOp.H>
#include <G7000.H>
#include <General.H>
#include <CLOCK_DS1307.H>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//流量計脈沖到達延時 (為顯示流量脈沖使用)
#define FluxPulseComingDelay 10;
//流量計脈沖計數器,記錄所有捕捉到的脈沖,直至清零。
idata ulong ulFluxPulse;
//流量計脈沖計數器運行允許標志
bit bFluxPulseRunEnable;
//流量計流量結束標志
bit bFluxLimitOver;
//流量計正負流量統計標志
bit bIFFluxPositive;
//流量計脈沖/水流量單位換算比率 脈沖/頓水 --流量計倍率
xdata uint uiFluxPulsePerTonWater; //PP2-1的設定量
//流量計流速統計時間(PP2-2)(注意,不能為0!)
xdata uint uiFluxVelocityTime;
//流量計流速計時
xdata uchar uiFluxVelocityTimeS;
//流量計流量上限(P4)
xdata uint uiFluxLimit;
//負流量的比例(PP2-3)
xdata uchar ucFluxLimit_Negative;
//流量計剩余水量 整數(正負流量)
xdata long lFluxRemainInt;
//流量計剩余水量 小數
xdata uchar ucFluxRemainDec;
//流量計脈沖到達標志
xdata uchar ucFluxPulseComing;
//流量計復位掉電確認位,只使用一次!!!復位后自動允許
//0-曾掉電,現復位無須清零
//1-正常,需要清零!
bit bFluxResetEnable;
//上次的流量計脈沖
xdata ulong ulFluxPulseLast;
//單位時間內的脈沖數(流速)
xdata ulong ulFluxVelocity;
//(流速)整數
xdata ulong ulFluxVelocityInt;
//(流速)小數
xdata uchar ucFluxVelocityDec;
//CL(SPEEDMAX) 為記錄的最大流速
xdata ulong ulRECFluxVelocityMax;
//CL(TodaySPEEDMAX) 記錄的當天最大流速
//xdata ulong ulRECFluxVMax_Today;
//CL(TodaySPEEDMAXTIME) 記錄的當天最大流速發生的時間
//xdata uchar uc7_RECFluxVMaxDT_Today[7];
/*******************************************************************
流量計相關存儲數據讀入函數
函數原型: void fnRead_FluxPulseCounterData();
功能: 流量計相關存儲數據讀入函數
********************************************************************/
void fnRead_FluxPulseCounterData()
{
uchar uc2_temp1[2];
uchar uc8_temp[8];
//1. PP2-1 流量計倍率 uint uiFluxPulsePerTonWater;
//讀入相應地址的數據--雙字節
//讀入指定地址,雙字節大小的數據:
//CAT24WC64P (N<=8192)(地址:0-8191)
//CAT24WC16P (N<=2048)(地址:0-2047)
fnRead_Eeprom(Menu_AdvanceSet1_2_List[0].ucMenuIDAddress,
2,uc2_temp1);
uiFluxPulsePerTonWater = uc2_temp1[1];
uiFluxPulsePerTonWater = uiFluxPulsePerTonWater << 8;
uiFluxPulsePerTonWater += uc2_temp1[0];
//2. PP2-2 流量計流速統計時間 uint uiFluxVelocityTime;
//讀入相應地址的數據--雙字節
//讀入指定地址,雙字節大小的數據:
//CAT24WC64P (N<=8192)(地址:0-8191)
//CAT24WC16P (N<=2048)(地址:0-2047)
fnRead_Eeprom(Menu_AdvanceSet1_2_List[1].ucMenuIDAddress,
2,uc2_temp1);
uiFluxVelocityTime = uc2_temp1[1];
uiFluxVelocityTime = uiFluxVelocityTime << 8;
uiFluxVelocityTime += uc2_temp1[0];
//3. P4 流量計流量上限 uint uiFluxLimit;
//讀入相應地址的數據--雙字節
//讀入指定地址,雙字節大小的數據:
//CAT24WC64P (N<=8192)(地址:0-8191)
//CAT24WC16P (N<=2048)(地址:0-2047)
fnRead_Eeprom(Menu_NormSet1List[3].ucMenuIDAddress,
2,uc2_temp1);
uiFluxLimit = uc2_temp1[1];
uiFluxLimit = uiFluxLimit << 8;
uiFluxLimit += uc2_temp1[0];
//4. PP2-3 負流量的比例 uchar ucFluxLimit_ Negative;
//讀入相應地址的數據--單字節
//讀入指定地址,雙字節大小的數據:
//CAT24WC64P (N<=8192)(地址:0-8191)
//CAT24WC16P (N<=2048)(地址:0-2047)
fnRead_Eeprom(Menu_AdvanceSet1_2_List[2].ucMenuIDAddress,
1,uc2_temp1);
ucFluxLimit_Negative = uc2_temp1[0];
//5.讀最大流速
ulRECFluxVelocityMax = fnRead_SystemRecord3(1,uc8_temp);
//流量計的流速統計間隔不能為0!默認為5秒!
if(uiFluxVelocityTime == 0)
uiFluxVelocityTime = 5;
//此時,重新計時開始統計流速!
uiFluxVelocityTimeS = 0;
}
/*******************************************************************
流量計脈沖計數器硬件初始化函數
函數原型: void fnInit_FluxPulseCounter();
功能: 流量計脈沖計數器硬件初始化函數,停止運行。
********************************************************************/
void fnInit_FluxPulseCounter()
{
//uchar i;
//1. 計數器暫停
FluxPulseCounterDisable;
//2. 計數器清零
ulFluxPulse = 0;
ulFluxPulseLast = 0;
//所有流量計相關變量初始化。
bFluxLimitOver = 0; //默認值 流量未到達
bIFFluxPositive = 1; //默認值 正流量統計
ucFluxPulseComing = 0;
lFluxRemainInt = 0;
ucFluxRemainDec = 0;
//流速初始化
ulFluxVelocity = 0;
ulFluxVelocityInt = 0;
ucFluxVelocityDec = 0;
//讀入系統日期時鐘
//fnRead_SystemClock();
//(最大流速)當天日期讀入
//for(i=4;i++;i<7)
// uc7_RECFluxVMaxDT_Today[i] = uc8_SystemDateTime[i];
//時間清零
//for(i=1;i++;i<4)
// uc7_RECFluxVMaxDT_Today[i] = 0;
//當天最大流速清零
//ulRECFluxVMax_Today = 0;
//流量計相關存儲數據讀入
fnRead_FluxPulseCounterData();
//流量計復位允許
bFluxResetEnable = 1;
//3. PCA硬件初始化
CH=0;
CL=0;
CMOD = 0x80;
CCAPM1 = 0x11; //負跳變邊沿捕捉
EC=1;
EA=1;
//4. PCA計數器開啟
CCON = 0x40; //清除所有PCA中斷標志,并重新啟動PCA捕獲
}
/*******************************************************************
流量計脈沖計數器硬件中斷函數
函數原型: void fnINT_FluxPulseCounter_PCA()
功能: 流量計脈沖計數器硬件中斷函數
********************************************************************/
void fnINT_FluxPulseCounter_PCA() interrupt 6
{
CCON = 0x40; //清除所有PCA中斷標志,并重新啟動PCA捕獲
if (bFluxPulseRunEnable)
{
ulFluxPulse ++;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -