C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 1 C51 COMPILER V9.57.0.0, COMPILATION OF MODULE UART OBJECT MODULE PLACED IN .\Objects\uart.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\uart\uart.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\Usr -Inc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\k -ey;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc -\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\uart. -lst) TABS(2) OBJECT(.\Objects\uart.obj) line level source 1 /* 2 ****************************************************************************** 3 * 4 * @file uart.c 5 * @brief uart module 6 * 7 * 8 * @version 1.0 9 * @date 2022/12/14 15:00:40 10 * @author Alex Xu 11 * 12 * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd. 13 * All Rights Reserved 14 * 15 * History: 16 * Revision Date Author Desc 17 * 1.0.0 2022/12/14 Alex build this file 18 ******************************************************************************/ 19 /*_____ I N C L U D E S ____________________________________________________*/ 20 #include "uart.h" 21 #include "system.h" 22 #include "vox_module.h" 23 24 25 #if UART0_ENABLE 26 27 /******************************************************************************\ 28 Macro definitions 29 \******************************************************************************/ 30 #define NONE_PARITY 0 //ÎÞУÑé 31 #define ODD_PARITY 1 //ÆæÐ£Ñé 32 #define EVEN_PARITY 2 //żУÑé 33 #define MARK_PARITY 3 //±ê¼ÇУÑé 34 #define SPACE_PARITY 4 //¿Õ°×УÑé 35 36 #define PARITYBIT EVEN_PARITY //¶¨ÒåУÑéλ 37 38 /******************************************************************************\ 39 Variables definitions 40 \******************************************************************************/ 41 42 bit busy0; 43 44 #ifdef VOX_RX 45 idata uint8_t RX0_Buffer[COM0_Data_Lenth] = 0; //½ÓÊÕ»º³å 46 bit Uart0_RX_Finish_Flag = 0; 47 #endif 48 49 #endif 50 51 #ifdef _DEBUG_ALL C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 2 char putchar(char c) { while(!TI0); TI0 = 0; return (S0BUF = c); // Uart0SendData(c); // return(c); } #endif 63 64 #if UART0_ENABLE 65 66 /* 67 ******************************************************************************* 68 * void UART0_Init(void) 69 * 70 * Description : UART0 Initialization UART0ÓÃÓÚdebug¡¢´òÓ¡¡¢Í¸´«¹¦ÄÜ 71 * 72 * Arguments : NONE 73 74 * Returns : NONE 75 76 * Notes : NONE 77 * 78 ******************************************************************************* 79 */ 80 #if 0 void UART0_Init(void) { SFRADDR = MFP_CTL0; SFRDATA &= ~0x0C; SFRDATA |= 0x04; //P01 as UART's TX BD = 1; //Select additional Baudrate generator PCON |= 0x80; //Baudrate double enable //baudrate set S0RELH = HIBYTE(S0REL_VALUE); S0RELL = LOBYTE(S0REL_VALUE);//s0rel=1023, baudrate = fclk/32 = 187.5k S0CON = 0xD0; //SCON: MODE 3, 9-bit UART, RI enable, EVEN Parity TI0 = 1; RI0 = 1; ES0 = 1; //Enable UART0 IRQ } #endif 101 /* 102 ******************************************************************************* 103 * void Uart0SendData(uint8_t Txdata) 104 * 105 * Description : UART0 Send Data 106 * 107 * Arguments : NONE 108 109 * Returns : NONE 110 111 * Notes : NONE 112 * 113 ******************************************************************************* C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 3 114 */ 115 #if 0 void Uart0SendData(uint8_t Txdata) { while(busy0); ACC = Txdata; if (P) //¸ù¾ÝPÀ´ÉèÖÃУÑéλ { #if (PARITYBIT == ODD_PARITY) TB80 = 0; //ÉèÖÃУÑéλΪ0 #elif (PARITYBIT == EVEN_PARITY) TB80 = 1; //ÉèÖÃУÑéλΪ1 #endif } else { #if (PARITYBIT == ODD_PARITY) TB80 = 1; //ÉèÖÃУÑéλΪ1 #elif (PARITYBIT == EVEN_PARITY) TB80 = 0; //ÉèÖÃУÑéλΪ0 #endif } busy0 = 1; S0BUF = ACC; } #endif 140 141 /* 142 ******************************************************************************* 143 * void Uart0SendPacket(uint8_t Length,uint8_t *TransBuf) 144 * 145 * Description : UART0 Send Packet 146 * 147 * Arguments : NONE 148 149 * Returns : NONE 150 151 * Notes : NONE 152 * 153 ******************************************************************************* 154 */ 155 #ifdef VOX_TX 156 157 void Uart0SendPacket(uint16_t Length,uint8_t *TransBuf) 158 { 159 1 uint8_t i = 0; 160 1 for(i=0;i COM0_Data_Lenth) ) //µ±½ÓÊÕµ½µÄdata¸öÊýµÈÓÚRX0DataLen£¬Õâ½ -áÊø±¾´Î´«Êä¡£ { RX0_Cnt = 0; Rx0Status = 0; Uart0_RX_Finish_Flag = 1; } } #elif defined(ZHONGKELANXUN) //ÖпÆÀ¶Ñ¶ switch(Rx0Status) { case 0: if( S0BUF == (BOXHEADER >> 8) ) { Rx0Status = 1; RX0_Cnt = 0; RX0_Buffer[RX0_Cnt] = S0BUF; RX0_Cnt++; } else { Rx0Status = 0; RX0_Cnt = 0; } break; case 1: if(S0BUF == BOXHEADER) { Rx0Status = 2; RX0_Buffer[RX0_Cnt] = S0BUF; RX0_Cnt++; } else { Rx0Status = 0; RX0_Cnt = 0; } C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 6 break; case 1: RX0_Buffer[RX0_Cnt] = S0BUF; if(RX0DataLen == RX0_Cnt - 6) { RX0_Cnt = 0; Rx0Status = 0; Uart0_RX_Finish_Flag = 1; } else { RX0_Cnt++; if(RX0_Cnt == 5) { RX0DataLen = RX0_Buffer[4]; //»ñÈ¡Êý¾Ý³¤¶È length,length²»°üÀ¨Checksum } } } #elif defined(XIAOMI) //СÃ× 321 2 322 2 switch(Rx0Status) 323 2 { 324 3 case 0: 325 3 326 3 if(S0BUF == 0xAA) 327 3 { 328 4 Rx0Status = 1; 329 4 330 4 RX0_Cnt = 0; 331 4 332 4 RX0_Buffer[RX0_Cnt] = S0BUF; 333 4 334 4 RX0_Cnt++; 335 4 } 336 3 else 337 3 { 338 4 Rx0Status = 0; 339 4 340 4 RX0_Cnt = 0; 341 4 } 342 3 break; 343 3 344 3 case 1: 345 3 346 3 RX0_Buffer[RX0_Cnt] = S0BUF; 347 3 348 3 RX0_Cnt++; 349 3 350 3 if( RX0_Cnt == Vox_Comm_Data_Len ) 351 3 { 352 4 RX0DataLen = RX0_Buffer[5] | (RX0_Buffer[6] << 8) + 9; //»ñÈ¡Êý¾Ý³¤¶È£¬Headr(1Byte) + Trandsmit Dir(1 -Byte) + CMD(2Bytes) + datalen(2Bytes) + CRC16(2Bytes) 353 4 } 354 3 355 3 if( (RX0DataLen == RX0_Cnt) || (RX0_Cnt > COM0_Data_Lenth) ) //µ±½ÓÊÕµ½µÄdata¸öÊýµÈÓÚRX0DataLen£¬Õâ½á -Êø±¾´Î´«Êä¡£ 356 3 { 357 4 RX0_Cnt = 0; 358 4 Rx0Status = 0; C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 7 359 4 Uart0_RX_Finish_Flag = 1; 360 4 } 361 3 } 362 2 363 2 364 2 365 2 #endif 366 2 367 2 #endif 368 2 } 369 1 } 370 371 #endif 372 373 C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 8 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION Com0015 (BEGIN) 0000 L?0022: 0000 7400 R MOV A,#LOW RX0_Buffer 0002 2500 R ADD A,RX0_Cnt+01H 0004 F8 MOV R0,A 0005 A699 MOV @R0,S0BUF 0007 0500 R INC RX0_Cnt+01H 0009 E500 R MOV A,RX0_Cnt+01H 000B 22 RET 000C L?0023: 000C L?0024: 000C 750000 R MOV RX0_Cnt,#00H 000F 750000 R MOV RX0_Cnt+01H,#00H 0012 22 RET ; FUNCTION Com0015 (END) ; FUNCTION _Uart0SendPacket (BEGIN) ; SOURCE LINE # 157 0000 8E00 R MOV Length,R6 0002 8F00 R MOV Length+01H,R7 0004 8B00 R MOV TransBuf,R3 0006 8A00 R MOV TransBuf+01H,R2 0008 8900 R MOV TransBuf+02H,R1 ; SOURCE LINE # 158 ; SOURCE LINE # 159 ;---- Variable 'i' assigned to Register 'R7' ---- 000A E4 CLR A 000B FF MOV R7,A ; SOURCE LINE # 160 000C ?C0001: 000C EF MOV A,R7 000D C3 CLR C 000E 9500 R SUBB A,Length+01H 0010 E4 CLR A 0011 9500 R SUBB A,Length 0013 5016 JNC ?C0006 ; SOURCE LINE # 161 0015 ?C0004: ; SOURCE LINE # 164 0015 2000FD R JB busy0,?C0004 ; SOURCE LINE # 165 0018 7800 R MOV R0,#LOW TransBuf 001A E4 CLR A 001B 75F001 MOV B,#01H 001E 120000 E LCALL ?C?PLDIIDATA 0021 120000 E LCALL ?C?CLDPTR ; SOURCE LINE # 166 0024 D200 R SETB busy0 ; SOURCE LINE # 167 0026 F599 MOV S0BUF,A ; SOURCE LINE # 168 0028 0F INC R7 0029 80E1 SJMP ?C0001 ; SOURCE LINE # 169 002B ?C0006: 002B 22 RET ; FUNCTION _Uart0SendPacket (END) ; FUNCTION uart0_Interrupt (BEGIN) C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 9 0000 C0E0 PUSH ACC 0002 C0D0 PUSH PSW 0004 75D000 MOV PSW,#00H 0007 C000 PUSH AR0 0009 C005 PUSH AR5 000B C006 PUSH AR6 000D C007 PUSH AR7 ; SOURCE LINE # 192 ; SOURCE LINE # 207 000F 309904 JNB TI0,?C0007 ; SOURCE LINE # 208 ; SOURCE LINE # 209 0012 C299 CLR TI0 ; SOURCE LINE # 210 0014 C200 R CLR busy0 ; SOURCE LINE # 211 0016 ?C0007: ; SOURCE LINE # 214 0016 309867 JNB RI0,?C0017 ; SOURCE LINE # 215 ; SOURCE LINE # 216 0019 C298 CLR RI0 ; SOURCE LINE # 322 001B E500 R MOV A,Rx0Status 001D 14 DEC A 001E 601F JZ ?C0013 0020 04 INC A 0021 705D JNZ ?C0017 ; SOURCE LINE # 323 ; SOURCE LINE # 324 0023 ?C0010: ; SOURCE LINE # 326 0023 E599 MOV A,S0BUF 0025 B4AA0F CJNE A,#0AAH,?C0011 ; SOURCE LINE # 327 ; SOURCE LINE # 328 0028 750001 R MOV Rx0Status,#01H ; SOURCE LINE # 330 002B 120000 R LCALL L?0023 ; SOURCE LINE # 332 ; SOURCE LINE # 334 002E 120000 R LCALL L?0022 0031 7002 JNZ ?C0018 0033 0500 R INC RX0_Cnt 0035 ?C0018: ; SOURCE LINE # 335 0035 8049 SJMP ?C0017 0037 ?C0011: ; SOURCE LINE # 337 ; SOURCE LINE # 338 0037 750000 R MOV Rx0Status,#00H ; SOURCE LINE # 340 003A 120000 R LCALL L?0023 ; SOURCE LINE # 341 ; SOURCE LINE # 342 003D 8041 SJMP ?C0017 ; SOURCE LINE # 344 003F ?C0013: ; SOURCE LINE # 346 ; SOURCE LINE # 348 003F 120000 R LCALL L?0022 0042 7002 JNZ ?C0019 C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 10 0044 0500 R INC RX0_Cnt 0046 ?C0019: ; SOURCE LINE # 350 0046 6407 XRL A,#07H 0048 4500 R ORL A,RX0_Cnt 004A 7015 JNZ ?C0014 ; SOURCE LINE # 351 ; SOURCE LINE # 352 004C 7800 R MOV R0,#LOW RX0_Buffer+06H 004E E6 MOV A,@R0 004F FE MOV R6,A 0050 E4 CLR A 0051 2409 ADD A,#09H 0053 FF MOV R7,A 0054 E4 CLR A 0055 3E ADDC A,R6 0056 FE MOV R6,A 0057 18 DEC R0 0058 E6 MOV A,@R0 0059 FD MOV R5,A 005A EE MOV A,R6 005B F500 R MOV RX0DataLen,A 005D EF MOV A,R7 005E 4D ORL A,R5 005F F500 R MOV RX0DataLen+01H,A ; SOURCE LINE # 353 0061 ?C0014: ; SOURCE LINE # 355 0061 E500 R MOV A,RX0DataLen+01H 0063 6500 R XRL A,RX0_Cnt+01H 0065 7004 JNZ ?C0020 0067 E500 R MOV A,RX0DataLen 0069 6500 R XRL A,RX0_Cnt 006B ?C0020: 006B 600B JZ ?C0016 006D D3 SETB C 006E E500 R MOV A,RX0_Cnt+01H 0070 940B SUBB A,#0BH 0072 E500 R MOV A,RX0_Cnt 0074 9400 SUBB A,#00H 0076 4008 JC ?C0017 0078 ?C0016: ; SOURCE LINE # 356 ; SOURCE LINE # 357 0078 120000 R LCALL L?0024 ; SOURCE LINE # 358 007B 750000 R MOV Rx0Status,#00H ; SOURCE LINE # 359 007E D200 R SETB Uart0_RX_Finish_Flag ; SOURCE LINE # 360 ; SOURCE LINE # 361 ; SOURCE LINE # 368 ; SOURCE LINE # 369 0080 ?C0017: 0080 D007 POP AR7 0082 D006 POP AR6 0084 D005 POP AR5 0086 D000 POP AR0 0088 D0D0 POP PSW 008A D0E0 POP ACC 008C 32 RETI ; FUNCTION uart0_Interrupt (END) C51 COMPILER V9.57.0.0 UART 06/14/2024 11:08:37 PAGE 11 MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 204 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 5 5 IDATA SIZE = 11 ---- BIT SIZE = 2 ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)