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

📄 uart0.lst

📁 C8051F120与串口、并口、D12、USB、LCD应用
💻 LST
字号:
C51 COMPILER V7.06   UART0                                                                 11/08/2006 19:37:34 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN uart0.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE uart0.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <C8051F120.h>
   2          #include <stdlib.h>
   3          #include <string.h>
   4          #include <uart0.h>
   5          
   6          #define MAXLEN 10
   7          
   8          
   9          u8 trdata[MAXLEN];                 //要接收/发送的字符所存放的缓冲区
  10          u8 txCounts = 0;                                           //已发送的字符个数   
  11          u8 lxCounts = 0;                     //剩余未发送的字节个数
  12          u8 len = 0;                          //要发送的数据的长度
  13          u8 rpointer = 0;                    //读指针位置,指向要读的位
  14          u8 wpointer = 0;                    //写指针位置,指向要写的位
  15          
  16          
  17          //将要发送的数据放到缓冲区中
  18          void SendBuf(u8 *tx)
  19          {
  20   1              u8 m = 0;
  21   1              u8 i;
  22   1              len = strlen(tx);
  23   1              while(m < len)
  24   1              {
  25   2                      i = 0;
  26   2                      lxCounts = len - m;
  27   2                      while ((m < len)&&(i < MAXLEN))
  28   2                      {
  29   3                              trdata[i] = *(tx + m);
  30   3                              i++;
  31   3                              m++;
  32   3                      }               
  33   2                      TI0 = 1;        
  34   2               }      
  35   1      }
  36          
  37          
  38          //发送单个字符
  39          void Send_Char(u8 txch)
  40          {       
  41   1              SBUF0 = txch;
  42   1              while (TI0 == 0);      //等待发送完毕
  43   1              TI0 = 0;               //软件清零
  44   1      }
  45          
  46          
  47          //发送字符串,调用Send_Char() len字符串长度
  48          void Send_String(u8 *str)
  49          {
  50   1              u8 temp;
  51   1              txCounts = 0;
  52   1              while ((txCounts < len)&&(txCounts < MAXLEN)&&(txCounts < lxCounts)) 
  53   1              {
  54   2                      temp = *(str + txCounts);
  55   2                      Send_Char(temp);
C51 COMPILER V7.06   UART0                                                                 11/08/2006 19:37:34 PAGE 2   

  56   2                      txCounts++;
  57   2              }
  58   1      }
  59          /*
  60          //--------------------------------------------------------------------------------------
  61          //监听串口是否收到数据,读写指针不相等的话,缓冲区里有数据
  62          u8 Listen(void)
  63          {
  64                  if (rpointer != wpointer) return 1;
  65          }
  66          
  67          
  68          //返回缓冲区中数据长度
  69          u8 SizeOfBuf(void)
  70          {
  71              return (wpointer - rpointer);
  72          }
  73          */
  74          
  75          //实现从循环数组中读取数据
  76          //实现原理:由rpointer追赶wpointer,两者相等后都进行求模
  77          //参数:'size'指要读取的数据的个数,receive[]指读出的数据所存放的地方
  78          /*u8 ReadBuf(u8 size, u8 receive[])
  79          {
  80                  u8 i = 0;
  81                  while ((i < size)&&(rpointer < wpointer))
  82                  {
  83                          receive[i] = trdata[rpointer % MAXLEN];
  84                          rpointer++;
  85                          i++;
  86                          if (rpointer == wpointer)
  87                      {
  88                              rpointer = rpointer % MAXLEN;
  89                                  wpointer = rpointer;
  90                          }
  91                  }
  92                  return i;
  93                  
  94          }*/
  95          
  96          //将从串口中读到的数据写到缓冲区中
  97          //实现原理:如果(wpointer - rpointer) < MAXLEN,就说明缓冲区中还有空间存放数据
  98          //返回'1'则说明写入一个数据,返回'0'则说明没有空间,写数据失败
  99          u8 WriteBuf(u8 rxch)
 100          {
 101   1          if ((wpointer - rpointer) < MAXLEN)
 102   1              {
 103   2                      trdata[wpointer % MAXLEN] = rxch;           //存入缓冲区
 104   2                      wpointer++;
 105   2                      return 1;
 106   2              } else  return 0;
 107   1      }
 108          
 109          void inter() interrupt 4
 110          {
 111   1              if (TI0)
 112   1              {
 113   2                      TI0 = 0;
 114   2              Send_String(trdata);
 115   2              }
 116   1              if (RI0)
 117   1              {
C51 COMPILER V7.06   UART0                                                                 11/08/2006 19:37:34 PAGE 3   

 118   2                      u8 rxch;
 119   2                      RI0 = 0;                           //软件清零
 120   2              rxch = SBUF0;                      //读缓冲
 121   2                      WriteBuf(rxch);
 122   2              }
 123   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    329    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     15       8
   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 + -