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

📄 uart.lst

📁 PLC源代码
💻 LST
字号:
C51 COMPILER V8.16   UART                                                                  10/10/2009 14:43:32 PAGE 1   


C51 COMPILER V8.16, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uart.c LARGE WARNINGLEVEL(1) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "system.h"
   2          
   3          volatile unsigned char UartSendBuffer[OutLEN];                  //发送缓冲 
   4          volatile unsigned char UartReceiveBuffer[InLEN];                //接收数据缓冲 
   5          volatile unsigned char *outlast=UartSendBuffer;                 //最后由中断传输出去的字节位置 
   6          volatile unsigned char *putlast=UartSendBuffer;                 //最后放入发送缓冲区的字节位置 
   7          volatile unsigned char UartSendBufferemptyFlag=1;               //缓冲区数据发完标志   发完=1
   8          volatile unsigned char UartSendBufferHaveDataFlag=0;    //发送缓冲区非空标志   有=1 
   9          
  10          volatile unsigned char UartReceiveCounter=0;                    //接收计数器
  11          volatile unsigned char UartRxTimerStartFlag=0;                  //接收超时计数器启动标志
  12          volatile unsigned char UartWaitForCounter=0;                    //接收超时计数器
  13          volatile unsigned char UartDataReadyFlag=0;                             //接收完成标志
  14          
  15          //=======================================================================================================
  16          // 函数名称: UartInit
  17          //
  18          // 功能描述:串口初始化 
  19          //
  20          // 输 入:   void
  21          //          
  22          // 输 出:   void
  23          //         
  24          // 全局变量: UartReceiveCounter ; UartRxTimerStartFlag
  25          // 调用模块: 无
  26          //
  27          // 作 者:   卢明君
  28          // 日 期:   2009年9月15日
  29          // 备  注:  
  30          //-------------------------------------------------------------------------------------------------------
  31          // 修改人:
  32          // 日 期:
  33          // 备  注: 
  34          //-------------------------------------------------------------------------------------------------------
  35          //=======================================================================================================
  36          /*
  37          void UartInit(void)
  38          {
  39                  SCON  = 0x50;
  40                  //PCON |= 0x80;
  41                  //AUXR2|= 0x40;
  42                  //Timer1Init();
  43                  TR1=0;                          //停止定时器
  44          //      TCON=0x00;                      //定时器控制寄存器 注意:TCON只需操作一次
  45                  TMOD |= 0x20;           //定时器1
  46                  TL1 = -(SYSCLK/12/32/baud);//0xfa;      // -(SYSCLK/12/32/baud);        //注意波特率加倍位
  47                  TH1 = TL1;
  48                  TR1=1;                          //启动定时器1
  49          //      ET1=1;                          //打开定时器1中断
  50                  UartReceiveCounter=0;
  51                  UartRxTimerStartFlag=0;
  52          }
  53          */
  54          //=======================================================================================================
  55          // 函数名称: UartSendchar
C51 COMPILER V8.16   UART                                                                  10/10/2009 14:43:32 PAGE 2   

  56          //
  57          // 功能描述:放入一个字节到发送缓冲区 
  58          //
  59          // 输 入:   unsigned char ucdata
  60          //          
  61          // 输 出:   void
  62          //         
  63          // 全局变量: outlast ; putlast ; UartSendBuffer[] ; UartSendBufferHaveDataFlag ; UartSendBufferemptyFlag
  64          // 调用模块: 无
  65          //
  66          // 作 者:   卢明君
  67          // 日 期:   2009年9月15日
  68          // 备  注:  
  69          //-------------------------------------------------------------------------------------------------------
  70          // 修改人:
  71          // 日 期:
  72          // 备  注: 
  73          //-------------------------------------------------------------------------------------------------------
  74          //=======================================================================================================
  75          void UartSendchar(unsigned char ucdata)
  76          { 
  77   1              ES=0;                                                   // 暂停串行中断,以免数据比较时出错 
  78   1              while((((outlast-putlast)==2)&&(outlast > putlast ))||((outlast < putlast)&&(OutLEN-(putlast-outlast)==2)
             -))
  79   1          { 
  80   2                      ES=1;
  81   2                      ucdata++;
  82   2                      ucdata--;
  83   2                      ES=0;
  84   2          } 
  85   1          *putlast=ucdata;                                            // 放字节进入缓冲区 
  86   1          putlast++;                                                  // 发送缓冲区指针加1 
  87   1          if (putlast==UartSendBuffer+OutLEN) putlast=UartSendBuffer;         // 指针到了顶部换到底部 
  88   1          UartSendBufferHaveDataFlag=1; 
  89   1          if (UartSendBufferemptyFlag)                        // 缓冲区无数据 
  90   1          {
  91   2              UartSendBufferemptyFlag =0; 
  92   2              SBUF=*outlast;                                          // 未发送完继续发送 
  93   2              outlast++;                                              // 最后传出去的字节位置加1 
  94   2              if (outlast==UartSendBuffer+OutLEN)outlast=UartSendBuffer;      // 地址到顶部回到底部 
  95   2              if (putlast==outlast)UartSendBufferHaveDataFlag=0;                      // 数据发送完置发送缓冲区空标志 
  96   2          }                                                                           // 缓冲区开始为空,置为有,启动发送 
  97   1              ES=1;
  98   1      } 
  99          //=======================================================================================================
 100          // 函数名称: UartSendString
 101          //
 102          // 功能描述:发送字符串
 103          //
 104          // 输 入:   unsigned char *str
 105          //          
 106          // 输 出:   void
 107          //         
 108          // 全局变量: 
 109          // 调用模块: UartSendchar
 110          //
 111          // 作 者:   卢明君
 112          // 日 期:   2009年9月15日
 113          // 备  注:  
 114          //-------------------------------------------------------------------------------------------------------
 115          // 修改人:
 116          // 日 期:
C51 COMPILER V8.16   UART                                                                  10/10/2009 14:43:32 PAGE 3   

 117          // 备  注: 
 118          //-------------------------------------------------------------------------------------------------------
 119          //=======================================================================================================
 120          void UartSendString(unsigned char *str)
 121          { 
 122   1              while(*str)                                                             // 遇到停止符0结束 
 123   1              {
 124   2                      UartSendchar(*str++);
 125   2                      //while(UartSendBufferHaveDataFlag);
 126   2              }
 127   1      }
 128          //=======================================================================================================
 129          // 函数名称: UartSendByte
 130          //
 131          // 功能描述:发送一串数据
 132          //
 133          // 输 入:   unsigned char *Startaddr,unsigned char SendByte
 134          //          
 135          // 输 出:   void
 136          //         
 137          // 全局变量: 
 138          // 调用模块: UartSendchar
 139          //
 140          // 作 者:   卢明君
 141          // 日 期:   2009年9月15日
 142          // 备  注:  
 143          //-------------------------------------------------------------------------------------------------------
 144          // 修改人:
 145          // 日 期:
 146          // 备  注: 
 147          //-------------------------------------------------------------------------------------------------------
 148          //=======================================================================================================
 149          void UartSendByte(unsigned char *Startaddr,unsigned char SendByte)
 150          {   
 151   1              while(SendByte--)
 152   1              {
 153   2                      UartSendchar(*Startaddr++); 
 154   2              }
 155   1      }
 156          
 157          void Uart(void) interrupt 4 using 2
 158          {
 159   1              if(TI)
 160   1              {
 161   2                      TI=0; 
 162   2              if (UartSendBufferHaveDataFlag) 
 163   2              {
 164   3                      SBUF=*outlast;                                                                                          // 未发送完继续发送 
 165   3                      outlast++;                                                                                                      // 最后传出去的字节位置加1 
 166   3                      if (outlast==UartSendBuffer+OutLEN)outlast=UartSendBuffer;      // 地址到顶部回到底部 
 167   3                      if (putlast==outlast)UartSendBufferHaveDataFlag=0;                      // 数据发送完置发送缓冲区空标志 
 168   3              } 
 169   2              else UartSendBufferemptyFlag =1; 
 170   2              }
 171   1              if(RI) 
 172   1              {
 173   2                      RI = 0;
 174   2                      //==========================================================
 175   2                      //      若有必要 有待于加入 偶校验算法 .数据位的bit7位为校验位
 176   2                      //==========================================================
 177   2                      UartReceiveBuffer[UartReceiveCounter++]=SBUF&0x7f;
 178   2                      UartRxTimerStartFlag=1;                         // 启动超时计数器
C51 COMPILER V8.16   UART                                                                  10/10/2009 14:43:32 PAGE 4   

 179   2                  UartWaitForCounter=0;                               // 清超时计数器 // 10ms
 180   2                      if (UartReceiveCounter>=InLEN)
 181   2                      {
 182   3                              UartDataReadyFlag=1;
 183   3                              //UartReceiveCounter=0;
 184   3                              REN=0;
 185   3                      }
 186   2              }
 187   1      }
 188          
 189          


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