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

📄 main.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 3 页
字号:
 316   1      
 317   1              //P0:
 318   1              P0      |= 0xB5;                                                        //10110101
 319   1              //HW38K    = 1;                                                         //P0.7置高      
 320   1              //CTRL485  = 1;                                         //RS485接收状态
 321   1              //PDA      = 1;                                                         //P0.4空->置高处理
 322   1              //LED_COMM = 1;                                                         //通讯指示灯灭
 323   1              //LED_G    = 1;                                                 //谷时段指示灭
 324   1              
 325   1              //P1:
 326   1              LED_F    = 1;                                               //峰时段指示灭
 327   1              COMMSEL  = 0;                                           //默认红外通讯方式
 328   1              
 329   1              //P2:   
 330   1              P2       = 0xFF;                                                        //对于LPC931,P2口空->置高处理 
 331   1      
 332   1              
 333   1              MSSum    = 0x0000;                                                      //时间补偿为零
 334   1              
 335   1              //※※※※※※※※※※※※※※※※※※※※※※※※※※※
 336   1              //显示设置
 337   1              //※※※※※※※※※※※※※※※※※※※※※※※※※※※
 338   1              if(RSTSRC&0x10)                                                         //上电满屏显示
 339   1              {
 340   2                      RSTSRC &= ~0x10;                
 341   2                      for(i=0;i<8;i++)        RTC[i] = 0xFF; 
 342   2                      Display(RTC); 
 343   2      
 344   2              }
 345   1              //※※※※※※※※※※※※※※※※※※※※※※※※※※※
 346   1              
 347   1              
 348   1              //※※※※※※※※※※※※※※※※※※※※※※※※※※※        
 349   1              RTC_Init();                                                                     //RTC初始化设置
 350   1              //※※※※※※※※※※※※※※※※※※※※※※※※※※※        
 351   1              
 352   1              
 353   1              //※※※※※※※※※※※※※※※※※※※※※※※※※※※
 354   1              Addr[0] = 0xA0;
 355   1              Addr[1] = 0x00;           
 356   1              //Len[0]  = 0x02;
 357   1              Len[1]  = 0x06; 
 358   1              ReadData(PulseTmp);                                                     //剩余脉冲数据恢复
 359   1              if(PulseTmp[5]!=SumCHK(PulseTmp,5))     ArrayInit(PulseTmp,6);  
 360   1              
 361   1              Resume();                                                                       //电表电量数据恢复
 362   1              RTC_Read();                                                                     //时钟读取      
 363   1              Fee_CHK();                                                                      //时段费率处理  
 364   1              //※※※※※※※※※※※※※※※※※※※※※※※※※※※
 365   1              Watchdog_feed();
C51 COMPILER V7.50   MAIN                                                                  04/13/2007 13:24:52 PAGE 7   

 366   1              
 367   1              Ery_Balance();                                                          //电量结算处理  
 368   1              
 369   1              DspPara_Read();                                                         //显示控制参数检查
 370   1              
 371   1              AdjDate=DateTerm();                                                     //日期条件
 372   1      }
 373          
 374          
 375          
 376          
 377          //**********************************************************
 378          // 名称:CMP_isr
 379          // 功能:掉电数据保存
 380          // 说明:
 381          //**********************************************************
 382          void CMP_isr(void) interrupt 8 using 1
 383          {       
 384   1              uchar i;
 385   1              uchar j;
 386   1              
 387   1              i = 0xFF;
 388   1              while(--i);
 389   1      
 390   1              if(CMP1&0x01)                                                                           //电源跃变中断(低->高,高->低)
 391   1              {
 392   2                      CMP1 &= 0xFE;                                                           //清除比较器CMP2中断标志
 393   2                      
 394   2                      if(TxdWork==0)                                  //不在发送状态
 395   2                      {
 396   3                              if(CMP1&0x02)   AUXR1 |= 0x08;                          //复位(用于电压低->高跃变过程)
 397   3                              else                                                                            //掉电处理(用于电压高->低跃变过程)
 398   3                              {
 399   4                                      //PulseTmp[5] = PulseTmp[0]+PulseTmp[1]+
 400   4                                      //                        PulseTmp[2]+PulseTmp[3]+PulseTmp[4];                                            
 401   4                      
 402   4                                      if( I2EN == 1 )                                                 //I2C总线忙
 403   4                                      {                              
 404   5                                              I2CON = 0x54;                                           //STO=1&AA=1 发送停止标志,结束其他I2C操作                                                                                                      
 405   5                                      while(STO == 1);                                                
 406   5                                              for(i=0;i<100;i++)                                      //延时10mS
 407   5                                              {                               
 408   6                                                      j = 184;
 409   6                                                      while(--j);
 410   6                                              }
 411   5                                      }                       
 412   4                              
 413   4                                      //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※                    
 414   4                                      //屏蔽秒脉冲输出
 415   4                                      /*
 416   4                                      I2SCLH = 0x14;                                          //设置SCL高电平的PCLK周期数
 417   4                                      I2SCLL = 0x14;                                          //设置SCL低电平的PCLK周期数
 418   4                                      I2CON  = 0x64;                                          //申请成为主机,起动总线。使用内部SCL发生器,I2EN和AA置位  
 419   4                                      while( SI==0 );                                         //等待起始信号的发送,申请总线                  
 420   4                                                                              
 421   4                                      I2DAT = RX_8025;                                                //发送器件地址
 422   4                              I2CON = 0x44;                                           //清除SI位等等
 423   4                              while( SI==0 );                                         //等待数据的发送
 424   4                      
 425   4                                      I2DAT = 0xE0;                                                   //发送从地址
 426   4                              I2CON = 0x44;                                           //清除SI位等等
 427   4                              while( SI==0 );                                         //等待数据的发送  
C51 COMPILER V7.50   MAIN                                                                  04/13/2007 13:24:52 PAGE 8   

 428   4                      
 429   4                              I2DAT = 0x20;                                                   //发送从地址
 430   4                              I2CON = 0x44;                                           //清除SI位等等
 431   4                              while( SI==0 );                                         //等待数据的发送
 432   4                                              
 433   4                                      I2CON = 0x54;                                                   //结束总线
 434   4                                      while(STO == 1); 
 435   4                                      */
 436   4                                      //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
 437   4                              
 438   4                              
 439   4                              
 440   4                                      //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※                    
 441   4                                      I2SCLH = 0x14;                                          //设置SCL高电平的PCLK周期数
 442   4                                      I2SCLL = 0x14;                                          //设置SCL低电平的PCLK周期数
 443   4                                      I2CON  = 0x64;                                          //申请成为主机,起动总线。使用内部SCL发生器,I2EN和AA置位  
 444   4                                      while( SI==0 );                                         //等待起始信号的发送,申请总线
 445   4                                                      
 446   4                                      I2DAT = 0xA0;                                                   //发送器件地址
 447   4                              I2CON = 0x44;                                           //清除SI位等等
 448   4                              while( SI==0 );                                         //等待数据的发送
 449   4                      
 450   4                                      I2DAT = 0x00;                                                   //发送从地址
 451   4                              I2CON = 0x44;                                           //清除SI位等等
 452   4                              while( SI==0 );                                         //等待数据的发送                
 453   4                      
 454   4                                      for(i=0;i<6;i++)                                                //发送数据
 455   4                                      {
 456   5                                      I2DAT = PulseTmp[i];
 457   5                                      I2CON = 0x44;                                   //清除SI位等等
 458   5                                      while( SI==0 ); 
 459   5                                      }
 460   4                                      I2CON = 0x54;                                                   //结束总线 
 461   4                      
 462   4                                      while((CMP1&0x02)==0x00);                               //检测上电(低->高)情况;等待
 463   4                                      AUXR1 |= 0x08;                                                  //复位
 464   4                              }       
 465   3                      }
 466   2              }
 467   1                              
 468   1          if(CMP2&0x01)       CMP2 &= 0xFE;                                           //清除CMP1中断标志
 469   1      }
 470          
 471          
 472          
 473          
 474          //**********************************************************
 475          // 名称:int1_isr
 476          // 功能:外部中断1中断处理程序
 477          // 说明:电能脉冲处理方法

⌨️ 快捷键说明

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