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

📄 com645.lst

📁 51单片机用串口接收645规约。已经调试好 有详细的说明
💻 LST
字号:
C51 COMPILER V8.05a   COM645                                                               04/03/2009 09:40:36 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE COM645
OBJECT MODULE PLACED IN com645.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe com645.c DB OE SMALL ROM(LARGE)

line level    source

   1          #include<reg52.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          
   5          uchar ii,flagover,flag682,flag681,flaglen,flagdata,flagadd;
   6          uchar a,czm,len,temp,flagb;
   7          uint comsjR[50];
   8           void init()
   9          {
  10   1              TMOD=0x20;//设定定时器1工作方式2
  11   1              TH1=0xf3;
  12   1              //TL1=0xf3;     //设定波特率为4800,晶振为24MHZ
  13   1              TR1=1;//启动定时器1
  14   1      
  15   1              SM0=0;//设定串口工作方式1/
  16   1              SM1=1;//同上
  17   1              REN=1;//允许串口接收
  18   1              EA=1;//开总中断
  19   1              ES=1;//开串口中断
  20   1      
  21   1      }
  22          
  23          void delay(uint z)                              //延时函数
  24          {
  25   1              uint x,y;
  26   1              for(x=z;x>0;x--)
  27   1      
  28   1              for(y=1;y>0;y--);
  29   1      }
  30          
  31          void comT()
  32          {
  33   1      uchar comta;  //
  34   1      
  35   1              for(comta=0;comta<ii;comta++)
  36   1                      {
  37   2                      ES=0;
  38   2                      SBUF=comsjR[comta];
  39   2                      comsjR[comta]=0;   //接收区数组标识重新清0,用于下次数据帧接收
  40   2                      while(!TI);
  41   2                      TI=0;
  42   2                      ES=1;
  43   2                      }
  44   1      
  45   1      }
  46          
  47          
  48          void main()
  49          {
  50   1      init();
  51   1              while(1)
  52   1              {
  53   2              if(0);
  54   2              }
  55   1      }
C51 COMPILER V8.05a   COM645                                                               04/03/2009 09:40:36 PAGE 2   

  56          
  57          void ser() interrupt 4
  58          {
  59   1      ES=0;                                           //停止串口中断接收
  60   1      RI=0;                                           //接收完之后RI必须软件清0
  61   1              temp=SBUF;
  62   1              if(temp==0x68)                           //判断是否接收到帧头
  63   1              {
  64   2                      if(!flag681)
  65   2                      {
  66   3                       comsjR[ii]=temp;
  67   3                       flagb=1;
  68   3                       ii++;
  69   3                       }
  70   2              }
  71   1              
  72   1              if(flag681 && (!flag682)  )             //判断是否接收到第2个68
  73   1              {
  74   2              comsjR[ii]=temp;
  75   2              if((ii==7) && (temp==0x68))   
  76   2                      {
  77   3                      flagb=2;
  78   3                      a=0;
  79   3                      }
  80   2              ii++;   
  81   2              }
  82   1              if(flag681 && flag682 && !flaglen )     //接收第2个68后的两个字符,并提取数据区的长度
  83   1              {
  84   2                      comsjR[ii]=temp;
  85   2                      ii++;
  86   2                      if(ii==10)
  87   2                              {
  88   3                              flagb=3;
  89   3                              czm=comsjR[ii-2];
  90   3                              len=comsjR[ii-1];
  91   3                              a=0;
  92   3                              }
  93   2              }
  94   1             
  95   1             if(flag681 && flag682 && flaglen && !flagdata)     //接收数据区
  96   1                      {
  97   2                      comsjR[ii]=temp;
  98   2                      ii++;
  99   2                      a++;
 100   2                      if(a==len) 
 101   2                      {
 102   3                      flagb=4;
 103   3                      a=0;
 104   3                      }
 105   2              }
 106   1      
 107   1              if(flag681 && flag682 && flaglen && flagdata && !flagover)   //接收检验和和帧尾。并将缓冲区标识ii清0
 108   1                      {
 109   2      
 110   2                      comsjR[ii]=temp;
 111   2                      ii++;
 112   2                              if(0x16==comsjR[11+len])
 113   2                              {
 114   3                              flagb=5;
 115   3                              //ii=0;
 116   3                              }
 117   2      
C51 COMPILER V8.05a   COM645                                                               04/03/2009 09:40:36 PAGE 3   

 118   2              }
 119   1      switch(flagb)                                   //判断FLAGEB是为了防止flag681=1后执行下面的IF语句,后面的
             -同理。
 120   1              {
 121   2                      case 1: flag681 = 1; break;
 122   2                      case 2: flag682 = 1; break;
 123   2                      case 3: flaglen = 1; break;
 124   2                      case 4: flagdata = 1; break;
 125   2                      case 5: 
 126   2                              flagover = 0; 
 127   2                              flag681=0;
 128   2                              flag682 =0;
 129   2                              flaglen =0; 
 130   2                              flagdata =0;
 131   2                              comT();
 132   2                              ii=0;       //接收区数组标识II重新清0,用于下次数据帧接收
 133   2                      ///default:
 134   2                      ///a=1;
 135   2              }
 136   1      
 137   1      ES=1;                                           //打开串口中断接收
 138   1      } 
 139          
 140          
 141          
 142          
 143          
 144          
 145          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    418    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =    112    ----
   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 + -