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

📄 serial.lst

📁 51 单片机上网
💻 LST
字号:
C51 COMPILER V7.07   SERIAL                                                                06/30/2006 16:21:53 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE serial.c LARGE OPTIMIZE(SIZE) BROWSE

stmt level    source

   1          //version 1 serial0 115200bps serial1 at 2400bps at 11.0592MHz
   2          //version 2 serial0 57600bps serial1 at 2400bps at 24MHz
   3          
   4          #include "w77e58.h"
   5          #include <absacc.h>
   6          
   7          //#define RAMSP XBYTE[0x0000]
   8          sbit RS485 = P1^0;
   9          //unsigned char xdata ramIni _at_ 0x0000;
  10          unsigned char xdata ramall[1024] _at_ 0x0000;
  11          
  12          #define DEV_NUM 10
  13          unsigned char devAdd[10]={0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa};
  14          
  15          //serial0, 9600bps  rs232
  16          //serial1, 2400bps, rs485
  17          void serial_init(void)
  18          {
  19   1         CKCON=0xc0;    //wd=67108864clk
  20   1         TA=0xAA;
  21   1         TA=0x55;
  22   1         WDCON=0x01;    //reset watchdog
  23   1      
  24   1      //   PCON=0x80;   
  25   1         TMOD=0x21;     //t1 for serial1 bps, t0 16bit timer
  26   1      //   TH1=0xF4;    //11.0592MHz
  27   1      //   TL1=0xF4;
  28   1         TH1 = 0xE6;    //24MHz
  29   1         TL1 = 0xE6;
  30   1         SCON1=0x50;    //2400bps  serial port 1
  31   1      
  32   1         T2CON=0x30;    //t2 for serial0 bps 
  33   1      //   RCAP2H=0xFF;   //11.0592MHz  115200bps
  34   1      //   RCAP2L=0xFD;
  35   1      //   TH2=0xFF;
  36   1      //   TL2=0xFD;
  37   1         RCAP2H = 0xFF;   //24MHz 57600bps
  38   1         RCAP2L = 0xF3;
  39   1         TH2 = 0xFF;
  40   1         TL2 = 0xF3;
  41   1         SCON=0x50;    //11.0592MHz 115200bps serial port 0
  42   1      
  43   1         TR1=1;
  44   1         TR2=1;
  45   1      //   ES=1;
  46   1      //   EA=1;
  47   1      }
  48                                                                     
  49          
  50          void serial0_str(unsigned char *str)
  51          {
  52   1              unsigned char i;
  53   1      
  54   1              for(i=0; str[i]!=0; i++){
  55   2                      SBUF = str[i];
C51 COMPILER V7.07   SERIAL                                                                06/30/2006 16:21:53 PAGE 2   

  56   2                      while(TI==0);
  57   2                      TI=0;
  58   2              }
  59   1      }
  60          
  61          void serial0_bytes(unsigned char *dat, unsigned char len)
  62          {
  63   1              unsigned char i;
  64   1      
  65   1              for(i=0; i<len; i++){
  66   2                      SBUF = dat[i];
  67   2                      while(TI==0);
  68   2                      TI=0;
  69   2              }
  70   1      }
  71          
  72          void serial1_str(unsigned char *str)
  73          {
  74   1              unsigned char i;
  75   1      
  76   1              RS485 = 1;
  77   1              for(i=0; str[i]!=0; i++){
  78   2                      SBUF1 = str[i];
  79   2                      while(TI1==0);
  80   2                      TI1=0;
  81   2              }
  82   1              RS485 = 0;
  83   1      }
  84          
  85          void serial1_bytes(unsigned char *dat, unsigned char len)
  86          {
  87   1              unsigned char i;
  88   1      
  89   1              RS485 = 1;
  90   1              for(i=0; i<len; i++){
  91   2                      SBUF1 = dat[i];
  92   2                      while(TI1==0);
  93   2                      TI1=0;
  94   2              }
  95   1              RS485 = 0;
  96   1      }
  97          
  98          /*
  99          void memory_test(void)
 100          {
 101                  unsigned int i;
 102          
 103                  for(i=0; i<4096; i++)
 104                          ramall[i] = 0x55;
 105                  for(i=0; i<4096; i++)
 106                          if(ramall[i] != 0x55){
 107                                  serial0_str("memory 0x55 test falure");
 108                                  return;
 109                          }
 110          
 111                  for(i=0; i<4096; i++)
 112                          ramall[i] = 0xaa;
 113                  for(i=0; i<4096; i++)
 114                          if(ramall[i] != 0xaa){
 115                                  serial0_str("memory 0xaa test falure");
 116                                  return;
 117                          }
C51 COMPILER V7.07   SERIAL                                                                06/30/2006 16:21:53 PAGE 3   

 118          
 119                  for(i=0; i<4096; i++)
 120                          ramall[i] = 0xff;
 121                  for(i=0; i<4096; i++)
 122                          if(ramall[i] != 0xff){
 123                                  serial0_str("memory 0xff test falure");
 124                                  return;
 125                          }
 126          
 127                  for(i=0; i<4096; i++)
 128                          ramall[i] = 0x00;
 129                  for(i=0; i<4096; i++)
 130                          if(ramall[i] != 0x00){
 131                                  serial0_str("memory 0x00 test falure");
 132                              return;
 133                          }
 134          
 135                  serial0_str("memory test passed");
 136          }
 137          */
 138          
 139          /*
 140          void memory_sptest(void)
 141          {
 142                  RAMSP = 0x55;
 143                  if(RAMSP != 0x55) 
 144                          serial0_str("memory SP 0x55 test falure");
 145          
 146                  RAMSP = 0xaa;
 147                  if(RAMSP != 0xaa) 
 148                          serial0_str("memory SP 0xaa test falure");
 149          
 150                  RAMSP = 0xff;
 151                  if(RAMSP != 0xff) 
 152                          serial0_str("memory SP 0xff test falure");
 153          
 154                  RAMSP = 0x00;
 155                  if(RAMSP != 0x00) 
 156                          serial0_str("memory SP 0x00 test falure");
 157                  serial0_str("memory sp test passed");
 158          }
 159          */
 160          
 161          //send the data to both of serial0 and serial1
 162          void RS485_232(unsigned char xdata *dat, unsigned int len)
 163          {
 164   1              unsigned int i;
 165   1      
 166   1              RS485 = 1;
 167   1              for(i=0; i <len; i++){
 168   2                      SBUF = dat[i];
 169   2                      SBUF1 = dat[i];
 170   2                      while((TI == 0)||(TI1 == 0));
 171   2                      TI = 0;
 172   2                      TI1 = 0;
 173   2              }
 174   1              RS485 = 0;
 175   1      }
 176          
 177          unsigned char RS485_getDat(unsigned char addr, unsigned char xdata *dat)
 178          {
 179   1              unsigned char c, i, len;
C51 COMPILER V7.07   SERIAL                                                                06/30/2006 16:21:53 PAGE 4   

 180   1      
 181   1              //send the remote node address
 182   1              RS485 = 1;
 183   1              SBUF1 = addr;
 184   1              while(TI1==0);
 185   1              TI1 = 0;
 186   1              RS485 = 0;
 187   1      
 188   1              //get ack address
 189   1              TR0=0;TF0=0;TH0=0x00;TL0=0x00;TR0=1;
 190   1              while((RI1==0)&&(TF0==0));
 191   1              if(TF0){TR0=0;TF0=0; return 0;}
 192   1      
 193   1              c = SBUF1;
 194   1              RI1 = 0;
 195   1              if(c != addr) return 0;
 196   1              
 197   1              TR0=0;TF0=0;TH0=0x00;TL0=0x00;TR0=1;
 198   1              while((RI1==0)&&(TF0==0));
 199   1              len = SBUF1;
 200   1              RI1 = 0;
 201   1      
 202   1              for(i=0; i<len; i++){
 203   2                      while((RI1==0)&&(TF0==0));
 204   2                      dat[i] = SBUF1;
 205   2                      RI1 = 0;
 206   2              }
 207   1                      
 208   1              return len;
 209   1      }
 210          
 211          unsigned int RS485_getAll(unsigned char xdata *dat)
 212          {
 213   1              unsigned int nlen;
 214   1              unsigned char i,alen;
 215   1              unsigned char xdata *datP;
 216   1      
 217   1              nlen = 0;
 218   1              datP = dat;
 219   1      
 220   1              for(i=0; i<DEV_NUM; i++){
 221   2                  serial0_str("get data from a node");
 222   2              alen = RS485_getDat(devAdd[i], datP);
 223   2                      nlen = nlen+alen;
 224   2                      datP = datP + alen;
 225   2                      if(alen)
 226   2                              serial0_str("have data");
 227   2                      else
 228   2                              serial0_str("no data");                 
 229   2              }
 230   1      
 231   1              return nlen;
 232   1      }
 233          
 234          /*
 235          void videotest(void)
 236          {
 237                  unsigned char i;
 238          //      unsigned char c;
 239          
 240          //      while(RI == 0);
 241          //      RI=0;
C51 COMPILER V7.07   SERIAL                                                                06/30/2006 16:21:53 PAGE 5   

 242          
 243                  SBUF1 = 0xff;
 244                  while(TI1==0);
 245                  TI1=0;
 246                  SBUF1 = 0xaa;
 247                  while(TI1==0);
 248                  TI1=0;
 249          
 250                  for(i=0;i<255;i++);
 251                  for(i=0;i<255;i++);
 252                  for(i=0;i<255;i++);
 253                  for(i=0;i<255;i++);
 254                  for(i=0;i<255;i++);
 255                  for(i=0;i<255;i++);
 256                  for(i=0;i<255;i++);
 257                  for(i=0;i<255;i++);
 258                  for(i=0;i<255;i++);
 259                  for(i=0;i<255;i++);
 260          
 261                  for(i=1; i<11; i++){
 262                          SBUF1 = 0xff;
 263                          while(TI1==0);
 264                          TI1=0;
 265                          SBUF1 = 0xf0+i;
 266                          while(TI1==0);
 267                          TI1=0;
 268                          SBUF1 = 0x10;
 269                          while(TI1==0);
 270                          TI1=0;
 271                          SBUF1 = 0x1A;
 272                          while(TI1==0);
 273                          TI1=0;
 274                          SBUF1 = 0x29;
 275                          while(TI1==0);
 276                          TI1=0;
 277                          SBUF1 = 0x38;
 278                          while(TI1==0);
 279                          TI1=0;
 280                          SBUF1 = 0x47;
 281                          while(TI1==0);
 282                          TI1=0;
 283                          SBUF1 = 0x36;
 284                          while(TI1==0);
 285                          TI1=0;
 286                          SBUF1 = 0x15;
 287                          while(TI1==0);
 288                          TI1=0;
 289                          SBUF1 = 0x46;
 290                          while(TI1==0);
 291                          TI1=0;
 292                          SBUF1 = 0x29;
 293                          while(TI1==0);
 294                          TI1=0;
 295                          SBUF1 = 0x28;
 296                          while(TI1==0);
 297                          TI1=0;
 298                          SBUF1 = 0x27;
 299                          while(TI1==0);
 300                          TI1=0;
 301                  }
 302          }
 303          */
C51 COMPILER V7.07   SERIAL                                                                06/30/2006 16:21:53 PAGE 6   

 304          
 305          void resetWD(void)
 306          {
 307   1              TA = 0xAA;
 308   1              TA = 0x55;
 309   1              WDCON = 0x01;
 310   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    498    ----
   CONSTANT SIZE    =     39    ----
   XDATA SIZE       =     10      21
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   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 + -