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

📄 rscomm.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE RSCOMM
OBJECT MODULE PLACED IN rscomm.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE rscomm.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <Reg931.h>
   2          #include <Rscomm.h>
   3          #include <Meter_def.h>
   4          #include <General.h>
   5          #include <Math.h>
   6          
   7          #ifdef    uchar 
   8            #define READYDEF 1     //宏uchar已定义
   9          #else  
                #define uchar unsigned char 
              #endif
  12          
  13          
  14          
  15          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  16          //                                              变量定义
  17          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  18          // MeterFlag
  19          extern uchar bdata MeterFlag;
  20          extern bit Battery;
  21          extern bit Hardware;
  22          extern bit RsComm; 
  23          extern bit AdjTime;
  24          extern bit EryRev;
  25          extern bit AdjDate;
  26          extern bit Fee0;
  27          extern bit Fee1;
  28          //Flag
  29          extern uchar bdata Flag;
  30          extern bit TimeAdj;
  31          extern bit TimeProg ;
  32          extern bit RxdFlag;
  33          extern bit TxdFlag;
  34          extern bit TxdWork;
  35          extern bit DspType;
  36          extern bit DspPage;
  37          extern bit DspFlag;
  38          
  39          //SystemStates
  40          extern uchar bdata SystemStates; 
  41          extern bit Comm_RTC_Err;
  42          extern bit Comm_EPM_Err;
  43          extern bit Data_RTC_Err;
  44          extern bit Data_EPM_Err;
  45          extern bit EryBln_Flag;
  46          extern bit Prog_Flag;
  47          extern bit Fee_Flag;
  48          extern bit CommFlag;
  49          
  50          extern uchar DspSec;
  51          extern uchar DspPtr;
  52          extern uchar ComPtr;
  53          extern uchar CommTimer;
  54          extern uchar CommSec;
  55          
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 2   

  56          extern uchar Len[2];
  57          extern uchar Addr[2];
  58          extern uchar DspPara[4];
  59          extern uchar PulseTmp[6];  
  60          extern uchar EryTmp[6];
  61          extern uchar Ptr[8];
  62          extern uchar RTC[8];
  63          extern uchar idata ComBuf[RS_MaxSize];
  64          
  65          
  66          
  67          
  68          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  69          //                                                函数定义
  70          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  71          void  Comm_Proc(void);
  72          void  ReadMeter(void);
  73          void  WriteMeter(void);
  74          
  75          void  Proc33(uchar procdata);
  76          void  ReadMeterData(uchar addr,uchar saddr,uchar DataLen);
  77          
  78          bit   TimeTerm(void);
  79          
  80          uchar RxdCheck(void);
  81          uchar PsWdCHK(uchar PsWdPtr);
  82          
  83          
  84          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  85          //                                              函数外部引用
  86          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  87          extern void  RTC_Read(void);
  88          //extern void  Fee_CHK(void);
  89          extern void  WriteEPMData(uchar idata *ptr);
  90          extern void  RTC_Init(void);
  91          extern void  RTC_Set(uchar staddr,uchar idata *ptr,uchar len);
  92          extern void  ErrorModify(uchar addr,uchar idata *ptr);
  93          
  94          extern bit   DateTerm(void);
  95          extern bit   DateCHK(uchar idata *ptr);
  96          extern bit   TimeCHK(uchar idata *ptr);
  97          extern bit   ReadData(uchar idata *ptr);
  98          
  99          extern uchar LastMonthSN(uchar sn);
 100          
 101          
 102          
 103          //**********************************************************
 104          //名称:Comm_Proc()
 105          //功能:
 106          //说明:通讯处理函数
 107          //**********************************************************
 108          void Comm_Proc(void)
 109          {
 110   1          uchar i;
 111   1          uchar j;
 112   1          uchar TFlag;
 113   1          
 114   1          if( RxdFlag==1 )
 115   1          {
 116   2                      Watchdog_feed();                                //喂狗                  
 117   2                      
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 3   

 118   2                      //※※※※※※※※※※※※※※※※※※※※※※※※※※※
 119   2                      //信道配置          
 120   2                      HW38K   = 1;            
 121   2      
 122   2                      CTRL485 = 1;                                    //打开默认:红外调制            
 123   2                      TR1     = 1; 
 124   2      
 125   2                      if(COMMSEL==1)                                  //RS485发送配置
 126   2                      {
 127   3                              CTRL485 = 0;                    
 128   3                              TR1     = 0;
 129   3                      }                               
 130   2              //※※※※※※※※※※※※※※※※※※※※※※※※※※※
 131   2      
 132   2                      Flag &= 0xE0;
 133   2              //TimeAdj  = 0;                                 //校时时间
 134   2                      //TimeProg = 0;                                 //编程时间
 135   2                      //RxdFlag  = 0;                                 //接收状态
 136   2              //TxdFlag  = 0;                                 //通信应答
 137   2                      //TxdWork  = 0;                                 //发送状态              
 138   2                              
 139   2                      TFlag = RxdCheck();                             //通讯帧格式及通讯地址检查              
 140   2              
 141   2              if( TFlag!=0x00 )
 142   2              {               
 143   3                      Proc33(0xCD);               //数据去0x33处理
 144   3      
 145   3                      if(TFlag==0x10)                         //广播校时,无应答 
 146   3                      {
 147   4                          if((TimeCHK(&ComBuf[RS_CmdPtr]+0)==1)&&(DateCHK(&ComBuf[RS_CmdPtr+3])==1))
 148   4                                      {
 149   5                                              ComBuf[RS_CmdPtr+6] = ComBuf[RS_CmdPtr+0];
 150   5                                              ComBuf[RS_CmdPtr+7]     = ComBuf[RS_CmdPtr+1];
 151   5                                              ComBuf[RS_CmdPtr+8]     = ComBuf[RS_CmdPtr+2];
 152   5              
 153   5                                              if(Prog_Flag==1||((ComBuf[RS_CmdPtr+3]==Day)&&(ComBuf[RS_CmdPtr+4]==Month)&&(ComBuf[RS_CmdPtr+5]==Yea
             -r)&&(TimeTerm()==1)))
 154   5                                              {
 155   6                                                      //RTC_Init();
 156   6                                                      RTC_Set(0x00,&ComBuf[RS_CmdPtr+0],0x03);        //秒、分、时
 157   6                                              RTC_Set(0x40,&ComBuf[RS_CmdPtr+3],0x03);        //日、月、年
 158   6                                                                      
 159   6                                              CommSec  = CommLEDTime;                                         //亮10秒
 160   6                                                      LED_COMM = 0;
 161   6      
 162   6                                                      Flag    |= 0x03;                                        
 163   6                                                      //TimeAdj  = 1;         //校时标志
 164   6                                                      //TimeProg = 1;         //编程标志
 165   6                                                      Fee_Flag = 1;           //时段费率判断
 166   6                                              
 167   6                                                      //*******
 168   6                                                      EryBln_Flag = 1;    //电量结算
 169   6                                              }
 170   5                                      }
 171   4                      }                               
 172   3      
 173   3      
 174   3                  //※※※※※※※※※※※※※※※※※※※※※※※※※※※※              
 175   3                      else if( TFlag==0x11 )                  //广播设置电表表号
 176   3                      {
 177   4                          for(i=0;i<6;i++)ComBuf[1+i] = ComBuf[RS_CmdPtr+i];  //表号数据返回                  
 178   4                                      
C51 COMPILER V7.50   RSCOMM                                                                04/13/2007 13:24:53 PAGE 4   

 179   4                              ComBuf[RS_CmdPtr+6] = SumCHK(&ComBuf[RS_CmdPtr],6); //表号检验和
 180   4                                      
 181   4                              Addr[0] = 0xA0;                         
 182   4                              Addr[1] = 0xF0;          //写局编号
 183   4                              //Addr[1] = 0xF8;       //写出厂编号                            
 184   4                              Len[1]  = 0x07;                         
 185   4                                      WriteEPMData(&ComBuf[RS_CmdPtr]);
 186   4                                                                  
 187   4                              RS_Len  = 0x00; 
 188   4                                                                      
 189   4                      Flag |= 0x0A;
 190   4                      //TimeProg = 1;
 191   4                      //TxdFlag  = 1;                                                         
 192   4                      }           
 193   3                  
 194   3                              /*          
 195   3                  //※※※※※※※※※※※※※※※※※※※※※※※※※※※※              
 196   3                  else if( TFlag==0x12)                                       //自定义命令集
 197   3                  {    
 198   3                          if( RS_CmdH==0x00 && RS_CmdL==0x00) //数据清零命令
 199   3                      {                  
 200   3                          LED_F    = 0;
 201   3                          LED_G    = 0;                    
 202   3                          LED_COMM = 0;
 203   3                                  CommSec  = CommLEDTime;                     //亮10秒
 204   3                                  
 205   3                                  EA = 0;

⌨️ 快捷键说明

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