⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 电能表源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   MAIN                                                                  11/24/2008 09:37:01 PAGE 8   

 415          //函数功能:初始化停电模块,
 416          //
 417          //============================================================
 418          void ini_sleepmode(void)
 419          { CfgInterrupt(0);                //关所有中断
 420   1        EA=0;                           //关总中断
 421   1        time_jihuo=0;
 422   1        time_lostiv=0;
 423   1        port_init();                    //禁止IO口输入输出
 424   1      }
 425          
 426          
 427          //=============================================================
 428          //函数功能:停电激活初始化
 429          //
 430          //============================================================
 431          void Init_jihuo(void)
 432          {
 433   1        Init_disp();                             //初始化显示模块 
 434   1        sta_meterrun=5;                          //激活模式
 435   1        time_jihuo=0;
 436   1      }
 437          
 438          
 439          //===============================================================
 440          //函数功能:停电保存各类数据
 441          //备注:包括:电量小数,CF脉冲位数,当月平均功率因数、停电时间
 442          //===============================================================
 443          void savedata_tingdian(void)
 444          {unsigned int temp_addr;
 445   1        //====================================================================电量小数部分
 446   1        addr_baseonIDandtype(RAM,ID_POSENGSUM);
 447   1        temp_addr=(*ID_coretalbpoint[0]).dataaddr;
 448   1        wr_buff[0]=ram[temp_addr+3];
 449   1        wr_buff[1]=wr_buff[0]+0x33;  
 450   1        data_addr.word[1]=EEP_Save_engdot;
 451   1        Write_data(EEPROM,2);
 452   1      
 453   1        //======================================================================CF
 454   1        wr_buff[0]=sumCF_Z;
 455   1        wr_buff[1]=wr_buff[0]+0x33;
 456   1        data_addr.word[1]=EEP_Save_cf;
 457   1        Write_data(EEPROM,2);
 458   1      /* 
 459   1       //=======================================================================停电时间年,月 日 时 分 次数
 460   1        wr_buff[0]=RTCTIME.rYear;
 461   1        wr_buff[1]=RTCTIME.rMonth;
 462   1        wr_buff[2]=RTCTIME.rDate;
 463   1        wr_buff[3]=RTCTIME.rHour;
 464   1        wr_buff[4]=RTCTIME.rMinute;
 465   1        addr_baseonIDandtype(EEPROM,ID_CUTPOWTIME);
 466   1        data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
 467   1        Write_data(EEPROM,5);
 468   1      
 469   1        addr_baseonIDandtype(EEPROM,ID_CUTPOWTIME);
 470   1        data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
 471   1        Read_data(EEPROM,2);
 472   1        byte_x_bcd_addone(wr_buff,2);                                    //停电总次数加1
 473   1        Write_data(EEPROM,2);
 474   1        */
 475   1      }
 476          
C51 COMPILER V7.06   MAIN                                                                  11/24/2008 09:37:01 PAGE 9   

 477          //=========================================================================
 478          //函数功能:开启CF脉冲输出
 479          //
 480          //=========================================================================
 481          void Open_CF(void)
 482          {unsigned char i;
 483   1       if(count_opencftime==0)
 484   1          { i=ReadMeterFunc();
 485   2                if((i&0x10)!=0x10)                                  //如果cf没有开
 486   2                    { i=ReadMeterFunc();  
 487   3                          if((i&0x10)!=0x10)  
 488   3                             { i&=0x7f;                                 //关潜动
 489   4                                   i|=0x10;                                 //开CF
 490   4                                       timocount_cf=0;                          //清CF间隔计时器
 491   4                                   SetMeterFunc(i);
 492   4                       SetInterrupt(14);                        //开CF中断    
 493   4                                 }
 494   3                        }
 495   2          }
 496   1      }
 497          
 498          //==============================================================
 499          //   主函数
 500          //
 501          //==============================================================
 502          void main(void)
 503          {//    uint8 xdata *p,i;
 504   1          
 505   1           SetPLL(1);                                                                 // 3M 工作频率
 506   1           SetMeterFunc(0);                           // 关CF输出
 507   1           if(Systate & BIT2)                         // rtc reset
 508   1                 { 
 509   2                 }
 510   1      //    #ifdef    DEBUG
 511   1      //    #else     
 512   1          else if(Systate & BIT4)                         // wdt reset
 513   1                 {
 514   2               Init_System();
 515   2                   Recover_data();                            // 恢复数据                              re
 516   2               Init_modul();                              // 各功能模块初始化
 517   2      //               complet_zhuncun();                         // N停电事件超过一个月,转存数据
 518   2                   EA = 1;                                    // 开总中断
 519   2      //               i=ReadMeterFunc();
 520   2      //               SetMeterFunc(i|0x10);                      // 开CF中断
 521   2             }
 522   1      
 523   1      //    #endif    
 524   1              else if(Systate & BIT3)                         // io reset
 525   1                 { 
 526   2             } 
 527   1              else                                            // 正常上电复位
 528   1                 {
 529   2               Init_System();
 530   2                   Recover_data();                            // 恢复数据
 531   2               Init_modul();                              // 各功能模块初始化
 532   2      //               complet_zhuncun();                         // N停电事件超过一个月,转存数据
 533   2                   EA = 1;                                    // 开总中断
 534   2              }
 535   1      //========================================================================================正常运行部分
 536   1      run_zhengchang:
 537   1              while(check_powertype()==1)                           //市电供电
 538   1                 {   
C51 COMPILER V7.06   MAIN                                                                  11/24/2008 09:37:01 PAGE 10  

 539   2                //test_enout=0;
 540   2                   //test_out=(~test_out);
 541   2                               //ClearWDT();                                //喂狗 
 542   2                               if(check_powertype()==0)
 543   2                                   break;
 544   2                               Rtc_refreshmode();                           //时钟刷新
 545   2                               if(check_powertype()==0)
 546   2                                    break;
 547   2                               Open_CF();
 548   2                   //if(check_powertype()==0)
 549   2                               //    break;
 550   2                       //keymode();                                 //按键事件
 551   2                   if(check_powertype()==0)
 552   2                                   break;
 553   2                           display_mode();                               //显示模块
 554   2                   if(check_powertype()==0)
 555   2                                   break;
 556   2                   read_encount();                               //读CF脉冲 
 557   2                               if(check_powertype()==0)
 558   2                                   break;
 559   2                       energ_addmode();                              //能量计量模块
 560   2                               if(check_powertype()==0)
 561   2                                   break;
 562   2                       realdata_mode();                              //计算有效值                      
 563   2                               if(check_powertype()==0)
 564   2                                   break;
 565   2                           commu_mode();                                  //通讯模块
 566   2                               if(check_powertype()==0)
 567   2                                   break;
 568   2                           xuliangmode();                                  //需量模块
 569   2                   //if(check_powertype()==0)
 570   2                               //    break;
 571   2                   //Switch_mode();                               //拉合闸控制
 572   2      //             if(check_powertype()==0)
 573   2      //                           break;
 574   2      //             zhuncun_mode();                              //历书数据转存模块
 575   2                               
 576   2                 }
 577   1      //==============================================================================================停电处理部
             -分
 578   1         if(check_powertype()==0)                                   //电池供电
 579   1            { savedata_tingdian();                                  //停电保存数据
 580   2      //        Ene_lostenvent();                                   //结束窃电事件
 581   2      //          CfgRTC(0,0);                                          //32768,1秒唤醒
 582   2                      ini_sleepmode();                                      //初始化停电模式
 583   2                      SetMeterFunc(0x00);
 584   2      //        CfgLCD(0x08); 
 585   2                  CloseLCD();                                            //关lcd
 586   2              sta_meterrun=4;                                        //程序进入休眠模式
 587   2              Sleep();                                               //进入睡眠模式
 588   2                }
 589   1         else
 590   1           goto run_zhengchang;
 591   1      
 592   1      //=========================================================================================停电激活
 593   1      jihuo:
 594   1         Init_jihuo();                                      //激活初始化
 595   1         while(time_jihuo<=80)                              //电池供电,激活运行3分钟
 596   1            {  ClearWDT();                                  //喂狗 
 597   2                  if(check_powertype()==1)
 598   2                          break;
 599   2                      Rtc_refreshmode();                            //时钟刷新
C51 COMPILER V7.06   MAIN                                                                  11/24/2008 09:37:01 PAGE 11  

 600   2              //if(check_powertype()==1)
 601   2                      //    break;
 602   2                      //keymode();                                  //按键事件
 603   2              if(check_powertype()==1)
 604   2                          break;
 605   2              display_mode();                               //显示模块 
 606   2                      if(check_powertype()==1)
 607   2                          break;
 608   2                      commu_mode();                                  //通讯模块
 609   2                  if(check_powertype()==1)
 610   2                      break;
 611   2                } 
 612   1         if(check_powertype()==1)                        //来电处理
 613   1            { Init_System();
 614   2                  Init_modul();                              //各功能模块初始化
 615   2              EA = 1;                                    //开总中断
 616   2                      goto run_zhengchang;
 617   2                }
 618   1         if(time_jihuo>80)                               //激活时间到
 619   1            { CloseLCD();                                //关lcd
 620   2              ini_sleepmode();                           //初始化停电模式
 621   2                      Sleep();                                   //进入睡眠模式
 622   2                }
 623   1      }
 624          
 625          #undef  MAIN

C51 COMPILATION COMPLETE.  3 WARNING(S),  9 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -