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

📄 uart0.lst

📁 基于电力载波芯片3106开发的,在载波和485之间互相转换
💻 LST
字号:
C51 COMPILER V8.08   UART0                                                                 02/17/2009 12:58:31 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN uart0.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uart0.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #define UART0_GLOBALS
   2          
   3          
   4          
   5          #include "includes.h"
   6          
   7          
   8          
   9          /****************************本地变量定义*************************/
  10          static idata INT8U  UART0_ByteCnt;
  11          static idata INT8U  UART0_RcvByte;
  12                       Com    UART0_Com;
  13          
  14          
  15          
  16          /****************************本地变量定义*************************/
  17          static void UART0_Tx (void);
  18          static void UART0_Rx (void);
  19          
  20          
  21          
  22          /****************************全局函数*****************************/
  23          UART0_EXT void UART0_ParaInit (void)
  24          /*===============================================
  25              函数名:    UART0_ParaInit
  26              功能  :    串口0参数初始化
  27              输入  :    无
  28              输出  :    无
  29          ===============================================*/
  30          {
  31   1          UART0_ByteCnt  = 0;
  32   1          UART0_RcvByte  = 0;
  33   1          UART0_MaxLen   = 0;
  34   1          UART0_SendFlag = 0;
  35   1      }
  36          
  37          
  38          
  39          UART0_EXT void UART0_Course (void)
  40          /*===============================================
  41              函数名  :    UART0_Course
  42              功能    :    串口发送数据
  43              输入    :    无 
  44              输出    :    无 
  45          ===============================================*/
  46          {
  47   1          if (UART0_SendFlag){
  48   2              UART0_SendFlag = 0;
  49   2      
  50   2              UART0_ByteCnt  = 0;
  51   2                      
  52   2              TI = 1;                   /*强制进入发送*/
  53   2          }
  54   1      }
  55          
C51 COMPILER V8.08   UART0                                                                 02/17/2009 12:58:31 PAGE 2   

  56          
  57          
  58          /****************************本地函数*****************************/
  59          void UART0_Int (void) interrupt 4
  60          /*===============================================
  61              函数名  :    UART0_Int
  62              功能    :    串口中断
  63              输入    :    无
  64              输出    :    无
  65          ===============================================*/
  66          {
  67   1          if (RI){                      /*接收*/
  68   2              RI            = 0;
  69   2      
  70   2              LED_485       = 0;        /*开串口接收指示灯*/
  71   2              UART0_RcvByte = SBUF0;
  72   2      
  73   2              UART0_Rx();
  74   2          }else if (TI){                /*发送*/
  75   2              TI            = 0;
  76   2      
  77   2              LED_485       = 0;        /*开串口发送指示灯*/
  78   2      
  79   2              UART0_Tx();
  80   2          }
  81   1      }
  82          
  83          
  84          
  85          static void UART0_Tx (void)
  86          /*==============================================
  87              函数名:    UART0_Tx
  88              功能  :    串口发送
  89              输入  :    无
  90              输出  :        无
  91          ===============================================*/
  92          {
  93   1          INT8U i;
  94   1          bit   vfybit;
  95   1      
  96   1          if (UART0_ByteCnt < UART0_MaxLen){
  97   2      
  98   2              for (i=0x80; i!=0; i>>=1){
  99   3                  if ((COM_DatBuf[UART0_ByteCnt] & i) != 0){
 100   4                      vfybit ^= 1;
 101   4                  }
 102   3              }
 103   2              TB8 = vfybit;
 104   2              vfybit = 0;
 105   2      
 106   2              SBUF0 = COM_DatBuf[UART0_ByteCnt ++];
 107   2      
 108   2          }else{                     /*发送完毕*/
 109   2      
 110   2              LED_485       = 1;     /*关串口发送指示灯*/
 111   2      
 112   2              UART0_ByteCnt = 0;
 113   2              UART0_MaxLen  = 0;
 114   2          }
 115   1      }
 116          
 117          
C51 COMPILER V8.08   UART0                                                                 02/17/2009 12:58:31 PAGE 3   

 118          
 119          static void UART0_Rx (void)
 120          /*===============================================
 121              函数名:    UART0_Rx
 122              功能  :    串口接收
 123              输入  :    无
 124              输出  :    无
 125          ===============================================*/
 126          {
 127   1          switch (UART0_Com.RxPhase){
 128   2      
 129   2              case 0:/*第一起始符*/
 130   2                  if (0xfe == UART0_RcvByte){
 131   3                      UART0_Com.RxPhase = 0;
 132   3                      COM_DatBuf[UART0_MaxLen ++] = UART0_RcvByte;
 133   3                  }else if (0x68 == UART0_RcvByte){
 134   3                      UART0_Com.RxPhase           = 2;
 135   3                      COM_DatBuf[UART0_MaxLen ++] = UART0_RcvByte;
 136   3                  }else if ((0x14 == UART0_RcvByte)||(0x24 == UART0_RcvByte)||(0x16 == UART0_RcvByte)||(0x10 == 
             -UART0_RcvByte)){
 137   3                      UART0_Com.RxPhase           = 1;
 138   3                      COM_DatBuf[UART0_MaxLen ++] = UART0_RcvByte;
 139   3                  }else{
 140   3                      UART0_Com.RxErr             = 1;
 141   3                  }
 142   2                  break;
 143   2      
 144   2              case 1:/*浩迪规约第二起始符*/
 145   2                  if ((0x11 == UART0_RcvByte)||(0xee == UART0_RcvByte)){
 146   3                      UART0_Com.RxPhase           = 2;
 147   3                      COM_DatBuf[UART0_MaxLen ++] = UART0_RcvByte;
 148   3                  }else{
 149   3                      UART0_Com.RxErr             = 1;
 150   3                  }
 151   2                  break;
 152   2      
 153   2              case 2:/*地址域*/
 154   2                  COM_DatBuf[UART0_MaxLen ++]     = UART0_RcvByte;
 155   2                  UART0_Com.AdrLenCnt ++;
 156   2                  if (6 == UART0_Com.AdrLenCnt){
 157   3                      UART0_Com.AdrLenCnt         = 0;
 158   3                      UART0_Com.RxPhase           = 3;
 159   3                  }else if (UART0_Com.AdrLenCnt > 6){/*为了防止不可预知的错误*/
 160   3                      UART0_Com.RxErr             = 1;
 161   3                  }
 162   2                  break;
 163   2      
 164   2              case 3:/*数据起始符*/
 165   2                  if (0x68 == UART0_RcvByte){
 166   3                      UART0_Com.RxPhase           = 4;
 167   3                      COM_DatBuf[UART0_MaxLen ++] = UART0_RcvByte;
 168   3                  }else if (0xaa == UART0_RcvByte){
 169   3                      UART0_Com.RxPhase           = 4;
 170   3                      COM_DatBuf[UART0_MaxLen ++] = UART0_RcvByte;
 171   3                  }else{
 172   3                      UART0_Com.RxErr             = 1;
 173   3                  }
 174   2                  break;
 175   2      
 176   2              case 4:/*控制码*/
 177   2                  COM_DatBuf[UART0_MaxLen ++]     = UART0_RcvByte;
 178   2                  UART0_Com.RxPhase               = 5;
C51 COMPILER V8.08   UART0                                                                 02/17/2009 12:58:31 PAGE 4   

 179   2                  break;
 180   2      
 181   2              case 5:/*数据长度*/
 182   2                  if (30 > UART0_RcvByte){/*最长数据为20个字节*/
 183   3                      COM_DatBuf[UART0_MaxLen ++] = UART0_RcvByte;
 184   3                      UART0_Com.RxDatLen          = UART0_RcvByte;
 185   3                      UART0_Com.RxPhase           = 6;
 186   3                  }else{
 187   3                      UART0_Com.RxErr             = 1;
 188   3                  }
 189   2                  break;
 190   2      
 191   2              case 6:/*数据域*/
 192   2                  COM_DatBuf[UART0_MaxLen ++]     = UART0_RcvByte;
 193   2                  UART0_Com.DatLenCnt ++;
 194   2                  if (UART0_Com.DatLenCnt == UART0_Com.RxDatLen){
 195   3                      UART0_Com.RxPhase           = 7;
 196   3                      UART0_Com.DatLenCnt         = 0;
 197   3                      UART0_Com.RxDatLen          = 0;
 198   3                  }else if (UART0_Com.DatLenCnt > UART0_Com.RxDatLen){/*为了防止不可预知的错误*/
 199   3                      UART0_Com.RxErr             = 1;
 200   3                  }
 201   2                  break;
 202   2      
 203   2              case 7:/*校验码*/
 204   2                  COM_DatBuf[UART0_MaxLen ++]     = UART0_RcvByte;
 205   2                  UART0_Com.RxPhase               = 8;
 206   2                  break;
 207   2      
 208   2              case 8:/*结束符*/
 209   2                  if (0x16 == UART0_RcvByte){
 210   3                      COM_DatBuf[UART0_MaxLen ++] = UART0_RcvByte;
 211   3                      UART0_Com.RxPhase           = 0;
 212   3      
 213   3                      ZB_SendFlag                 = 1;
 214   3                      ZB_MaxLen                   = UART0_MaxLen;
 215   3                      UART0_MaxLen                = 0;
 216   3      
 217   3                      LED_485                     = 1;
 218   3      
 219   3                      RS485_Tx                    = 1;
 220   3                  }else if (0xff == UART0_RcvByte){
 221   3                      COM_DatBuf[UART0_MaxLen ++] = UART0_RcvByte;
 222   3                      UART0_Com.RxPhase           = 9;
 223   3                  }else{
 224   3                      UART0_Com.RxErr             = 1;
 225   3                  }
 226   2                  break;
 227   2      
 228   2              case 9:/*浩迪CRC校验*/
 229   2                  COM_DatBuf[UART0_MaxLen ++]     = UART0_RcvByte;
 230   2                      UART0_Com.CrcLenCnt ++;
 231   2                  if (UART0_Com.CrcLenCnt == 2){
 232   3                      UART0_Com.RxPhase           = 0;
 233   3                      UART0_Com.CrcLenCnt         = 0;
 234   3      
 235   3                      ZB_SendFlag                 = 1;
 236   3                      ZB_MaxLen                   = UART0_MaxLen;
 237   3                      UART0_MaxLen                = 0;
 238   3      
 239   3                      LED_485                     = 1;/*关指示灯*/
 240   3      
C51 COMPILER V8.08   UART0                                                                 02/17/2009 12:58:31 PAGE 5   

 241   3                      RS485_Tx                    = 1;/*转为接收*/
 242   3                  }else if (UART0_Com.CrcLenCnt > 2){/*为了防止不可预知的错误*/
 243   3                      UART0_Com.RxErr             = 1;
 244   3                  }
 245   2                  break;
 246   2      
 247   2              default:
 248   2                  break;
 249   2              }
 250   1      
 251   1          if (UART0_Com.RxErr){/*如果帧接收有错误*/
 252   2              UART0_Com.RxErr      = 0;
 253   2              UART0_Com.RxPhase    = 0;
 254   2              UART0_Com.RxDatLen   = 0;
 255   2              UART0_Com.DatLenCnt  = 0;
 256   2              UART0_Com.CrcLenCnt  = 0;
 257   2              UART0_Com.AdrLenCnt  = 0;
 258   2      
 259   2              UART0_MaxLen         = 0;
 260   2      
 261   2              LED_485              = 1;/*关指示灯*/
 262   2      
 263   2              RS485_Tx             = 1;/*转为接收*/
 264   2          }
 265   1      }
 266          
 267          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    586    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10    ----
   IDATA SIZE       =      2    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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