C51 COMPILER V9.01   UART                                                                  02/22/2025 15:36:22 PAGE 1   


C51 COMPILER V9.01, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\output\Uart.obj
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\Uart.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_Load.O
                    -RC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730_lib\include;.\code_
                    -classb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\Uart.lst) OBJECT(.\output\Uart.obj)

line level    source

   1          /********************************************************************************
   2          Copyright (C), Sinowealth Electronic. Ltd.
   3          Author:         Sino
   4          Version:        V0.0
   5          Date:           2020/04/26
   6          History:
   7                  V2.0    2020/04/26               Preliminary
   8          ********************************************************************************/
   9          #include "Main.h"
  10          
  11                                                                                                                    
             -                                                                                                                        
             - 
  12          #if     (UART0_DEFINE != 0)
  13          /*************************************************************************************************
  14          * 函数名: UART0Init
  15          * 参  数: Bps: UART通讯波特率
  16          * 返回值: 无
  17          * 描  述: 初始化UART0模块
  18          *************************************************************************************************/
  19          void UART0Init(void)
  20          {
  21   1              #if UART0_DEFINE == 1
  22   1              UART0CR = 0x32;
  23   1          #elif UART0_DEFINE == 2
                      UART0CR = 0x42;
                  #elif UART0_DEFINE == 3
                      UART0CR = 0x52;
                      #elif UART0_DEFINE == 4
                      UART0CR = 0x02;
                      #elif UART0_DEFINE == 5
                      UART0CR = 0x12;
                      #elif UART0_DEFINE == 6
                      UART0CR = 0x23;
                      #elif UART0_DEFINE == 7
                      UART0CR = 0x43;
                      #elif UART0_DEFINE == 8
                      UART0CR = 0x53;
                      #elif UART0_DEFINE == 9
                      UART0CR = 0x03;
                      #elif UART0_DEFINE == 10
                      UART0CR = 0x13;
                      #elif UART0_DEFINE == 11
                      UART0CR = 0x24;
                      #elif UART0_DEFINE == 12
                      UART0CR = 0x34;
                      #elif UART0_DEFINE == 13
                      UART0CR = 0x54;
                      #elif UART0_DEFINE == 14
                      UART0CR = 0x04;
                      #elif UART0_DEFINE == 15
                      UART0CR = 0x14;
                      #elif UART0_DEFINE == 16
C51 COMPILER V9.01   UART                                                                  02/22/2025 15:36:22 PAGE 2   

                      UART0CR = 0x25;
                      #elif UART0_DEFINE == 17
                      UART0CR = 0x35;
                      #elif UART0_DEFINE == 18
                      UART0CR = 0x45;
                      #elif UART0_DEFINE == 19
                      UART0CR = 0x05;
                      #elif UART0_DEFINE == 20
                      UART0CR = 0x15;
                      #elif UART0_DEFINE == 21
                      UART0CR = 0x30;
                      #elif UART0_DEFINE == 22
                      UART0CR = 0x40;
                      #elif UART0_DEFINE == 23
                      UART0CR = 0x50;
                      #elif UART0_DEFINE == 24
                      UART0CR = 0x20;
                      #elif UART0_DEFINE == 25
                      UART0CR = 0x10;
                      #elif UART0_DEFINE == 26
                      UART0CR = 0x31;
                      #elif UART0_DEFINE == 27
                      UART0CR = 0x41;
                      #elif UART0_DEFINE == 28
                      UART0CR = 0x51;
                      #elif UART0_DEFINE == 29
                      UART0CR = 0x01;
                      #elif UART0_DEFINE == 30
                      UART0CR = 0x21; 
                      #else
                      #Error: "UART0_DEFINE ERROR"            
                  #endif
  84   1              {
  85   2                      U16 TempVal;
  86   2                      PCON = 0x00;    
  87   2                      SCON = 0x50;                                    //配置Uart工作在模式1
  88   2      //              SBRTH = UART_BPS_H;
  89   2      //              SBRTL = UART_BPS_L;
  90   2      //              SFINE = UART_BPS_F;
  91   2      
  92   2                      TempVal = 32768 - (U16)(8000000 / 16 / 9600);   //计算公式：(int)X=FSY/(16*波特率) ;  SBRT=32768-X  ;   
             -SFINE=（FSY/波特率）-16*X   FSY=24M
  93   2                  SBRTH = TempVal / 256;
  94   2                  SBRTL = TempVal % 256;
  95   2                  SFINE = (float)8000000 / 9600 - (16 * (32768 - TempVal));
  96   2      
  97   2                      SBRTH |= 0x80;                                  //使能波特率发生器
  98   2                      SADDR = UART_SLAVE_SADDR;                                       //UART地址初始化，默认为0x0A
  99   2                      SADEN = 0xFF;
 100   2              }
 101   1      }
 102          
 103          
 104          /*************************************************************************************************
 105          * 函数名: InterruptUART0
 106          * 参  数: 无
 107          * 返回值: 无
 108          * 描  述: UART0中断处理
 109          *************************************************************************************************/
 110          void InterruptUART0(void) interrupt 4
 111          {
 112   1              U8 xdata RxData;
C51 COMPILER V9.01   UART                                                                  02/22/2025 15:36:22 PAGE 3   

 113   1              
 114   1              _push_(INSCON);
 115   1          McuBank0Sel();
 116   1      
 117   1              if(RI)                              //RT1 interrupt means MCU recept data though UART
 118   1              {
 119   2                      RI = 0;
 120   2                      RxData = SBUF;
 121   2              InterruptUart0AppRx(RxData);    //中颖协议
 122   2              }
 123   1              
 124   1              if(TI)
 125   1              {
 126   2                      TI = 0;
 127   2                      InterruptUart0AppTx();  //中颖协议
 128   2              
 129   2              }
 130   1              
 131   1              _pop_(INSCON);
 132   1      }
 133          #endif
 134          
 135          
 136          #if     (UART1_DEFINE != 0)
              /*************************************************************************************************
              * 函数名: UART1Init
              * 参  数: Bps: UART通讯波特率
              * 返回值: 无
              * 描  述: 初始化UART1模块
              *************************************************************************************************/
              void UART1Init(void)
              {
              //         U16 TempVal;
                      
                      _push_(INSCON);
                  McuBank0Sel();
                  #if UART1_DEFINE == 1
                      UART1CR = 0x10;
                  #elif UART1_DEFINE == 2
                      UART1CR = 0x40;
                  #elif UART1_DEFINE == 3
                      UART1CR = 0x50;
                      #elif UART1_DEFINE == 4
                      UART1CR = 0x20;
                      #elif UART1_DEFINE == 5
                      UART1CR = 0x30;
                      #elif UART1_DEFINE == 6
                      UART1CR = 0x01;
                      #elif UART1_DEFINE == 7
                      UART1CR = 0x41;
                      #elif UART1_DEFINE == 8
                      UART1CR = 0x51;
                      #elif UART1_DEFINE == 9
                      UART1CR = 0x21;
                      #elif UART1_DEFINE == 10
                      UART1CR = 0x31;
                      #elif UART1_DEFINE == 11
                      UART1CR = 0x04;
                      #elif UART1_DEFINE == 12
                      UART1CR = 0x14;
                      #elif UART1_DEFINE == 13
                      UART1CR = 0x54;
C51 COMPILER V9.01   UART                                                                  02/22/2025 15:36:22 PAGE 4   

                  #elif UART1_DEFINE == 14
                      UART1CR = 0x24;
                      #elif UART1_DEFINE == 15
                      UART1CR = 0x34;
                      #elif UART1_DEFINE == 16
                      UART1CR = 0x05;
                      #elif UART1_DEFINE == 17
                      UART1CR = 0x15;
                      #elif UART1_DEFINE == 18
                      UART1CR = 0x45;
                      #elif UART1_DEFINE == 19
                      UART1CR = 0x25;
                      #elif UART1_DEFINE == 20
                      UART1CR = 0x35;
                      #elif UART1_DEFINE == 21
                      UART1CR = 0x02;
                      #elif UART1_DEFINE == 22
                      UART1CR = 0x12;
                      #elif UART1_DEFINE == 23
                      UART1CR = 0x42;
                      #elif UART1_DEFINE == 24
                      UART1CR = 0x52;
                      #elif UART1_DEFINE == 25
                      UART1CR = 0x32;
                      #elif UART1_DEFINE == 26
                      UART1CR = 0x03;
                      #elif UART1_DEFINE == 27
                      UART1CR = 0x13;
                      #elif UART1_DEFINE == 28
                      UART1CR = 0x43;
                      #elif UART1_DEFINE == 29
                      UART1CR = 0x53;
                      #elif UART1_DEFINE == 30
                      UART1CR = 0x23;
                      #else
                      #Error: "UART1_DEFINE ERROR" 
                  #endif
                      {
                              McuBank1Sel();
                              PCON1 = 0x00;   
                              SCON1 = 0x50;                                   //配置Uart工作在模式1
                              SBRTH1 = UART_BPS_H;
                              SBRTL1 = UART_BPS_L;
                              SFINE1 = UART_BPS_F;
                              SBRTH1 |= 0x80;                                 //使能波特率发生器
                              SADDR1 = UART_SLAVE_SADDR;                      //UART地址初始化，默认为0x0A
                              SADEN1 = 0xFF;
                              McuBank0Sel();
                      }       
                      _pop_(INSCON);
                      
                      
              }
              
              
              /*************************************************************************************************
              * 函数名: InterruptUart1
              * 参  数: 无
              * 返回值: 无
              * 描  述: UART1接收和发送中断服务程序
                        InterruptUart1AppRx(RxData)，调用APP层的接收中断处理函数
                        InterruptUart1AppTx()，调用APP层的发送中断处理函数
C51 COMPILER V9.01   UART                                                                  02/22/2025 15:36:22 PAGE 5   

              *************************************************************************************************/
              void InterruptUart1(void) interrupt 15
              {
                      U8 xdata RxData;
                      
                      _push_(INSCON);
                  McuBank1Sel();
              
                      if(RI1)
                      {
                              RI1 = 0;
                              RxData = SBUF1;
                              McuBank0Sel();                              //调用APP函数之前，将寄存器切换到BANK0
                              InterruptUart1AppRx(RxData);
                      }
                      McuBank1Sel();
                      if(TI1)
                      {
                              TI1 = 0;
                              McuBank0Sel();                              //调用APP函数之前，将寄存器切换到BANK0
                              InterruptUart1AppTx();
                      }
                      
                      _pop_(INSCON);
              }
              #endif
 263          
 264          #if     (UART2_DEFINE != 0)
              /*************************************************************************************************
              * 函数名: UART2Init
              * 参  数: Bps: UART通讯波特率
              * 返回值: 无
              * 描  述: 初始化UART2模块
              *************************************************************************************************/
              void UART2Init(void)
              {
                      {
                              McuBank1Sel();          
                              PCON2 = 0x00;   
                              SCON2 = 0x50;                                   //配置Uart工作在模式1
                              SBRTH2 = UART_BPS_H;
                              SBRTL2 = UART_BPS_L;
                              SFINE2 = UART_BPS_F;
                              SBRTH2 |= 0x80;                                 //使能波特率发生器
                              SADDR2 = UART_SLAVE_SADDR;                      //UART地址初始化，默认为0x0A
                              SADEN2 = 0xFF;  
                              McuBank0Sel();
                      }
              }
              
              /*************************************************************************************************
              * 函数名: InterruptUart2
              * 参  数: 无
              * 返回值: 无
              * 描  述: UART2接收和发送中断服务程序
                        InterruptUart2AppRx(RxData)，调用APP层的接收中断处理函数
                        InterruptUart2AppTx()，调用APP层的发送中断处理函数
              *************************************************************************************************/
              void InterruptUart2(void) interrupt 16
              {
                      U8 xdata RxData;
                      
C51 COMPILER V9.01   UART                                                                  02/22/2025 15:36:22 PAGE 6   

                      _push_(INSCON);
                  McuBank1Sel();
              
                      if(RI2)
                      {
                              RI2 = 0;
                              RxData = SBUF2;
                              McuBank0Sel();                              //调用APP函数之前，将寄存器切换到BANK0
                              InterruptUart2AppRx(RxData);
                      }
                      McuBank1Sel();
                      if(TI2)
                      {
                              TI2 = 0;
                              McuBank0Sel();                              //调用APP函数之前，将寄存器切换到BANK0
                              InterruptUart2AppTx();
                      }
                      
                      _pop_(INSCON);
              }
              #endif
 320          


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


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