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

📄 rtc_dsp.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
 211   1              if(DspFlag==1)                                                                          //显示刷新标志位(1秒刷新一次)
 212   1              {       
 213   2              DspFlag = 0;                                                                    //清除显示刷新标志位        
 214   2              
 215   2              //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※                         
 216   2              if(CommSec==0x00)                                       //通讯指示灯灭,指示时间超出或没有通讯产生
 217   2              {
 218   3                      LED_COMM = 1;            
 219   3              }
 220   2              else
 221   2              {
 222   3                      LED_COMM = 0;                                                           //通讯指示灯亮
 223   3                      CommSec--;                                                                      //维持时间减一          
 224   3              }       
 225   2                      //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※            
 226   2              
 227   2                      
 228   2                      //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※                            
 229   2              if(Sec==0x59)
 230   2              {
 231   3                      //整分时刻任务事件处理
 232   3      
 233   3                              RTC_Read();                                                             //1分钟间隔校时
 234   3                      
 235   3                              if(Sec<=0x02)                                                           //3秒时间窗口
 236   3                              {
 237   4                              if(Min&0x01)    RTC_BAK();                              //逢单时间备份(2分钟备份一次)
 238   4      
 239   4                                      AdjDate = DateTerm();                                   //日期条件检查
 240   4      
 241   4                                      if(((Min==0x00)||(Min==0x30)))                  //半小时间隔判断检查
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 5   

 242   4                                      {       
 243   5                                              Fee_Flag = 1;                                           //时段费率检查标志位
 244   5      
 245   5                                              RTC_Init();                                                     //时钟配置初始化(刷新)
 246   5                              
 247   5                                              if(Min==0x00)                                           //整点时刻任务处理
 248   5                                              {
 249   6                                                      EryBln_Flag = 1;                                //电量冻结计算标志
 250   6                                                      Temp_Equalize();                                //1小时时钟温度补偿                                     
 251   6                                              }
 252   5                                      }
 253   4                              }
 254   3              }
 255   2              else    SECINC();                                                               //秒加1
 256   2      
 257   2              
 258   2              //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※            
 259   2      
 260   2                      Rev_Proc();                                                                     //电能反向事件处理  
 261   2              
 262   2              Dsp_Proc();                                                                             //显示处理
 263   2              }
 264   1      
 265   1              if(CommFlag==0)                                     //不在通讯状态
 266   1          {
 267   2                      HW38K   = 1;
 268   2      
 269   2                      if(COMMSEL==0)      KBMASK  = 0x40;                             //默认红外通讯
 270   2      
 271   2              if(Fee_Flag==1)     Fee_CHK();                              //时段费率处理
 272   2              
 273   2              if(EryBln_Flag==1)      Ery_Balance();                      //结算日处理(日、时)
 274   2          }
 275   1      }
 276          
 277          
 278          
 279          
 280          //**********************************************************
 281          // 名称:Rev_Proc()
 282          // 功能:
 283          // 说明:电能反向时间处理
 284          //**********************************************************
 285          void Rev_Proc(void)
 286          {
 287   1              uchar DataTime[8];
 288   1      
 289   1              //电能反向起始时间判断
 290   1              if( REVP==0 )
 291   1              {   
 292   2                      DelayNms(10);
 293   2      
 294   2                      if( REVP==0 )
 295   2                      {               
 296   3                      if(EryRev==0)                                                           //电能反向起始条件及时间
 297   3                      {                                                                       
 298   4                              //反向事件发生时实时时间
 299   4                              DataTime[0] = Min;                                              //分
 300   4                              DataTime[1] = Hour;                                             //时
 301   4                              DataTime[2] = Day;                                              //日    
 302   4                              DataTime[3] = Month;                                    //月            
 303   4                              DataTime[4] = SumCHK(DataTime,4);          
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 6   

 304   4                      
 305   4                              Addr[0] = 0xA0; 
 306   4                              Addr[1] = 0xAA;    
 307   4                              Len[1]  = 0x05;
 308   4                                      WriteEPMData(DataTime);
 309   4                      }                                       
 310   3                      EryRev = 1;                                                                     //电能反向标志置位 
 311   3                      }
 312   2              }
 313   1              else    EryRev = 0;                                                                     //电能正常      
 314   1              
 315   1              
 316   1              //电能反向累计总时间计算
 317   1              if( RevSec>59 )                                                                         //反向时间累计满1分钟处理
 318   1              {
 319   2                      RevSec  = 0x00;
 320   2                                      
 321   2                      Addr[0] = 0xA0;
 322   2              Addr[1] = Ptr[6];
 323   2              Len[1]  = 0x04;
 324   2              do
 325   2              {
 326   3                      ReadData(DataTime);
 327   3                              DataTime[4]= DataTime[0]+DataTime[1]+DataTime[2];               //SumCHK(DataTime,3);
 328   3              } while((DataTime[4]!=DataTime[3])&&(Addr[0]<=0xA4));
 329   2                      
 330   2                      if(DataTime[4]!=DataTime[3])    ArrayInit(DataTime,4);     //数据错误,清零
 331   2                                                      
 332   2                      BCDINC(DataTime,3,1);                                       //+1
 333   2                      DataTime[3] = DataTime[0]+DataTime[1]+DataTime[2];                      //SumCHK(DataTime,3);
 334   2                      
 335   2                      Addr[0] = 0xA0;
 336   2                      WriteEPMData(DataTime);                                                                         //写数据
 337   2      
 338   2                      Addr[0] = 0xA0;                                                                                         //读取存储区数据
 339   2                      ReadData(&DataTime[4]);
 340   2      
 341   2                      if((DataTime[7]!=SumCHK(&DataTime[4],3))||(DataTime[3]!=DataTime[7]))//比较数据的正确性
 342   2                      {       
 343   3                              EC = 0;                                                                                                 //关闭掉电检测
 344   3                              
 345   3                              Addr[0] = 0xA0;
 346   3                              WriteEPMData(DataTime);                                                                 //再次写入数据
 347   3      
 348   3                              Addr[0] = 0xA0;
 349   3                              ReadData(&DataTime[4]);                                                                 //再次读取数据                          
 350   3      
 351   3                              if((DataTime[7]!=SumCHK(&DataTime[4],3))||(DataTime[3]!=DataTime[7]))//再次数据比较判断
 352   3                              {
 353   4                                      Ptr[6] += 0x04;                         
 354   4                                      if(Ptr[6]>=0x40)Ptr[6] = 0x30;                                          //指针边界处理
 355   4                                                              
 356   4                                      DataTime[4] = Ptr[6];
 357   4                                      DataTime[5] =~Ptr[6];
 358   4                              
 359   4                                      Addr[0] = 0xA0;
 360   4                                      Addr[1] = 0xBC;
 361   4                              Len[1]  = 0x02;
 362   4                                      WriteEPMData(&DataTime[4]);                                                     //指针值
 363   4                              
 364   4                                      Addr[0] = 0xA0;
 365   4                                      Addr[1] = Ptr[6];
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 7   

 366   4                              Len[1]  = 0x04;
 367   4                                      WriteEPMData(DataTime);                                                         //反向累计时间值                                
 368   4                              
 369   4                                      Ptr[7]  = SumCHK(Ptr,7);
 370   4                              }                       
 371   3                              EC = 1;                                                                                                 //开启掉电检测
 372   3                      }
 373   2              }
 374   1      }
 375          
 376          
 377          
 378          
 379          
 380          
 381          //**********************************************************
 382          // 名称:Dsp_Proc()
 383          // 功能:
 384          // 说明:
 385          //**********************************************************
 386          void Dsp_Proc(void)
 387          {       
 388   1              uchar i;                
 389   1              uchar DspBuf[8];                                                                        //显示缓冲区
 390   1              
 391   1              ArrayInit(DspBuf,8);                                                            //显示缓冲区清零        
 392   1      
 393   1              //显示方式                                                                                              
 394   1              DspType = 0;                                                                            //5+1显示
 395   1              if(DspCtrl1&0x80)DspType = 1;                                   //小数分开显示
 396   1      
 397   1              DspSec++;                                                                                       //轮显时间+1
 398   1              
 399   1          //显示项目切换
 400   1          if(DspSec>=BCD2HEX(DspTime))                                                //轮显时间满,更新显示指针
 401   1          { 
 402   2              DspSec  = 0;                                                                    //显示计数清零          
 403   2                      DspPage = 0;                                                                    //显示首页                      
 404   2                              
 405   2              i = 0x00;                                                                               //轮显指针处理
 406   2              do
 407   2              {                               
 408   3                      DspPtr++; 
 409   3                      if( DspPtr<7 )    i = (DspCtrl1>>DspPtr)&0x01;     //                   
 410   3                              if( DspPtr>7 )
 411   3                              {
 412   4                                      /*
 413   4                                      if(DspPtr<16) i = (DspCtrl2>>(DspPtr-8))&0x01; //                       
 414   4                                      
 415   4                                      else if(DspPtr==16)  
 416   4                                      {
 417   4                                              if(DspCtrl1&0x40)       i          = 0x01;      //电表自检有效
 418   4                                              else                            DspPtr = 0xFF;
 419   4                                      }                       
 420   4                                      else                                    DspPtr = 0xFF;                          
 421   4                                      */
 422   4      
 423   4                                      if(DspPtr<16)
 424   4                                      { 
 425   5                                              i = (DspCtrl2>>(DspPtr-8))&0x01; 
 426   5                                      }
 427   4                                      else if(DspPtr==16)     //电表自检有效 
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 8   

⌨️ 快捷键说明

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