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

📄 serial.lst

📁 基于WINBOND单片机W78E516B的最小系统源代码.通过UART具有BOOTLOAD功能.开发环境为KEIL C51.
💻 LST
字号:
C51 COMPILER V6.23a  SERIAL                                                                07/14/2005 11:03:35 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN D:\Work\Mini\serial.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\c51.exe D:\Work\Mini\serial.c

stmt level    source

   1          #include "config.h"
   2          #include <stdio.h>
   3          #include "io.h"
   4          #include "global.h"
   5          #include "event.h"
   6          #include "78e516.h"
   7          
   8          
   9          U8 lrc;
  10          
  11          /*
  12          函数    设定波特率
  13                  波特率 = 震荡频率(18.432M)/(32*(65536-[RCAP2H,RCAP2L]))
  14          */
  15          void SetBaudRate(U8 baudrate)
  16          {
  17   1          U16 code baudtbl[] = {-60,-30,-15,-10,-5};
  18   1      
  19   1          THL2 = RCAP2 = baudtbl[baudrate];
  20   1      }
  21          
  22          /*
  23          函数    往串口发送一个字符
  24          输入    value   要发送的字符
  25          */
  26          void put_buf(U8 value)
  27          {
  28   1          // 等待缓冲区有空间
  29   1          while (((TxWrite + 1) & 0x0f) == TxRead)
  30   1          {
  31   2          }
  32   1          TxBuffer[TxWrite] = value;
  33   1          TxWrite = (TxWrite + 1) & 0x0f;
  34   1          lrc = lrc ^ value;
  35   1          if (TxEmpty == 1)
  36   1          {
  37   2              TxEmpty = 0;
  38   2              TI = 1;
  39   2          }
  40   1      //    TxEmpty = 0;
  41   1      //    SBUF = value;
  42   1      //    lrc = lrc ^ value;
  43   1      //    while(TxEmpty == 0);
  44   1      }
  45          
  46          /*
  47          函数    串口通讯的处理程序
  48          */
  49          void CheckSerial(void)
  50          {
  51   1          U8 i,checkl;
  52   1      
  53   1          if (RxBusy == 0) return;
  54   1          // 接收到通讯数据包
  55   1          if (RxCount == 0)
C51 COMPILER V6.23a  SERIAL                                                                07/14/2005 11:03:35 PAGE 2   

  56   1          {
  57   2              RxBusy = 0;
  58   2              return;
  59   2          }
  60   1          if (RxBuffer[0] == 3)
  61   1          {
  62   2              checkl = 0;
  63   2              for (i=0; i<RxCount; i++)
  64   2              {
  65   3                  checkl = checkl ^ RxBuffer[i];
  66   3              }
  67   2              if (checkl == 0)
  68   2              {
  69   3                  // 接收到正确的数据包
  70   3                  switch(RxBuffer[1])
  71   3                  {
  72   4                      case '0':       // 设定波特率
  73   4                          put_buf(2);
  74   4                          put_buf(0);
  75   4                          SetBaudRate(RxBuffer[2]);
  76   4                          break;
  77   4                      case '4':       // 通讯测试
  78   4                          checkl = 0x01;
  79   4                          for (i=0; i<8; i++)
  80   4                          {
  81   5                              if (RxBuffer[6+i] != checkl) break;
  82   5                              checkl *= 2;
  83   5                          }
  84   4                          if (checkl == 0)
  85   4                          {
  86   5                              RxBuffer[0] = 3;
  87   5                              RxBuffer[1] = '4';
  88   5                              checkl = 0x80;
  89   5                              for (i=0; i<8; i++)
  90   5                              {
  91   6                                  RxBuffer[6+i] = checkl;
  92   6                                  checkl /= 2;
  93   6                              }
  94   5                              lrc = 0;
  95   5                              for (i=0; i<14; i++)
  96   5                              {
  97   6                                  put_buf(RxBuffer[i]);
  98   6                              }
  99   5                              put_buf(lrc);
 100   5                          }
 101   4                          break;
 102   4                      case 0x3f:
 103   4                          put_buf(2);
 104   4                          put_buf(0);
 105   4                          while(TxEmpty == 0);
 106   4                          EnterISP();
 107   4                          break;
 108   4                  }
 109   3              }
 110   2          }
 111   1          RxCount = 0;
 112   1          RxBusy = 0;
 113   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    221    ----
C51 COMPILER V6.23a  SERIAL                                                                07/14/2005 11:03:35 PAGE 3   

   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   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 + -