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

📄 uart.lst

📁 单片机驱动32X64点阵资料
💻 LST
字号:
C51 COMPILER V8.08   UART                                                                  11/20/2011 00:11:38 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: D:\Program Files\keil_51\C51\BIN\C51.EXE UART.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************************************************
   2           ** 功能描述: 串口中断,
   3           ** 日  期:
   4          ********************************************************************************************************/
   5          #include"stc89c51rc.h"
   6          #include " uart.h"        
   7          #include <intrins.h>
   8          
   9          int  rCOMM_TOTAL1 ;             //有效接收数据个数
  10          
  11          uchar ucUart_buffer[BUFFER_NUM][16];
  12          xdata  uchar ucUart_buffer_data[16]; 
  13          uchar   ucDatabuf[3]; //接收缓冲
  14          idata uchar ucUart_rd = 0;
  15          uchar ucUart_wr = 0;
  16          uchar ucUart_buffer_pv = 0;
  17          uchar   ucState=0;              //接收状态  
  18          uchar   ucReceDataNum=0;         //有效接收个数
  19          uchar  ucReceVeryfy;     //校验累加和变量
  20          uchar   ucSendVeryfy;
  21          uchar   ucReceData[16]; //read data
  22          uchar   ucSendData[16]; //send data
  23          
  24          uchar   ucSendDataNum=0;         //已发送字节数
  25          
  26          //uchar   STATE=0;               //接收状态 
  27          bit     uart_sBIT;                       //发送完成标志
  28          bit     uart_rBIT;                       //接收标志
  29           
  30          //-------------------------------------------------------
  31          //-------------------串口,跟6410通信--------------------
  32          
  33          void MAIN_RS_INT(void) interrupt 4
  34          {
  35   1          uchar DataTemp;
  36   1          if(RI)  // 接收
  37   1          {
  38   2              RI = 0;
  39   2                      if( ucUart_buffer_pv >= BUFFER_NUM ) return;
  40   2              DataTemp = SBUF;
  41   2                      switch(ucState)
  42   2              {   
  43   3                                                 
  44   3                  case ucState_START:  //开始位 0
  45   3                  {    
  46   4                      if(START == DataTemp)
  47   4                      {
  48   5                           
  49   5                                              ucReceDataNum = 0;
  50   5                                              ucReceVeryfy = 0;
  51   5                          ucState = ucState_DATA1;
  52   5                          
  53   5                       }
  54   4                       break;
  55   4                   }
C51 COMPILER V8.08   UART                                                                  11/20/2011 00:11:38 PAGE 2   

  56   3      
  57   3                  case ucState_DATA1:  //数据长度位
  58   3                  {
  59   4                     ucDatabuf[ucReceDataNum++] = DataTemp; 
  60   4                                       
  61   4                      if(ucReceDataNum == 3)             
  62   4                      {
  63   5                          if(ucDatabuf[2] == ucReceVeryfy)
  64   5                                              {
  65   6                                                      
  66   6                                                      ucState = ucState_DATA2; 
  67   6                                                      ucReceVeryfy = 0;
  68   6                                                      ucReceDataNum = 0;
  69   6                                                      rCOMM_TOTAL1 = ucDatabuf[ 0 ];
  70   6                                  rCOMM_TOTAL1 = (rCOMM_TOTAL1<<8) + ucDatabuf[1] ;
  71   6                              
  72   6                                              }
  73   5                                              else
  74   5                                              {       
  75   6                                                  ucState = ucState_START;
  76   6                                  ucReceDataNum = 0;
  77   6                                  ucReceVeryfy =0;
  78   6                          }
  79   5                      }
  80   4                                      else 
  81   4                      {
  82   5                          ucReceVeryfy += DataTemp;          
  83   5                      }
  84   4                      break;
  85   4                      
  86   4                  }
  87   3                          case ucState_DATA2:  //数据位 2
  88   3                  {
  89   4                                      
  90   4                          ucUart_buffer_data[ucReceDataNum++] = DataTemp;
  91   4                                      
  92   4                          if( ucReceDataNum  ==  rCOMM_TOTAL1+1 )             
  93   4                          {           
  94   5                              if( ucUart_buffer_data[ ucDatabuf[2] ] ==  ucReceVeryfy )        //判断校检和      
  95   5                                              {    
  96   6                                  ucState = ucState_END;
  97   6                                                                
  98   6                              }
  99   5                              else
 100   5                                                      {
 101   6                                                              ucState = ucState_START;
 102   6                                                              ucReceDataNum = 0;
 103   6                                                              ucReceVeryfy =0;
 104   6                                                      }  
 105   5                          } 
 106   4                          else  if( ucReceDataNum > rCOMM_TOTAL1+1 )             
 107   4                          {
 108   5                               ucState = ucState_END; 
 109   5                          }
 110   4                          else 
 111   4                          {
 112   5                               ucReceVeryfy += DataTemp;  //计算校检和 
 113   5                          }
 114   4                     
 115   4                     
 116   4                      break;
 117   4                  } 
C51 COMPILER V8.08   UART                                                                  11/20/2011 00:11:38 PAGE 3   

 118   3                              case ucState_END:    //结束位 3
 119   3                  {   
 120   4                      if(END == DataTemp)
 121   4                                      {
 122   5                          uchar i;
 123   5                                        
 124   5                              for( i=0; i< rCOMM_TOTAL1; i++ )  
 125   5                              {  
 126   6                                                           ucUart_buffer[ucUart_wr][i] = ucUart_buffer_data[i];    
 127   6                              }
 128   5                                              ucUart_wr ++;
 129   5                                                      if( ucUart_wr >= BUFFER_NUM ) ucUart_wr = 0;
 130   5                                                      ucUart_buffer_pv ++;    
 131   5                      
 132   5                                      }
 133   4                      ucState = ucState_START;
 134   4                      break;
 135   4                  }
 136   3      
 137   3                  default:    
 138   3                  {
 139   4                      ucState  = ucState_START;
 140   4                      break;
 141   4                  }
 142   3              }
 143   2      
 144   2          }
 145   1          if(TI)
 146   1          {
 147   2              TI = 0; 
 148   2              ucSendDataNum++;
 149   2                       if(ucSendDataNum < ucSendData[3]+6)
 150   2                  {
 151   3                      SBUF = ucSendData[ucSendDataNum];
 152   3                  }
 153   2      
 154   2              else
 155   2              {
 156   3                  uart_sBIT = 1;
 157   3              }
 158   2          }
 159   1      }
 160          /*********************************************************************************************************
 161           ** 功能描述: 
 162           ** 日   期: 
 163          *********************************************************************************************************/
 164          
 165          bit send_dis_data(uchar Data1,uchar Data2,uchar *SendDeatBuf3)     //转发可变协议
 166          {
 167   1          uchar i;
 168   1              uint Data3;
 169   1              
 170   1              ucSendData[0]=START;
 171   1              ucSendData[1]=Data1;
 172   1              ucSendData[2]=Data2;
 173   1              ucSendData[3]= ucSendData[1] + ucSendData[2]; 
 174   1               
 175   1              Data3 = Data1;
 176   1              Data3 = (Data3<<8) + Data2;
 177   1              
 178   1              ucSendVeryfy = 0;
 179   1              for( i=0;i< Data3 ;i++)  
C51 COMPILER V8.08   UART                                                                  11/20/2011 00:11:38 PAGE 4   

 180   1              {  
 181   2                  ucSendVeryfy += *(SendDeatBuf3);
 182   2                  ucSendData[4 + i] = *(SendDeatBuf3++);
 183   2              }        
 184   1              ucSendData[ 4 + Data3 ]= ucSendVeryfy ;
 185   1              ucSendData[ 5 + Data3 ]= END;
 186   1              uart_sBIT = 0;
 187   1              ucSendDataNum = 0;
 188   1              EX1 = 0;
 189   1              SBUF = ucSendData[0];
 190   1              while(!uart_sBIT);
 191   1          EX1 = 1;
 192   1              return 0;
 193   1      
 194   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    490    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     16    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     60       6
   IDATA SIZE       =      1    ----
   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 + -