C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 1 C51 COMPILER V9.57.0.0, COMPILATION OF MODULE ADC OBJECT MODULE PLACED IN .\Objects\adc.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\UsrSrc\adc\adc.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE INCDIR(..\UsrIn -c\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key -;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\v -ox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer) DEBUG OBJECTEXTEND CODE PRINT(.\Listings\adc.lst -) TABS(2) OBJECT(.\Objects\adc.obj) line level source 1 /* 2 ****************************************************************************** 3 * 4 * @file adc.c 5 * @brief adc module 6 * @ic TP3102 7 * 8 * @version 1.0 9 * @date 2024/03/26 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/08/04 Alex build this file 18 ******************************************************************************/ 19 /*_____ I N C L U D E S ____________________________________________________*/ 20 21 #include "adc.h" 22 #include "system.h" 23 #include "sys_tim.h" 24 25 #if ADC_ENABLE 26 27 /******************************************************************************\ 28 Macro definitions 29 \******************************************************************************/ 30 31 /******************************************************************************\ 32 Variables definitions 33 \******************************************************************************/ 34 35 idata uint16_t Vbat_Adc = 0; 36 37 38 /******************************************************************************\ 39 Functions definitions 40 \******************************************************************************/ 41 42 43 /* 44 ******************************************************************************* 45 * uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn) 46 * 47 * Description : 获取相应通道的电压ADC值。 48 * 49 * Arguments : NONE 50 51 * Returns : adc Value (mV) C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 2 52 53 * Notes : NONE 54 * 55 ******************************************************************************* 56 */ 57 58 uint16_t ADC_Chn_Data(ADC_CHANNELS_E adc_chn) 59 { 60 1 uint8_t index = 0; 61 1 uint16_t adc_data = 0; 62 1 uint16_t adc_plus_data = 0; 63 1 64 1 SFRADDR = ADC_CTL0; 65 1 SFRDATA = 0x8B; //0x8B--ADC EN; Single mode; ADC CLK divided by 24=460k 66 1 67 1 for(index=0; index<8; index++) 68 1 { 69 2 ADC_CTL1 = (adc_chn << 4) | 0x01; //Channel set and Start conversion 70 2 71 2 while(ADC_CTL1 & 0x01); //Wait for conversion complete 72 2 73 2 adc_data = ADC_DATL; //Read low byte first! Lock ADC Value. 74 2 75 2 adc_data |= (uint16_t)(ADC_DATH << 8); 76 2 77 2 adc_plus_data += adc_data; 78 2 #ifdef _DEBUG_ADC printf("adc4:%d,plus:%d.\r\n",(uint16_t)adc_data,(uint16_t)adc_plus_data); #endif 81 2 // adc_data = 0; 82 2 } 83 1 84 1 adc_data = adc_plus_data >> 3; 85 1 86 1 #ifdef _DEBUG_ADC printf("adc_chn1:%d.\r\n",(uint16_t)adc_data); #endif 89 1 90 1 #ifdef _DEBUG_ADC printf("Adc,Vadc:%d,Vref:%d.\r\n", (uint16_t)adc_data, (uint16_t)adc_plus_data); #endif 93 1 94 1 return adc_data; 95 1 } 96 97 /* 98 ******************************************************************************* 99 * uint16_t Vbat_Value(void) 100 * 101 * Description : Vbat Value.获取电池电压。 102 * 103 * Arguments : NONE 104 105 * Returns : Vbat Value (mV) 106 107 * Notes : NONE 108 * 109 ******************************************************************************* 110 */ 111 uint16_t Vbat_Value(void) 112 { 113 1 uint16_t n_Vbat_Data = 0; C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 3 114 1 //uint16_t n_ADC_Plus = 0; 115 1 116 1 n_Vbat_Data = ADC_Chn_Data(ADC_BAT); 117 1 118 1 #ifdef _DEBUG_ADC printf("bat_Vbat1:%d.\r\n",(uint16_t)n_Vbat_Data); #endif 121 1 122 1 // n_ADC_Plus = ADC_Chn_Data(ADC_VREF); //获取VREF 123 1 124 1 n_Vbat_Data = (uint32_t)(n_Vbat_Data) * VREF * 2 / ADC_Chn_Data(ADC_VREF); //Vadx = VREF*DATAadx/DATAvr -ef 125 1 126 1 #ifdef _DEBUG_ADC printf("bat,Vbat:%d.\r\n",(uint16_t)n_Vbat_Data); #endif 129 1 130 1 return n_Vbat_Data; 131 1 } 132 133 /* 134 ******************************************************************************* 135 * uint16_t ADC_NTC_Value(void) 136 * 137 * Description : 获取NTC采样电压 138 139 * Arguments : NONE 140 141 * Returns : ADC Value (mV) 142 143 * Notes : NONE 144 * 145 ******************************************************************************* 146 */ 147 #ifdef ADC_NTC_ENABLE 148 149 uint16_t ADC_NTC_Value(void) 150 { 151 1 uint16_t adc_data = 0; 152 1 // uint16_t adc_plus_data = 0; 153 1 154 1 adc_data = ADC_Chn_Data(ADC_CH4); 155 1 156 1 #ifdef _DEBUG_ADC printf("adc_chn1:%d.\r\n",(uint16_t)adc_data); #endif 159 1 // adc_plus_data = ADC_Chn_Data(ADC_VREF); //获取VREF 160 1 161 1 adc_data = (uint32_t)(adc_data) * VREF / ADC_Chn_Data(ADC_VREF); //Vadx = VREF*DATAadx/DATAvref 162 1 163 1 #ifdef _DEBUG_ADC printf("Adc,Vadc:%d.\r\n", (uint16_t)adc_data); #endif 166 1 167 1 return adc_data; 168 1 } 169 #endif 170 171 172 #endif 173 C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 4 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION _ADC_Chn_Data (BEGIN) ; SOURCE LINE # 58 ;---- Variable 'adc_chn' assigned to Register 'R5' ---- 0000 AD07 MOV R5,AR7 ; SOURCE LINE # 59 ; SOURCE LINE # 60 ;---- Variable 'index' assigned to Register 'R4' ---- 0002 E4 CLR A 0003 FC MOV R4,A ; SOURCE LINE # 61 ;---- Variable 'adc_data' assigned to Register 'R2/R3' ---- 0004 FB MOV R3,A 0005 FA MOV R2,A ; SOURCE LINE # 62 0006 F500 R MOV adc_plus_data,A 0008 F500 R MOV adc_plus_data+01H,A ; SOURCE LINE # 64 000A 75FE29 MOV SFRADDR,#029H ; SOURCE LINE # 65 000D 75FF8B MOV SFRDATA,#08BH ; SOURCE LINE # 67 0010 ?C0001: ; SOURCE LINE # 68 ; SOURCE LINE # 69 0010 ED MOV A,R5 0011 C4 SWAP A 0012 54F0 ANL A,#0F0H 0014 4401 ORL A,#01H 0016 F5A5 MOV ADC_CTL1,A 0018 ?C0004: ; SOURCE LINE # 71 0018 E5A5 MOV A,ADC_CTL1 001A 20E0FB JB ACC.0,?C0004 ; SOURCE LINE # 73 001D AFA1 MOV R7,ADC_DATL 001F AB07 MOV R3,AR7 ; SOURCE LINE # 75 0021 AFA2 MOV R7,ADC_DATH 0023 EF MOV A,R7 0024 FE MOV R6,A 0025 EE MOV A,R6 0026 FA MOV R2,A ; SOURCE LINE # 77 0027 EB MOV A,R3 0028 2500 R ADD A,adc_plus_data+01H 002A F500 R MOV adc_plus_data+01H,A 002C EA MOV A,R2 002D 3500 R ADDC A,adc_plus_data 002F F500 R MOV adc_plus_data,A ; SOURCE LINE # 82 0031 0C INC R4 0032 BC08DB CJNE R4,#08H,?C0001 0035 ?C0002: ; SOURCE LINE # 84 0035 E500 R MOV A,adc_plus_data+01H 0037 AE00 R MOV R6,adc_plus_data 0039 7803 MOV R0,#03H 003B ?C0009: 003B CE XCH A,R6 C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 5 003C C3 CLR C 003D 13 RRC A 003E CE XCH A,R6 003F 13 RRC A 0040 D8F9 DJNZ R0,?C0009 ; SOURCE LINE # 94 0042 FF MOV R7,A ; SOURCE LINE # 95 0043 22 RET ; FUNCTION _ADC_Chn_Data (END) ; FUNCTION Vbat_Value (BEGIN) ; SOURCE LINE # 111 ; SOURCE LINE # 112 ; SOURCE LINE # 113 0000 E4 CLR A 0001 F500 R MOV n_Vbat_Data,A 0003 F500 R MOV n_Vbat_Data+01H,A ; SOURCE LINE # 116 0005 7F05 MOV R7,#05H 0007 120000 R LCALL _ADC_Chn_Data 000A 8E00 R MOV n_Vbat_Data,R6 000C 8F00 R MOV n_Vbat_Data+01H,R7 ; SOURCE LINE # 124 000E 7F06 MOV R7,#06H 0010 120000 R LCALL _ADC_Chn_Data 0013 E4 CLR A 0014 FC MOV R4,A 0015 FD MOV R5,A 0016 C004 PUSH AR4 0018 A905 MOV R1,AR5 001A AA06 MOV R2,AR6 001C AB07 MOV R3,AR7 001E AE00 R MOV R6,n_Vbat_Data 0020 AF00 R MOV R7,n_Vbat_Data+01H 0022 7C07 MOV R4,#07H 0024 7DD0 MOV R5,#0D0H 0026 120000 E LCALL ?C?LIMUL 0029 D000 POP AR0 002B 120000 E LCALL ?C?ULDIV 002E 8E00 R MOV n_Vbat_Data,R6 0030 8F00 R MOV n_Vbat_Data+01H,R7 ; SOURCE LINE # 130 ; SOURCE LINE # 131 0032 22 RET ; FUNCTION Vbat_Value (END) ; FUNCTION ADC_NTC_Value (BEGIN) ; SOURCE LINE # 149 ; SOURCE LINE # 150 ; SOURCE LINE # 151 0000 E4 CLR A 0001 F500 R MOV adc_data,A 0003 F500 R MOV adc_data+01H,A ; SOURCE LINE # 154 0005 7F04 MOV R7,#04H 0007 120000 R LCALL _ADC_Chn_Data 000A 8E00 R MOV adc_data,R6 000C 8F00 R MOV adc_data+01H,R7 ; SOURCE LINE # 161 000E 7F06 MOV R7,#06H 0010 120000 R LCALL _ADC_Chn_Data C51 COMPILER V9.57.0.0 ADC 06/14/2024 11:08:35 PAGE 6 0013 E4 CLR A 0014 FC MOV R4,A 0015 FD MOV R5,A 0016 C004 PUSH AR4 0018 A905 MOV R1,AR5 001A AA06 MOV R2,AR6 001C AB07 MOV R3,AR7 001E AE00 R MOV R6,adc_data 0020 AF00 R MOV R7,adc_data+01H 0022 7C03 MOV R4,#03H 0024 7DE8 MOV R5,#0E8H 0026 120000 E LCALL ?C?LIMUL 0029 D000 POP AR0 002B 120000 E LCALL ?C?ULDIV 002E 8E00 R MOV adc_data,R6 0030 8F00 R MOV adc_data+01H,R7 ; SOURCE LINE # 167 ; SOURCE LINE # 168 0032 22 RET ; FUNCTION ADC_NTC_Value (END) MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 170 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- 6 IDATA SIZE = 2 ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)