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

📄 main.lst

📁 可编程光纤延迟线的开发系统!对仪器的开发很有帮助!
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02b   MAIN                                                                 01/18/2005 21:41:19 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE main.c OMF2 BROWSE DEBUG

stmt level    source

   1          /****************************************/
   2          /* Copyright (c) 2004, 通信工程学院     */
   3          /* All rights reserved.                 */
   4          /****************************************/
   5          
   6          #include "head.h"
   7          
   8          void ClearR_bufR_data();                // 清除r_buf和r_data函数
   9          void RecOverDeal();                         // 串口中断处理函数
  10          void TimeOverDeal();                    // 超时处理函数
  11          void CheckErrorDeal();              // 校验错误处理函数
  12          void RecRightDeal();                    // 接收正确处理函数
  13          
  14          xdata uchar Flag_Data = 0 ;                             //数据处理标志位
  15          xdata uchar FLag_StartRec = 0 ;                 //开始接受数据标志位
  16          xdata uchar Flag_RecOver = 0 ;                  //接收结束标志位
  17          xdata uchar Flag_TimeOver = 0 ;                 //接收超时标志位
  18          xdata uchar Flag_CheckError = 0 ;               //校验错误标志位
  19          xdata uchar Flag_CheckRight = 0 ;               //接收正确标志位
  20          
  21          xdata uchar gCount = 0 ;
  22          xdata uchar r_buf[11];                                  // 1开始字节"$",1长度字节LEN,
  23                                                                                      // 7字节数据,1校验和字节,
  24                                                                                  // 1 结束字节"*"
  25          xdata uchar r_data[7];
  26          xdata ulong  RecData = 0 ;
  27          
  28          xdata uchar TCount = 0 ;
  29          xdata uchar Time0Sel = 0 ;
  30          
  31          /* 定时器0中断服务子程序 */
  32          void timer() interrupt 1 using 2
  33          {       
  34   1              if (!Time0Sel) 
  35   1              {
  36   2                      if (!Flag_RecOver) 
  37   2                      {
  38   3                              Flag_TimeOver = 1;                      //超时100ms
  39   3                              Flag_CheckError = 0;
  40   3                              Flag_CheckRight = 0;
  41   3                      }
  42   2                      TH0 = -100000/256;
  43   2                      TL0 = -100000%256;
  44   2                      ET0 = 0;                                        
  45   2                      TR0 = 0;
  46   2              }
  47   1              else
  48   1              {
  49   2                      Time0Sel = 0;
  50   2                      P1_0 = 0;                               // 开关控制信号清零,形成脉冲
  51   2                      ET0 = 1;                                        
  52   2                      TR0 = 1;
  53   2              }
  54   1      }
  55          
C51 COMPILER V7.02b   MAIN                                                                 01/18/2005 21:41:19 PAGE 2   

  56          void main(void)
  57          {
  58   1              ClearR_bufR_data();
  59   1              P1_0 = 0;
  60   1              Time0Sel = 0;
  61   1              
  62   1              /* 11.0592MHz下,设置串行口2400波特率,工作方式1
  63   1                      8位数据位,1位停止位,无奇偶校验,*/
  64   1              TMOD = 0x21;
  65   1              SCON = 0xb8;
  66   1              PCON = 0x00;
  67   1              /* Timer1 定时器1 */
  68   1              TL1 = 0xf4;
  69   1              TH1 = 0xf4;     
  70   1              TR1=1;  
  71   1              
  72   1              /* Timer0 */
  73   1              PT0 = 1;
  74   1              TH0 = -100000/256;                                      //100ms
  75   1              TL0 = -100000%256;
  76   1                      
  77   1              IE = 0x90;
  78   1              
  79   1              while (1) 
  80   1              {
  81   2                      if (Flag_RecOver)
  82   2                      {
  83   3                              RecOverDeal();
  84   3                              Flag_RecOver = 0;                       
  85   3                      }
  86   2                      if (Flag_TimeOver)
  87   2                      {               
  88   3                              TimeOverDeal(); 
  89   3                              Flag_TimeOver = 0;
  90   3                              RI = 0;
  91   3                      }
  92   2                      if (Flag_CheckError)
  93   2                      {                       
  94   3                              CheckErrorDeal();       
  95   3                              Flag_CheckError = 0;
  96   3                              RI = 0;
  97   3                      }
  98   2                      if (Flag_CheckRight)
  99   2                      {                       
 100   3                              RecRightDeal(); 
 101   3                              Flag_CheckRight = 0;
 102   3                              RI = 0;                                         //打开接收中断
 103   3                      }               
 104   2              }
 105   1      }
 106          
 107          /* 串口中断服务子程序 */
 108          void serial ( ) interrupt 4 using 1 
 109          {
 110   1              /* 判断是否收到字符'$',其数值为0x24,置开始接收标志位*/
 111   1              if ((!FLag_StartRec) && (SBUF == 0x24))
 112   1              {
 113   2                      FLag_StartRec = 1;              
 114   2                      
 115   2                      /* 启动定时器0,计算超时*/      
 116   2                      TH0 = -100000/256;
 117   2                      TL0 = -100000%256;
C51 COMPILER V7.02b   MAIN                                                                 01/18/2005 21:41:19 PAGE 3   

 118   2                      ET0 = 1;                                        
 119   2                      TR0 = 1;
 120   2              }               
 121   1              if  ((FLag_StartRec) && (gCount <11))
 122   1              {
 123   2                      r_buf[gCount ] = SBUF;
 124   2                      gCount ++;              
 125   2              }
 126   1              /* 判断是否收到字符'*',其数值为0x2A,置接收完成标志位*/
 127   1              if ((r_buf[gCount -1] == 0x2A)||(gCount  == 11))
 128   1              {
 129   2                      r_buf[gCount -1] == 0x2A;
*** WARNING C275 IN LINE 129 OF MAIN.C: expression with possibly no effect
 130   2                      Flag_RecOver = 1;                       //一帧接收完毕  
 131   2                      gCount  = 0;            
 132   2                      FLag_StartRec = 0;
 133   2      
 134   2                      /* 关闭定时器0 */               
 135   2                      ET0 = 0;                                        
 136   2                      TR0 = 0;                
 137   2              }
 138   1              else
 139   1              {
 140   2                      RI = 0 ;                
 141   2              }       
 142   1      }
 143          
 144          void ClearR_bufR_data(void)
 145          {       
 146   1              uchar xdata k ;
 147   1              for (k=0;k++;k<11)
 148   1              {
 149   2                      r_buf[k] = 0;
 150   2              }
 151   1              for (k=0;k++;k<7)
 152   1              {
 153   2                      r_data[k] = 0;
 154   2              }
 155   1      }
 156          
 157          /* 接收完成处理函数*/
 158          void RecOverDeal(void)
 159          {
 160   1              uchar xdata j = 0;
 161   1              uchar xdata len = 0;
 162   1              uchar xdata CheckSum =0 ;
 163   1              len = r_buf[1];
 164   1              for ( j=0;j++;j<len)
 165   1              {
 166   2                      r_data[j] = r_buf[j+2];
 167   2                      CheckSum = CheckSum + r_data[j];
 168   2              }
 169   1              if (CheckSum == r_buf[len+2])
 170   1              {
 171   2                      Flag_CheckRight = 1;                            //接收正确
 172   2                      Flag_CheckError = 0;
 173   2                      Flag_TimeOver = 0;
 174   2      
 175   2                      RecData  =0;
 176   2                      for ( j=0;j++;j<r_data[1])
 177   2                      {
 178   3                              RecData =r_data[j] + RecData*10;
C51 COMPILER V7.02b   MAIN                                                                 01/18/2005 21:41:19 PAGE 4   

 179   3                      }                       
 180   2              }
 181   1              else
 182   1              {
 183   2                      Flag_CheckError = 1;                            //校验错误
 184   2                      Flag_CheckRight = 0;

⌨️ 快捷键说明

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