357 lines
15 KiB
Plaintext
357 lines
15 KiB
Plaintext
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 : <20><>ȡ<EFBFBD><C8A1>Ӧͨ<D3A6><CDA8><EFBFBD>ĵ<EFBFBD>ѹADCֵ<43><D6B5>
|
||
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.<2E><>ȡ<EFBFBD><C8A1><EFBFBD>ص<EFBFBD>ѹ<EFBFBD><D1B9>
|
||
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); //<2F><>ȡ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 : <20><>ȡNTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
|
||
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); //<2F><>ȡ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)
|