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

📄 scomm.lst

📁 完全按照645协议编写的RS485通讯程序 (REG764单片机)
💻 LST
字号:
C51 COMPILER V7.50   SCOMM                                                                 05/18/2007 03:46:48 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SCOMM
OBJECT MODULE PLACED IN Scomm.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Scomm.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "Config.h"
   2          #include "I2C.h"
   3          #include "Scomm.h"
   4          #include "ZI.h"
   5          
   6          bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no);
   7          bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no);
   8          void Delay(uchar);
   9          
  10          #define uchar unsigned char
  11          #define uint  unsigned int
  12          
  13          sbit CTRL485 = P1^7;
  14          
  15          #define N  32
  16          uchar idata Serial_buf[N];
  17          #define AT24c04 0x08
  18          uchar data Command_status1 = 0x00;
  19          
  20          uchar Receive_Data()
  21          {
  22   1              RI = 0;
  23   1              while(!RI)
  24   1              RI = 0;
  25   1              ACC = SBUF;
  26   1              if(P != RB8)
  27   1                      {
  28   2                              SP--;
  29   2                              SP--;
  30   2                              CY = 0;
  31   2                              return CY;
  32   2                      }
  33   1                      return(ACC);
  34   1      }
  35          
  36          bit Receive_One(uchar *s)
  37          {
  38   1              uchar CS = 0x00;
  39   1              uchar Serial_data;
  40   1              char i,j;
  41   1              RI = 0;
  42   1              Serial_data = SBUF;
  43   1              while(Serial_data != 0xfe)
  44   1              return 0;
  45   1              do 
  46   1                Serial_data = Receive_Data();
  47   1              while(Serial_data == 0xfe);
  48   1              if(Serial_data != 0x68)
  49   1                      return 0;
  50   1              CS += 0x68;
  51   1              for(i=0;i<=5;i++)
  52   1              {
  53   2                      *(s+i) = Receive_Data();
  54   2                      CS += *(s+i);
  55   2              }
C51 COMPILER V7.50   SCOMM                                                                 05/18/2007 03:46:48 PAGE 2   

  56   1              if(Receive_Data() != 0x68)
  57   1                      return 0;
  58   1              CS += 0x68;
  59   1              CS +=(*(s+6) = Receive_Data());
  60   1              j = *(s+7)=Receive_Data();
  61   1              CS += j;
  62   1              for(i=0;i<=(j-1);i++)
  63   1              {
  64   2                      CS += (*(s+i+8) = Receive_Data());
  65   2                      *(s+i+8) -= 0x33;
  66   2              }
  67   1              if(CS != Receive_Data())
  68   1                      return 0;
  69   1              if(Receive_Data() != 0x16)
  70   1                      return 0;
  71   1              REN = 0;
  72   1              return 1;
  73   1      }
  74          
  75          void RXD_Int(void) interrupt 4
  76          {
  77   1              CY = Receive_One(Serial_buf);
  78   1              if(CY)
  79   1                      Command_status1 |= 0x04;        
  80   1      }
  81          
  82          void Send_Data(uchar Serial_data)
  83          {
  84   1              ACC = Serial_data;
  85   1              TB8 = P;
  86   1              TI = 0;
  87   1              SBUF = Serial_data;
  88   1              while(!TI)
  89   1              TI = 0;
  90   1      }
  91          
  92          void TXD_Int(uchar *s)
  93          {
  94   1              uchar CS = 0x68;
  95   1              char i,j;
  96   1              
  97   1              CTRL485 = 0;
  98   1              Delay(1);
  99   1              TI = 0;
 100   1              Send_Data(0xfe);
 101   1              Send_Data(0xfe);
 102   1              Send_Data(0x68);
 103   1              for(i=0;i<=5;i++)
 104   1              {
 105   2                      CS += *(s+i);
 106   2                      Send_Data(*(s+i));
 107   2              }
 108   1              CS += 0x68;
 109   1              Send_Data(0x68);
 110   1              CS += *(s+6);
 111   1              Send_Data(*(s+6));
 112   1              CS += *(s+7);
 113   1              j = *(s+7);
 114   1              Send_Data(j);
 115   1              for(i=0;i<=j-1;i++)
 116   1              {
 117   2                      (*(s+i+8)) += 0x33;
C51 COMPILER V7.50   SCOMM                                                                 05/18/2007 03:46:48 PAGE 3   

 118   2                      Send_Data(*(s+i+8));
 119   2                      CS +=   (*(s+i+8));
 120   2              }
 121   1              Send_Data(CS);
 122   1              Send_Data(0x16);
 123   1              RI = 0;
 124   1              TI = 0;
 125   1              Delay(1);
 126   1              CTRL485 = 1;
 127   1      }
 128          
 129          uchar Serial_Addr(uchar *s1)
 130          {
 131   1              uchar i,a[6];
 132   1              IRcvStr(AT24c04,0x00,a,6);
 133   1              for(i=0;i<=5;i++)
 134   1              {
 135   2                      if(*(s1+i) != 0x99)
 136   2                              break;
 137   2                      if(i == 5)
 138   2                              return(0x02);
 139   2              }
 140   1              for(i=0;i<=5;i++)
 141   1              {
 142   2                      if(*(s1+i) != a[i])
 143   2                              return(0x00);
 144   2              }
 145   1              return(0x01);
 146   1      }
 147          
 148          
 149          bit Serial_Password(uchar *s)
 150          {
 151   1              uchar i,a[4];
 152   1              IRcvStr(AT24c04,0x06,a,4);
 153   1              for(i=0;i<=3;i++)
 154   1              {
 155   2                      if(*(s+i) != a[i])
 156   2                              return 0;
 157   2              }
 158   1              return 1;
 159   1      }
 160          
 161          bit Serial_Command_Run(uchar *s)
 162          {
 163   1              switch(Serial_Addr(s))
 164   1        {
 165   2              case 0x02:
 166   2                      break;
 167   2              case 0x01:
 168   2                      switch(*(s+6))
 169   2                      {
 170   3                              case 0x0f:
 171   3                                if(~Serial_Password(s+8))
 172   3                                        return 0;
 173   3                              
 174   3                                ISendStr(AT24c04,0x06,s+12,4);
 175   3                                Delay(5);
 176   3                                IRcvStr(AT24c04,0x00,s,6);                            
 177   3                            IRcvStr(AT24c04,0x06,s+8,4);
 178   3                            (*(s+6)) |= 0x80;
 179   3                            (*(s+7)) = 0x04;
C51 COMPILER V7.50   SCOMM                                                                 05/18/2007 03:46:48 PAGE 4   

 180   3                            TXD_Int(s);
 181   3                            break;
 182   3                          case 0x01:
 183   3                              break;
 184   3                          case 0x04:
 185   3                              break;
 186   3                          default:
 187   3                              break;
 188   3                          }
 189   2                          break;
 190   2                        case 0x00:
 191   2                              return 0;
 192   2                              break;
 193   2                        }
 194   1                        return 1;
 195   1      }
 196          
 197          
 198          void Serial_Command()
 199          {
 200   1              if(Command_status1 & 0x04)
 201   1                      {
 202   2                              if(~Serial_Command_Run(Serial_buf))
 203   2                              {
 204   3                                      REN = 1;
 205   3                                      Command_status1 &= 0xfb;
 206   3                                      return;
 207   3                              }
 208   2                              REN = 1;
 209   2                              Command_status1 &= 0xfb;
 210   2                      }
 211   1      }
 212          
 213          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1196    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36    ----
   IDATA SIZE       =     32    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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