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

📄 main.lst

📁 AT89C51串行口通信设计C程序_定长协议
💻 LST
字号:
C51 COMPILER V7.04   MAIN                                                                  12/25/2007 13:24:01 PAGE 1   


C51 COMPILER V7.04, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          // Remote Host Control program
   2          // 2007.8.1 by Ericosn
   3          
   4          #include <REG51.h>
   5          #define uchar unsigned char
   6          #define uint  unsigned int
   7          #define DevAddr 0x00                    //1号设备为0x00,2号设备为0x01
   8          
   9          uchar idata Buffer[6];
  10          uint  idata Timer[16];
  11          uint  PortFlag;
  12          uchar rlength;
  13          uchar PF;
  14          
  15          sbit  P15 = P1^5;
  16          sbit  P17 = P1^7;
  17          sbit  P07 = P0^7;
  18          bit   RcvFlag = 0;
  19          uchar HandonFlag = 0;
  20          uchar HandonTimer = 0;
  21          
  22          void init(void);
  23          void Delay(uint);
  24          void ProcMsg(void);
  25          
  26          void main(void)
  27          {
  28   1              uchar i;
  29   1      
  30   1              init();
  31   1              for(i=0;i<16;i++)
  32   1                      Timer[i] = 0;
  33   1              while(1){
  34   2                if(RcvFlag==1){
  35   3                       ProcMsg();
  36   3                       RcvFlag = 0;
  37   3                       ES = 1;
  38   3                }
  39   2                if (HandonFlag==1){
  40   3                       HandonFlag = 2;
  41   3                       P0 = 0x00;
  42   3                       P2 = 0x00;
  43   3                       Delay(100);
  44   3                       P0 = 0xFF;
  45   3                       P2 = 0xFF;
  46   3                }
  47   2              }
  48   1      }
  49          
  50          ///////////////////////////////////////////////////////////////
  51          void init(void)
  52          {
  53   1              rlength = 0;
  54   1              PF = 0;
  55   1              RcvFlag = 0;
C51 COMPILER V7.04   MAIN                                                                  12/25/2007 13:24:01 PAGE 2   

  56   1              PortFlag = 0;
  57   1      
  58   1              P0 = 0xFF;
  59   1              P2 = 0xFF;
  60   1              TMOD = 0x21;
  61   1              TH1 = 0xFD;
  62   1              TL1 = 0xFD;
  63   1              TH0 = 0xDC;
  64   1              TL0 = 0x00;                   
  65   1              SCON = 0x50;
  66   1              IE |= 0x92;
  67   1              IP |= 0x10;
  68   1              TR0 = 1;
  69   1              TR1 = 1;
  70   1              P17 = 0;
  71   1      }
  72          
  73          ///////////////////////////////////////////////////////////////
  74          void ProcMsg(void)
  75          {
  76   1              uchar i,temp;
  77   1              uint  j;
  78   1              uchar comid;
  79   1              uchar TNum1 = Buffer[2];
  80   1              uchar TNum2 = Buffer[3];
  81   1              
  82   1              for(i=0,temp=0;i<8;i++)
  83   1                temp += (((TNum2>>i)&0x01)<<(7-i));
  84   1              TNum2 = temp;
  85   1              TNum1=(uchar)((~PortFlag)&TNum1);                  //Mask the inefficent command
  86   1              TNum2=(uchar)(((~PortFlag)>>8)&TNum2);             //Mask the inefficent command
  87   1              comid = ((Buffer[1]<<2)>>6);
  88   1              switch(comid){
  89   2                 case 1:
  90   2                              P0 = ~TNum1;
  91   2                              P2 = ~TNum2;
  92   2                              Delay(100);
  93   2                              P0 = 0xFF;
  94   2                              P2 = 0xFF;
  95   2                              break;
  96   2                 case 2:   
  97   2                              //the shutdown processing code
  98   2                              break;
  99   2                 default: 
 100   2                      break;
 101   2              }
 102   1              j = 1;
 103   1              for(i=0;i<8;i++){
 104   2                 if(((TNum1>>i)&0x01)==1){
 105   3                         PortFlag |= (j<<i);
 106   3                         Timer[i] = 500;
 107   3                 }
 108   2              }
 109   1              for(i=0;i<8;i++){
 110   2                 if(((TNum2>>i)&0x01)==1){
 111   3                     i += 8;
 112   3                         PortFlag |= (j<<i);
 113   3                         Timer[i] = 500;
 114   3                         i -= 8;
 115   3                 }
 116   2              }
 117   1      }
C51 COMPILER V7.04   MAIN                                                                  12/25/2007 13:24:01 PAGE 3   

 118          
 119          ///////////////////////////////////////////////////////////////
 120          //delay 1ms procedure
 121          void Delay(uint n)
 122          {   
 123   1              uchar i;
 124   1              while(n--){
 125   2                 for(i=0;i<99;i++)
 126   2                 {;}
 127   2              }
 128   1      }
 129          
 130          ///////////////////////////////////////////////////////////////
 131          //Timer0 10ms interrupt 
 132          void timer0(void) interrupt 1 using 1
 133          {
 134   1              bit Sample;
 135   1              uchar i;
 136   1              uint  j = 1;
 137   1              
 138   1              TH0 = 0xDC;
 139   1              TL0 = 0x00;
 140   1      
 141   1              if(HandonFlag==0)
 142   1              {
 143   2                      Sample = P15;
 144   2                      if(Sample==0)
 145   2                      {
 146   3                              HandonTimer++;
 147   3                              if(HandonTimer>10)
 148   3                              {
 149   4                                      HandonFlag = 1;
 150   4                                      HandonTimer = 0;
 151   4                              }               
 152   3                      }
 153   2                      else  HandonTimer=0;
 154   2              }
 155   1              if(HandonFlag==2)
 156   1              {
 157   2                      Sample = P15;
 158   2                      if(Sample==1)   
 159   2                      {
 160   3                              HandonTimer++;
 161   3                              if(HandonTimer>10)
 162   3                              {
 163   4                                      HandonFlag = 0;
 164   4                                      HandonTimer = 0;
 165   4                                      for(i=0;i<16;i++)
 166   4                                              Timer[i] = 0;
 167   4                                      PortFlag = 0;
 168   4                              }
 169   3                      }
 170   2                      else  HandonTimer=0;
 171   2              }
 172   1              for(i=0;i<16;i++){
 173   2                 if(((PortFlag>>i)&0x01)==1){
 174   3                        Timer[i]--;
 175   3                        if(Timer[i]==0)   PortFlag&=~(j<<i);
 176   3                 }
 177   2              }
 178   1      }
 179          
C51 COMPILER V7.04   MAIN                                                                  12/25/2007 13:24:01 PAGE 4   

 180          ///////////////////////////////////////////////////////////////
 181          //Serial port receive interrupt
 182          void serial(void) interrupt 4 using 2
 183          {
 184   1              uchar temp;
 185   1              if(RI&(!RcvFlag)){
 186   2                      temp = SBUF;
 187   2                      RI = 0;
 188   2                      if(rlength == 0)
 189   2                      {
 190   3                              if(temp == 0xA1)
 191   3                              {
 192   4                                      Buffer[rlength] = temp;
 193   4                                      rlength ++;
 194   4                                      PF = temp; 
 195   4                              }
 196   3                              else
 197   3                              {
 198   4                                      rlength = 0;
 199   4                              }
 200   3                      }
 201   2                      else if(rlength == 5)
 202   2                      {
 203   3                              Buffer[rlength] = temp;
 204   3                              if(((PF^temp)==0)&&(Buffer[4]==0xAF)&&((Buffer[1]&0x0F)==DevAddr))
 205   3                                      {
 206   4                                              RcvFlag = 1;
 207   4                                              ES = 0;
 208   4                                      }
 209   3                              rlength = 0;
 210   3                              PF = 0;
 211   3                      }
 212   2                      else
 213   2                      {
 214   3                              Buffer[rlength] = temp;
 215   3                              PF += temp;
 216   3                              rlength ++;
 217   3                      }
 218   2              }
 219   1          if(TI){
 220   2                      TI=0;
 221   2                      //the Tx interrupt processing code
 222   2              }
 223   1      }
 224          
 225          //END
 226                  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    645    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       3
   IDATA SIZE       =     38    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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