main.lst

来自「韦根26通讯协议转串口的协议」· LST 代码 · 共 237 行

LST
237
字号
C51 COMPILER V8.02   MAIN                                                                  01/21/2008 15:09:35 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          #include <string.h>
   3          #include <intrins.h>
   4          /////////////////////////////////////////////////////////////////////
   5          //89C52特殊寄存器定义
   6          /////////////////////////////////////////////////////////////////////
   7          sfr      WDT_CONTR  =    0xe1;
   8          sfr16    RCAP2LH    =    0xCA;
   9          sfr16    T2LH       =    0xCC;
  10          sfr      AUXR       =    0X8E;
  11          /////////////////////////////////////////////////////////////////////
  12          //端口定义
  13          /////////////////////////////////////////////////////////////////////
  14          sbit    led             =       P0^0;
  15          sbit    wgdata1 =       P1^2;
  16          sbit    wgdata_1  =     P1^3;
  17          sbit    wgdata_0  =     P1^4;
  18          sbit    b_xiepoid = P1^5;
  19          sbit    b_scom  =       P1^6;
  20          sbit    b_wgcode  =     P1^7;
  21          sbit    b_rs485 = P3^2;
  22          bit     b_rewg  ;
  23          bit     b_sendscom;
  24          bit     b_norec;
  25          
  26          unsigned char idata txwgdata;
  27          unsigned char idata wgnumber;
  28          unsigned char idata SendBuf[15];
  29          unsigned char idata Sendnum;  
  30          unsigned char idata scomdata;
  31          unsigned long bdata wgdata26; 
  32              
  33          /////////////////////////////////////////////////////////////////////
  34          //延时常数及波特率定义
  35          /////////////////////////////////////////////////////////////////////
  36          #define  OSC_FREQ        11059200L
  37          
  38          #define  RCAP2_50us      65536L - OSC_FREQ/240417L
  39          #define  RCAP2_1ms       65536L - OSC_FREQ/12021L
  40          #define  RCAP2_10ms      65536L - OSC_FREQ/1200L
  41          
  42          #define  BOUND19200      256 - 3
  43          #define  BOUND9600               256 - 6
  44          /////////////////////////////////////////////////////////////////////
  45          //函数原型
  46          /////////////////////////////////////////////////////////////////////
  47          void InitializeSystem();                                                                                  
             -                          
  48          void DelayMs(unsigned int j);                                      
  49          void Delay_50us(unsigned char j);        
  50          unsigned char getascii(unsigned char input);
  51                                                          
  52          ///++++++++++++++
  53          
  54          void main( )
C51 COMPILER V8.02   MAIN                                                                  01/21/2008 15:09:35 PAGE 2   

  55          {    
  56   1          InitializeSystem( );
  57   1          while(1)
  58   1              {
  59   2                      WDT_CONTR = 0x3f;
  60   2                      if(b_rewg)
  61   2                      {
  62   3                              DelayMs(30);
  63   3                              if(wgnumber != 0)
  64   3                              {
  65   4                                      wgdata26 = 0;
  66   4                                      wgnumber = 0;
  67   4                                      b_rewg = 0;
  68   4                               }
  69   3                       }      
  70   2      
  71   2                      if(b_sendscom)  
  72   2                      {
  73   3                              b_sendscom = 0;
  74   3                              if(b_scom)      
  75   3                              {
  76   4                                      b_sendscom = 0;
  77   4                                      TI = 1;
  78   4                              }
  79   3                      
  80   3                              else
  81   3                              {
  82   4                                      b_norec = 0;
  83   4                                      _nop_();
  84   4                                      _nop_();
  85   4                                      _nop_();
  86   4                                      if(!b_norec)
  87   4                                      {
  88   5                                              b_rs485 = 1;                    
  89   5                                              TI = 1;
  90   5                                      }
  91   4                              }
  92   3                      }
  93   2              }
  94   1      }//main
  95          
  96          
  97          void ex_int (void) interrupt 2 using 2
  98          {
  99   1              
 100   1              //unsigned char chkdata = 0,n;
 101   1              if(wgnumber == 0)
 102   1              {
 103   2                      b_rewg = 1;
 104   2              }
 105   1                      if(wgdata1==0)  wgdata26 |= 0x00000001;
 106   1                      else                    wgdata26 &= 0xFFFFFFFE;
 107   1                      wgdata26 <<= 1;
 108   1                      wgnumber = wgnumber+1;
 109   1                      
 110   1              if(wgnumber > 20)       
 111   1              {
 112   2                      
 113   2                      SendBuf[0] = wgdata26 >> 1;                     
 114   2                      SendBuf[1] = wgdata26 >> 9;                     
 115   2                      SendBuf[2] = wgdata26 >> 17;
 116   2                      
C51 COMPILER V8.02   MAIN                                                                  01/21/2008 15:09:35 PAGE 3   

 117   2                      Sendnum = 3;    
 118   2                      
 119   2                      wgdata26 = 0;
 120   2                      wgnumber = 0;
 121   2                      b_rewg = 0;
 122   2                      b_sendscom = 1;
 123   2              }
 124   1      }
 125                          
 126          //////////////////////////////////////////////////////////////////////
 127          ///系统初始化
 128          /////////////////////////////////////////////////////////////////////
 129          void InitializeSystem()
 130          {
 131   1          TMOD &= 0x0F;
 132   1          TMOD |= 0x21;
 133   1              TCON |= 0x04;   
 134   1          PCON |= 0x80;
 135   1          SCON  = 0x50;
 136   1          P0 = P1 = P2 = P3 = 0xFF;
 137   1              TH1 = TL1 = BOUND9600; 
 138   1          TR1=1;
 139   1          IE |= 0x94;
 140   1          //AUXR = 0x02;
 141   1              wgdata26  = 0;
 142   1              wgnumber = 0;
 143   1              wgdata_0 = 0;
 144   1              wgdata_1 = 0;
 145   1              b_rewg = 0;
 146   1              b_rs485 = 0;
 147   1              b_norec = 0;
 148   1              b_sendscom = 0;
 149   1              WDT_CONTR = 0x3f;
 150   1      }
 151          
 152          /////////////////////////////////////////////////////////////////////
 153          //串行中断,接收上位机数据
 154          /////////////////////////////////////////////////////////////////////
 155          void seri_int (void) interrupt 4 using 3
 156          {
 157   1              unsigned char i;
 158   1              if (RI)                 
 159   1              {
 160   2                      RI = 0;
 161   2                      b_norec = 1;
 162   2              }  
 163   1              if (TI)                 
 164   1              {       
 165   2                              TI = 0;
 166   2                      for (i=0; i<Sendnum; i++)
 167   2                      {    
 168   3                              TI   = 0;
 169   3                              SBUF = SendBuf[i];                
 170   3                              while (!TI);
 171   3                      } 
 172   2                              b_rs485 = 0;
 173   2                      TI = 0;
 174   2                              ES = 1; 
 175   2              }
 176   1      }
 177          
 178          /////////////////////////////////////////////////////////////////////
C51 COMPILER V8.02   MAIN                                                                  01/21/2008 15:09:35 PAGE 4   

 179          //用T2做延时子程序
 180          /////////////////////////////////////////////////////////////////////
 181          void DelayMs(unsigned int _MS)
 182          {
 183   1          RCAP2LH = RCAP2_1ms;
 184   1          T2LH    = RCAP2_1ms;
 185   1      
 186   1          ET2     = 0;                                           // Disable timer2 interrupt
 187   1          T2CON   = 0x04;                                        // 16-bit auto-reload, clear TF2, start timer
 188   1          TR2     = 1;
 189   1          while (_MS--)
 190   1          {   while (!TF2);TF2 = 0;  }
 191   1          TR2 = 0;
 192   1      }
 193          /*
 194          void Delay_50us(unsigned char _50us)
 195          {
 196              RCAP2LH = RCAP2_50us;
 197              T2LH    = RCAP2_50us;
 198          
 199              ET2     = 0;                                           // Disable timer2 interrupt
 200              T2CON   = 0x04;                                        // 16-bit auto-reload, clear TF2, start timer
 201              while (_50us--)
 202              {   while (!TF2);TF2 = 0;  }
 203              TR2 = 0;
 204          }
 205          */
 206          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    371    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4    ----
   IDATA SIZE       =     19    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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