亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? power.c

?? 本代碼以AVR單片機(jī)為主控制器
?? C
字號:
/************************************ (C) 2005  485表項(xiàng)目 *****************************************

   項(xiàng)     目: 485表項(xiàng)目
   編譯環(huán)境 : IARAVR 編譯器 4.10A

   模塊名稱 : Power.c
   版    本 : V 1.0

   建立時(shí)間 : 2008-5-3 21:49

   修改時(shí)間 : 2008-5-3 23:00

   作    者 : 郝瑜云

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

   功能描述 : 電能處理子程序



-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

   修改 :   1.2005-11-5 :查出PowerOnReadPower讀入PulseCouterBUG

******************************************************************************/
#include    "Include.h"


/*
***************************************************************************************************
    函數(shù) : void PowerAddProg(void)

    功能 : 電能寄存器累加子程序


    注釋: 根據(jù)費(fèi)率號,有功累加標(biāo)志,進(jìn)行電能量累加運(yùn)算,并置位寫EEPROM 標(biāo)志

    注意: 按照脈沖常數(shù)_PULSE_CONST來計(jì)算電能量
***************************************************************************************************
1.電量增加BUG分析
    1)程序返回堆棧不夠用,導(dǎo)致程序的復(fù)位或部分功能缺失.
    2)硬件復(fù)位口的虛焊連焊
    3)手動復(fù)位.
    4)小數(shù)位累加過程中的錯(cuò)誤


*/
void PowerAddProg(void)
{
  //-------------------------------------------------------------------------
  // 掉電寫電量 
  if(PowerVar.SavePow == 0xAA)
    {
        PowerVar.SavePow = 0;
        if(PowerVar.PowerChange==0xAA)
        {
            PowerVar.PowerChange  = 0;                              // 清除電能變化標(biāo)志
            EEPVar.WriteProtectAA = 0xAA;                           // 打開寫保護(hù)
            CopyRamToEEP(ADDRESS_INDEXE,&PowerVar.PowerEEPIndex,1); // 寫入電能保存序號
            CopyRamToEEP(ADDRESS_ZEROE ,&PowerVar.PowerZero,    1); // 寫入小數(shù)位電量
            CopyRamToEEP(ADDRESS_PULSEE,&PowerVar.PulseCouter,  1); // 寫入脈沖數(shù)
            EEPVar.WriteProtectAA = 0x55;                           // 寫保護(hù)
        }
     SETBIT(ACSR,ACIE);
    }  
  if(PowerVar.ActAdd==0xAA)                     // 電能滿0.01累加輸入有功電能
    {
        _CLI();                                 // 全局中斷禁止
        PowerVar.ActAdd = 0;                    // 清除累加標(biāo)志位
        if(++PowerVar.PowerZero>=100)           // 累加電能小數(shù)位
        {
            PowerVar.PowerZero -= 100;
            BuildPower();
            HEX100Add(PowerVar.ActInPow+1,3);   // 累加正向有功電能
            EEPVar.WriteProtectAA = 0xAA;       // 打開寫保護(hù)
            SavePower();                        // 寫電量
        }
        _SEI();                                 // 全局中斷允許
        SETBIT(TimeBits,EnDisplay);             // 允許顯示刷新 測試
    }
    //-------------------------------------------------------------------------
    
   
    //-------------------------------------------------------------------------
}
/*
***************************************************************************************************
    函數(shù) : void BuildPower(void)

    功能 : 組合電能小數(shù)位和整數(shù)位函數(shù),用于通訊和顯示調(diào)用

***************************************************************************************************
*/
void BuildPower(void)
{
    INT8U   indextmp;

    if(PowerVar.PowerEEPIndex >= _POWER_BLOCK_MAX)                  // 判斷INDEX是否在有效區(qū)域
    {
        PowerOnReadPower();                                         // INDEX無效(亂)重執(zhí)行上電讀電量
    }
    CopyEEPToRam((ADDRESS_9010E+(PowerVar.PowerEEPIndex*5)+4),&indextmp,1);
    if(indextmp != PowerVar.PowerEEPIndex)                          // 判斷上一份電量INDEX是否有效
    {
        LocateMaxPowerIndex();                                      // 判斷最大值電量和INDEX
    }
    LoadPower();
    PowerVar.ActInPow[0] = PowerVar.PowerZero;                      // 合并電能小數(shù)位
}
/*
***************************************************************************************************
    函數(shù) : void SavePower(void)

    功能 : 保存電能等參數(shù)函數(shù)
***************************************************************************************************
*/
void SavePower(void)
{
    INT8U   lasttmp,i;

    lasttmp = PowerVar.PowerEEPIndex;
    if(++PowerVar.PowerEEPIndex>=_POWER_BLOCK_MAX)                  // 指向下一個(gè)存儲單元
    {
        PowerVar.PowerEEPIndex = 0;
    }
    PowerVar.ActInPow[4] = PowerVar.PowerEEPIndex;                  // 記錄INDEX
    PowerVar.ActInPow[0] = DataAddCS(PowerVar.ActInPow+1,3)+0x33;   // 計(jì)算電量校驗(yàn)和
    CopyRamToEEP((ADDRESS_9010E+(PowerVar.PowerEEPIndex*5)),PowerVar.ActInPow,5);    // 寫入帶校驗(yàn)電量
    i = 0xAA;                                                       // 擦除上當(dāng)前電量INDEX
    CopyRamToEEP((ADDRESS_9010E+(lasttmp*5)+4),&i,1);
}
/*
***************************************************************************************************
    函數(shù) : void PowerOnReadPower(void)

    功能 : 第一次上電讀取電能等參數(shù)函數(shù)
***************************************************************************************************
2006-3-26 10:37: 讀入小數(shù)位電量時(shí)增加判斷上電復(fù)位標(biāo)志

*/
void PowerOnReadPower(void)
{
    INT8U   i,indextmp;

    CopyEEPToRam(ADDRESS_INDEXE,&PowerVar.PowerEEPIndex,1);     // 讀出掉電電能保存序號
    if(PowerVar.PowerEEPIndex>=_POWER_BLOCK_MAX)                // 檢測序號有效性
    {
        goto PowerEEPIndexErr;
    }
    else
    {
        CopyEEPToRam((ADDRESS_9010E+(PowerVar.PowerEEPIndex*5)+4),&indextmp,1); // 假設(shè)掉電INDEX是有效數(shù)字,讀出電量區(qū)INDEX
        if(indextmp != PowerVar.PowerEEPIndex)                  // 兩個(gè)INDEX不等,去INDEX錯(cuò)誤處理
        {
            goto PowerEEPIndexErr;
        }
        else
        {
            goto LOAD_POWER;    // INDEX有效,加載電量
        }
    }
    PowerEEPIndexErr:           // INDEX錯(cuò)誤處理,在電量區(qū)找正確的INDEX
    for(i=0;i<_POWER_BLOCK_MAX;i++)
    {
        CopyEEPToRam((ADDRESS_9010E + (i*5) + 4),&PowerVar.PowerEEPIndex,1);
        if(PowerVar.PowerEEPIndex == i)
        {
            goto LOAD_POWER;
        }
    }
    LocateMaxPowerIndex();      // 若找不到正確的INDEX,則查找最大值電量的INDEX
    //-------------------------------------------------------------------------
    LOAD_POWER:
    LoadPower();
   // if(CHKBIT(MCUSR,PORF))     // 檢測上電復(fù)位標(biāo)志
   // {
   //     CLRBIT(MCUSR,PORF);
        CopyEEPToRam(ADDRESS_ZEROE, &PowerVar.PowerZero,1);     // 讀入小數(shù)位電量
   // }
    CopyEEPToRam(ADDRESS_PULSEE,&PowerVar.PulseCouter,1);       // 讀入脈沖數(shù)
}
/*
***************************************************************************************************
    函數(shù) : void LocateMaxPowerIndex(void)

    功能 : 定位最大值電量的INDEX
***************************************************************************************************
*/
void LocateMaxPowerIndex(void)
{
    INT8U   indextmp;
    INT32U  newlong,lastlong;


    newlong  = 0;
    lastlong = 0;

    for(indextmp=0;indextmp<_POWER_BLOCK_MAX;indextmp++)        // 定位最大值電量INDEX
    {
        CopyEEPToRam((ADDRESS_9010E+(indextmp*5)+1),(INT8U *)&newlong,3);
        if(newlong >= lastlong)
        {
            PowerVar.PowerEEPIndex = indextmp;
            lastlong = newlong;
        }
    }
}
/*
***************************************************************************************************
    函數(shù) : void LoadPower(void)

    功能 : 根據(jù)INDEX加載校驗(yàn)和正確的電量,若校驗(yàn)都錯(cuò)則取第1份電量

***************************************************************************************************
*/
void LoadPower(void)
{
    INT8U i;

    for(i=0;i<_POWER_BLOCK_MAX;i++)
    {
        CopyEEPToRam((ADDRESS_9010E+(PowerVar.PowerEEPIndex*5)),PowerVar.ActInPow,5);
        if(PowerVar.ActInPow[0] == (INT8U)(DataAddCS(PowerVar.ActInPow+1,3)+0x33)) // 根據(jù)校驗(yàn)和檢測數(shù)據(jù)有效性
        {
            return;
        }
        else
        {
            if(PowerVar.PowerEEPIndex==0)
            {
                PowerVar.PowerEEPIndex = _POWER_BLOCK_MAX-1;
            }
            else
            {
                PowerVar.PowerEEPIndex--;
            }
        }
    }
    CopyEEPToRam(ADDRESS_9010E,PowerVar.ActInPow,4);        // 若所有電量無效則讀入第一個(gè)存儲單元
    PowerVar.PowerEEPIndex = 0;
}
/*
***************************************************************************************************
    函數(shù) : void ReadPulseConst(void)

    功能 : 讀取并校驗(yàn)脈沖常數(shù)函數(shù)
***************************************************************************************************
*/
/*
void ReadPulseConst(void)
{
    INT8U   consttmp;
    CopyEEPToRam(ADDRESS_C030E+1,&consttmp,1);              // 讀入脈沖常數(shù)
    if(consttmp== 0)                                        // 如果常數(shù)為0,默認(rèn)為3200
    {
        PowerVar.PulseConst = 32;

    }
    else
    {
        BCDToHEX8(&consttmp,1);
        if(PowerVar.PulseConst!=consttmp)
        {
            PowerVar.PulseConst = consttmp;
        }
    }
}
*/
/*
***************************************************************************************************
    函數(shù) : void ReadDispConst(void)

    功能 : 讀取顯示條目函數(shù)
***************************************************************************************************
*/
void ReadDispConst(void)
{
  INT8U   consttmp[2];
  CopyEEPToRam(ADDRESS_D400E,consttmp,2);             // 讀入顯示范圍和循顯時(shí)間
  PowerVar.DisplayCouter=0x01;//0x0C;                 //有功電量
  if(consttmp[0]&0x08)PowerVar.DisplayCouter|=0x02;   // 資產(chǎn)號
  if(consttmp[1]&0x80)PowerVar.DisplayCouter|=0x04;   // 常數(shù)      
 // if(((consttmp[0]&0x08)==1)&&((consttmp[1]&0x80)==1))PowerVar.DisplayCouter=0x0B;// 資產(chǎn)號+常數(shù)
  CopyEEPToRam(ADDRESS_C113E,consttmp,1);             // 讀入循顯時(shí)間        
  if(consttmp[0]!=0)
   {
    BCDToHEX8(consttmp,1);
    Disp_Time=consttmp[0];
   } 
      else Disp_Time=0x05;
 }
/*
***************************************************************************************************
    函數(shù) : void ReadAdjustConst(void)

    功能 : 讀取并校驗(yàn)脈沖常數(shù)函數(shù)
***************************************************************************************************
*/
void ReadAdjustConst(void)
{
  //float temp;
  INT8U  consttmp[6];
  mIICReadPage( consttmp,0x06, 0xA0, 0x00);
  //i=DataAddCS(consttmp,6);
 // if(i!=consttmp[6])mIICReadPage( consttmp,0x07, 0xA0, 0x08);
  // CopyEEPToRam(ADDRESS_A,consttmp,2);             // 讀入A相分頻數(shù)
 // temp =consttmp[0]*256+consttmp[1];
 // temp=(65535.0-temp)/45;
  AdjustVar.AdjustConst_A =(0xFFFF-(consttmp[0]*256+consttmp[1]))/45;
  if((AdjustVar.AdjustConst_A)<100)AdjustVar.AdjustConst_A=100;
 //-------------------------------------------
 // CopyEEPToRam(ADDRESS_B,consttmp,2);             // 讀入B相分頻數(shù)
 //temp =consttmp[2]*256+consttmp[3];
 //temp=(65535.0-temp)/45.0+0.5;
 AdjustVar.AdjustConst_B =(0xFFFF-(consttmp[2]*256+consttmp[3]))/45;
 if((AdjustVar.AdjustConst_B)<100)AdjustVar.AdjustConst_B=100;
 //--------------------------------------------
 // CopyEEPToRam(ADDRESS_C,consttmp,2);             // 讀入C相分頻數(shù)
 //temp =consttmp[4]*256+consttmp[5];
 //temp=(65535.0-temp)/45.0+0.5;
 AdjustVar.AdjustConst_C =(0xFFFF-(consttmp[4]*256+consttmp[5]))/45;
 if((AdjustVar.AdjustConst_C)<100)AdjustVar.AdjustConst_C=100;
 // AdjustVar.AdjustConst_C=400;
 
}




/*
***************************************************************************************************
    函    數(shù) : void CheckREVP(void)

    功    能 : 檢測反向電平子程序
    注    釋 : 電平無反向
***************************************************************************************************
*/
void CheckREVP(void)
{
    if(CheckPin(PIND,1,IO_REVP_A))SETBIT(PulseBits,RevPFlag);
     else  if(CheckPin(PIND,1,IO_REVP_B))SETBIT(PulseBits,RevPFlag);
      else  if(CheckPin(PIND,1,IO_REVP_C))SETBIT(PulseBits,RevPFlag);
        else  CLRBIT(PulseBits,RevPFlag);
    
}


/********************************************* END OF SUB ****************************************/




?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆一区二区三| 精品一区二区三区影院在线午夜| 欧美三级三级三级爽爽爽| 日本成人在线一区| 国产精品久久久久久亚洲伦| 日韩欧美一区二区三区在线| 99精品欧美一区| 久久精品国产久精国产| 亚洲手机成人高清视频| 精品国内二区三区| 欧美色老头old∨ideo| av在线不卡免费看| 激情久久久久久久久久久久久久久久| 亚洲精品国产无套在线观| 精品88久久久久88久久久| 欧美日韩精品电影| 日本乱人伦一区| 成人国产在线观看| 国产精品一区二区三区乱码| 日韩av网站免费在线| 一区二区三区中文字幕精品精品 | 亚洲综合一区在线| 国产精品麻豆一区二区| 欧美精品一区二区三区视频| 欧美日韩国产色站一区二区三区| 成人av电影在线网| 国产91清纯白嫩初高中在线观看| 蜜臀av一区二区在线观看| 亚洲成va人在线观看| 亚洲另类一区二区| 综合在线观看色| 欧美激情资源网| 久久久一区二区三区捆绑**| 欧美一级国产精品| 777久久久精品| 在线成人午夜影院| 91精品视频网| 日韩欧美色综合网站| 日韩欧美一二三四区| 91精品欧美综合在线观看最新| 在线视频亚洲一区| 欧美午夜不卡在线观看免费| 在线亚洲免费视频| 在线免费观看一区| 欧美性受xxxx| 欧美日韩国产首页在线观看| 69堂成人精品免费视频| 欧美一区二区三区在线观看| 7777精品伊人久久久大香线蕉的| 欧美三级一区二区| 91精品国产入口在线| 欧美二区在线观看| 欧美一区二区三区免费| 91精品免费在线观看| 日韩欧美www| 久久九九久久九九| 国产精品毛片大码女人| 一区二区三区四区乱视频| 一区二区理论电影在线观看| 性感美女久久精品| 久久福利视频一区二区| 国产一区二区三区精品视频| 粉嫩aⅴ一区二区三区四区五区| 国产福利一区二区三区视频| 99久久er热在这里只有精品15| 91网址在线看| 欧美剧情片在线观看| 日韩免费观看高清完整版 | 久久久综合精品| 国产精品久久久久三级| 亚洲电影一区二区三区| 视频一区国产视频| 国产成人午夜精品影院观看视频 | 91视频在线观看免费| 欧美在线|欧美| 欧美草草影院在线视频| 欧美激情一区三区| 亚洲一级在线观看| 国产最新精品免费| 色偷偷成人一区二区三区91| 欧美日本在线观看| 久久精品免视看| 一区二区视频在线| 精品一二三四区| 91视频在线观看| 精品国产露脸精彩对白| 中文字幕亚洲综合久久菠萝蜜| 午夜伊人狠狠久久| 成人午夜视频网站| 欧美精品18+| 国产精品成人免费| 日韩精品免费专区| 成人白浆超碰人人人人| 91精品国产91综合久久蜜臀| 中文成人av在线| 日韩av在线免费观看不卡| 成人aaaa免费全部观看| 日韩视频一区二区三区在线播放| 欧美日韩国产乱码电影| 国产精品美女久久久久久| 国产欧美久久久精品影院| 国产欧美日韩不卡免费| 日日噜噜夜夜狠狠视频欧美人| 国产传媒一区在线| 欧美电影一区二区| 亚洲乱码国产乱码精品精的特点| 久久国产综合精品| 欧美午夜精品一区二区三区| 国产欧美日韩视频在线观看| 婷婷国产在线综合| 一本久久精品一区二区| 久久久亚洲午夜电影| 亚洲国产日韩一区二区| 97久久精品人人爽人人爽蜜臀 | 99视频精品在线| 久久免费的精品国产v∧| 日本中文字幕一区二区有限公司| 91在线无精精品入口| 国产清纯在线一区二区www| 奇米精品一区二区三区在线观看一 | 欧美精品vⅰdeose4hd| 樱花影视一区二区| 成人免费观看视频| 久久久久久久久岛国免费| 美国一区二区三区在线播放| 欧美日韩一区二区三区视频| 亚洲日本一区二区| 97se狠狠狠综合亚洲狠狠| 日本一区二区视频在线观看| 激情文学综合插| 欧美精品一区二区三区蜜桃| 欧美96一区二区免费视频| 欧美日韩国产系列| 天堂一区二区在线免费观看| 欧美亚洲动漫另类| 婷婷开心激情综合| 欧美一级xxx| 日韩av二区在线播放| 日韩欧美成人一区二区| 精品一区二区av| 国产亚洲精品精华液| 国产成人精品在线看| 中文字幕成人在线观看| 成人高清伦理免费影院在线观看| 国产婷婷色一区二区三区四区 | 日韩电影在线一区二区三区| 欧美日韩精品是欧美日韩精品| 亚洲 欧美综合在线网络| 欧美精品一二三| 日韩精品一级中文字幕精品视频免费观看 | 国产精品久久久久久户外露出 | 91麻豆精品国产自产在线观看一区| 天天色综合天天| 日韩精品一区二区三区老鸭窝 | 久久精品亚洲精品国产欧美kt∨| 韩国一区二区三区| 欧美激情中文字幕一区二区| 99久久久免费精品国产一区二区| 亚洲欧洲日韩综合一区二区| 91欧美一区二区| 亚洲国产va精品久久久不卡综合| 欧美日韩国产综合视频在线观看 | 日韩欧美亚洲一区二区| 国产精品911| 中文字幕一区二区三区乱码在线| 色8久久精品久久久久久蜜| 午夜成人免费视频| 久久综合999| 97久久超碰精品国产| 香港成人在线视频| 久久久久亚洲蜜桃| 91在线视频官网| 日韩精品久久久久久| 久久久精品tv| 一本在线高清不卡dvd| 日韩—二三区免费观看av| 久久午夜国产精品| 在线视频欧美精品| 国内精品写真在线观看| 综合网在线视频| 欧美一区二区女人| 成人免费av在线| 亚洲一区二区精品视频| 精品粉嫩超白一线天av| 99re视频这里只有精品| 青青草国产成人av片免费 | 亚洲成年人影院| 久久久久久免费网| 欧美日韩在线亚洲一区蜜芽| 国产精品一二三四| 午夜久久久影院| 国产日韩欧美综合一区| 欧美日精品一区视频| 国产精品一卡二| 亚洲第一在线综合网站| 日本一区二区高清| 欧美一级在线视频| 欧美中文字幕一二三区视频| 国产曰批免费观看久久久| 樱桃国产成人精品视频|