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

📄 main.lst

📁 keil C 串口通讯源程序
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  06/06/2006 16:03:20 PAGE 1   


C51 COMPILER V7.50, 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 <IO_define.h>
   3          #include <intrins.h>
   4          #define  uchar  unsigned char
   5          #define  uint   unsigned int
   6          #define  max_len 0x10//最大长度
   7          //void delay10ms(uint count);
   8          uchar send_buf[max_len]={0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0a};
             -//发送缓冲区
   9          uchar recv_buf[max_len]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
             -//接收缓冲区
  10          
  11          uchar count_s;//发送计数
  12          uchar count_r;//接收计数
  13          bit flag1;
  14          bit sflag;
  15          send(void);
  16          getout();
  17          receive();
  18          restio();
  19          extern write_bit(uchar line,bit value);
  20          extern control(void);
  21          outio(void);
  22          //主程序..........................................................................................
  23          void main()
  24          {
  25   1      P1=0;//取消片选
  26   1      P0=0xff;
  27   1      count_s=0;
  28   1      count_r=0;
  29   1      //系统初始化 
  30   1      TMOD= 0x21;// 定时器0工作模式1, 16位定时方式// 定时器1工作于8位自动重载模式, 用于产生波特率    
  31   1      TCON= 0x05;
  32   1      TH0 = 0xfd;     
  33   1      TL0 = 0xfe;
  34   1      EA  = 1;
  35   1      ET0 = 0;
  36   1      ET1 = 0;
  37   1      
  38   1      IP  = 0x10; 
  39   1      TR0 = 0;
  40   1      //串口设置
  41   1      TH1=250;
  42   1      TL1=250;
  43   1      TR1=1;
  44   1      PCON=0X80;//SMOD=1,速率加倍
  45   1      SCON=0X50;//工作方式1,9600
  46   1              
  47   1      ES=1;//开串口中断
  48   1      
  49   1      while(1)//主循环................................................................................
  50   1        {
  51   2              outio();
  52   2      //      control();//调用控制子程序
  53   2                      
C51 COMPILER V7.50   MAIN                                                                  06/06/2006 16:03:20 PAGE 2   

  54   2              sflag=0;//一秒一次标志位清零 
  55   2              if(fsec==0)flag1=1;//0.5秒执行一次程序  
  56   2              if((fsec==1)&&(flag1==1))//一秒钟执行一次程序  
  57   2              {
  58   3              flag1=0;
  59   3              sflag=1;                
  60   3              }
  61   2                      if(sflag)
  62   2                      {
  63   3                      ;
  64   3                      }
  65   2        }
  66   1      }//主程序结束...................................................................................
  67          
  68          //接收数据处理..................................................................................
  69          receive()
  70          {
  71   1      uchar i,j;
  72   1      uint  lrc;
  73   1              if((recv_buf[0]==0x3a)&(recv_buf[1]==0x01))
  74   1              {
  75   2                      for(i=1;i<=11;i++)
  76   2                      {
  77   3                      lrc+=recv_buf[i];
  78   3                      }               
  79   2                      i=lrc;
  80   2                      lrc=_irol_(lrc,8);
  81   2                      j=lrc;
  82   2                      lrc=0;
  83   2                              if((i==recv_buf[12])&(j==recv_buf[13]))
  84   2                              {
  85   3                              send_buf[1]=0x02;
  86   3                              send_buf[2]=0x01;
  87   3                              send_buf[12]=0x03;
  88   3                              send();
  89   3                              getout();
  90   3                              }
  91   2                              else
  92   2                              {       
  93   3                              send_buf[1]=0x02;
  94   3                              send_buf[2]=0x02;
  95   3                              send_buf[12]=0x04;
  96   3                              send_buf[13]=0x00;
  97   3                              send(); 
  98   3                              }
  99   2              }
 100   1          else
 101   1          {   
 102   2          send_buf[1]=0x02;
 103   2              send_buf[2]=0x02;
 104   2              send_buf[12]=0x04;
 105   2              send_buf[13]=0x00;
 106   2              send(); 
 107   2              }
 108   1      
 109   1      }
 110          //将收到的数据送io口
 111          getout()
 112          {
 113   1      uchar i;
 114   1      restio();
 115   1      outio();
C51 COMPILER V7.50   MAIN                                                                  06/06/2006 16:03:20 PAGE 3   

 116   1              for(i=2;i<=11;i++)
 117   1              {
 118   2              write_bit(recv_buf[i],0);
 119   2              }
 120   1      }
 121          send()
 122          {
 123   1      count_r=0;
 124   1      count_s=0;
 125   1      SBUF=send_buf[count_s];//发送第一个数据
 126   1      count_s++;
 127   1      }
 128          restio()
 129          {
 130   1      qw1=0xff;
 131   1      qw2=0xff;
 132   1      qw3=0xff;
 133   1      qw4=0xff;
 134   1      qw5=0xff;
 135   1      qw6=0xff;
 136   1      qw7=0xff;
 137   1      qw8=0xff;
 138   1      qw9=0xff;
 139   1      }
 140          //串口中断处理...................................................................................
 141          void serial_int() interrupt 4 using 2
 142          {
 143   1              if(TI)//发送中断
 144   1              {       
 145   2                      if(count_s<max_len)
 146   2                      {
 147   3                      TI=0;
 148   3                      SBUF=send_buf[count_s];
 149   3                      count_s++;
 150   3                      }
 151   2                      else
 152   2                      {
 153   3                      count_s=0;
 154   3                      TI=0;
 155   3                      }
 156   2              }
 157   1              if(RI)//接收中断
 158   1              {
 159   2                      if(count_r<(max_len-1))
 160   2                      {
 161   3                      recv_buf[count_r]=SBUF;
 162   3                      count_r++;
 163   3                      RI=0;
 164   3                      }
 165   2                      else
 166   2                      {
 167   3                      RI=0;
 168   3                      recv_buf[count_r]=SBUF;
 169   3                      receive(); 
 170   3                      return;
 171   3                      }
 172   2              }
 173   1      }
 174          //T0中断子程序:.............................................................................
 175          void timer0() interrupt 1 using 1
 176          {
 177   1      //T0 reroad
C51 COMPILER V7.50   MAIN                                                                  06/06/2006 16:03:20 PAGE 4   

 178   1              TH0 = 252;              
 179   1              TL0 = 17;
 180   1              
 181   1      //产生秒信号  
 182   1        if(++msec >= 449)
 183   1        { 
 184   2        msec=0;
 185   2          if (++fsec >= 2)
 186   2              {
 187   3              fsec=0;
 188   3                  if (++sec >= 60)
 189   3                      {
 190   4                      sec=0;
 191   4                              if(++min >= 60)
 192   4                              {
 193   5                              min=0;
 194   5                                      if(++hour >= 24)
 195   5                                      {
 196   6                                      hour=0;
 197   6                                      }
 198   5                              }
 199   4                      }
 200   3              }
 201   2        }
 202   1      }
 203          /*void delay10ms(uint count)
 204          {
 205          uint i,j;
 206          for(i=0;i<count;i++)
 207                  {
 208                  for(j=0;j<10000;j++);
 209                  }
 210          }*/
 211          
 212          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    453    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     49       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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