📄 hal_adc.lst
字号:
212 adctemp |= channel | resbits | HAL_ADC_REF_VOLT;
213
214 /* writing to this register starts the extra conversion */
215 ADCCON3 = adctemp;
\ 00004F EB MOV A,R3
\ 000050 49 ORL A,R1
\ 000051 4480 ORL A,#0x80
\ 000053 F5B6 MOV 0xb6,A
216
217 /* Wait for the conversion to be done */
218 while (!(ADCCON1 & HAL_ADC_EOC));
\ ??HalAdcRead_8:
\ 000055 E5B4 MOV A,0xb4
\ 000057 A2E7 MOV C,0xE0 /* A */.7
\ 000059 50FA JNC ??HalAdcRead_8
219
220 /* Disable channel after done conversion */
221 ADCCFG &= ~adcChannel;
\ 00005B EC MOV A,R4
\ 00005C F4 CPL A
\ 00005D 55F2 ANL A,0xf2
\ 00005F F5F2 MOV 0xf2,A
222
223 /* Read the result */
224 reading = (int16) (ADCL);
\ 000061 ABBA MOV R3,0xba
\ 000063 8B82 MOV DPL,R3
\ 000065 A882 MOV R0,DPL
225 reading |= (int16) (ADCH << 8);
\ 000067 E5BB MOV A,0xbb
\ 000069 F9 MOV R1,A
226
227 /* Treat small negative as 0 */
228 if (reading < 0)
\ 00006A C3 CLR C
\ 00006B E8 MOV A,R0
\ 00006C 9400 SUBB A,#0x0
\ 00006E E9 MOV A,R1
\ 00006F 9400 SUBB A,#0x0
\ 000071 A2D2 MOV C,0xD0 /* PSW */.2
\ 000073 65D0 XRL A,PSW
\ 000075 33 RLC A
\ 000076 5004 JNC ??HalAdcRead_9
229 reading = 0;
\ 000078 7800 MOV R0,#0x0
\ 00007A 7900 MOV R1,#0x0
230
231 switch (resolution)
\ ??HalAdcRead_9:
\ 00007C EA MOV A,R2
\ 00007D 12.... LCALL ?UC_SWITCH_DENSE
\ `?<Jumptable for HalAdcRead>_1`:
\ 000080 01 DB 1
\ 000081 02 DB 2
\ 000082 .... DW ??HalAdcRead_10
\ 000084 .... DW ??HalAdcRead_11
\ 000086 .... DW ??HalAdcRead_12
\ 000088 .... DW ??HalAdcRead_13
232 {
233 case HAL_ADC_RESOLUTION_8:
234 reading >>= 8;
\ ??HalAdcRead_11:
\ 00008A 88.. MOV ?V0 + 0,R0
\ 00008C 89.. MOV ?V0 + 1,R1
\ 00008E 7408 MOV A,#0x8
\ 000090 800E SJMP ??HalAdcRead_14
235 break;
236 case HAL_ADC_RESOLUTION_10:
237 reading >>= 6;
\ ??HalAdcRead_12:
\ 000092 88.. MOV ?V0 + 0,R0
\ 000094 89.. MOV ?V0 + 1,R1
\ 000096 7406 MOV A,#0x6
\ 000098 8006 SJMP ??HalAdcRead_14
238 break;
239 case HAL_ADC_RESOLUTION_12:
240 reading >>= 4;
\ ??HalAdcRead_13:
\ 00009A 88.. MOV ?V0 + 0,R0
\ 00009C 89.. MOV ?V0 + 1,R1
\ 00009E 7404 MOV A,#0x4
\ ??HalAdcRead_14:
\ 0000A0 78.. MOV R0,#?V0 + 0
\ 0000A2 12.... LCALL ?SS_SHR
\ 0000A5 A8.. MOV R0,?V0 + 0
\ 0000A7 A9.. MOV R1,?V0 + 1
241 break;
242 case HAL_ADC_RESOLUTION_14:
243 default:
244 break;
245 }
246 #endif
247
248 return ((uint16)reading);
\ ??HalAdcRead_10:
\ 0000A9 E8 MOV A,R0
\ 0000AA FA MOV R2,A
\ 0000AB E9 MOV A,R1
\ 0000AC FB MOV R3,A
\ 0000AD 7401 MOV A,#0x1
\ 0000AF 12.... LCALL ?DEALLOC_XSTACK8
\ 0000B2 7F02 MOV R7,#0x2
\ 0000B4 02.... LJMP ?BANKED_LEAVE_XDATA
249 }
250
251 /**************************************************************************************************
252 * @fn HalAdcCheckVdd
253 *
254 * @brief Check the Vdd and return TRUE if it greater than or equal the limit
255 *
256 * @param limit - limit that needs to be checked with the Vdd
257 *
258 * @return TRUE if Vdd >= limit, FALSE otherwise
259 *
260 **************************************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
261 bool HalAdcCheckVdd (uint8 limit)
\ HalAdcCheckVdd:
262 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
263 uint16 value;
264
265 /* If rev C or earlier, dont check the voltage */
266 if (CHVER < REV_D)
\ 000004 90DF60 MOV DPTR,#-0x20a0
\ 000007 E0 MOVX A,@DPTR
\ 000008 C3 CLR C
\ 000009 9403 SUBB A,#0x3
\ 00000B 5004 JNC ??HalAdcCheckVdd_0
267 {
268 return TRUE;
\ ??HalAdcCheckVdd_1:
\ 00000D 7901 MOV R1,#0x1
\ 00000F 802F SJMP ??HalAdcCheckVdd_2
269 }
270
271 /* Clear ADC interrupt flag */
272 ADCIF = 0;
\ ??HalAdcCheckVdd_0:
\ 000011 C28D CLR 0x88.5
273
274 /* Setup the new value for conversion */
275 ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_064 | HAL_ADC_CHN_VDD3);
\ 000013 75B60F MOV 0xb6,#0xf
276
277 /* Wait for the conversion to finish */
278 while ( !ADCIF );
\ ??HalAdcCheckVdd_3:
\ 000016 A28D MOV C,0x88.5
\ 000018 50FC JNC ??HalAdcCheckVdd_3
279
280 /* Get the result */
281 value = ADCL;
\ 00001A AABA MOV R2,0xba
282 value |= ((uint16) ADCH) << 8;
\ 00001C E5BB MOV A,0xbb
\ 00001E FB MOV R3,A
283
284 /* Check the limit and return */
285 return ( value >= HalAdcVddLimit[limit] );
\ 00001F E9 MOV A,R1
\ 000020 C3 CLR C
\ 000021 33 RLC A
\ 000022 F8 MOV R0,A
\ 000023 E4 CLR A
\ 000024 33 RLC A
\ 000025 F9 MOV R1,A
\ 000026 E8 MOV A,R0
\ 000027 24.. ADD A,#(??HalAdcVddLimit & 0xff)
\ 000029 F582 MOV DPL,A
\ 00002B E9 MOV A,R1
\ 00002C 34.. ADDC A,#((??HalAdcVddLimit >> 8) & 0xff)
\ 00002E F583 MOV DPH,A
\ 000030 E4 CLR A
\ 000031 93 MOVC A,@A+DPTR
\ 000032 F8 MOV R0,A
\ 000033 7401 MOV A,#0x1
\ 000035 93 MOVC A,@A+DPTR
\ 000036 F9 MOV R1,A
\ 000037 C3 CLR C
\ 000038 EA MOV A,R2
\ 000039 98 SUBB A,R0
\ 00003A EB MOV A,R3
\ 00003B 99 SUBB A,R1
\ 00003C 50CF JNC ??HalAdcCheckVdd_1
\ 00003E 7900 MOV R1,#0x0
\ ??HalAdcCheckVdd_2:
\ 000040 02.... LJMP ?Subroutine0 & 0xFFFF
286 }
\ In segment SFR_AN, at 0x88
\ union <unnamed> volatile __sfr _A_TCON
\ _A_TCON:
\ 000000 DS 1
287
288 /**************************************************************************************************
289 **************************************************************************************************/
290
291
292
293
Maximum stack usage in bytes:
Function ISTACK PSTACK XSTACK
-------- ------ ------ ------
HalAdcCheckVdd 2 0 0
HalAdcInit 3 0 1
HalAdcRead 1 0 11
Segment part sizes:
Function/Label Bytes
-------------- -----
ADCCON1 1
ADCCON2 1
ADCCON3 1
ADCL 1
ADCH 1
ADCCFG 1
HalAdcVddLimit 18
HalAdcInit 62
?Subroutine0 7
HalAdcRead 183
HalAdcCheckVdd 67
_A_TCON 1
319 bytes in segment BANKED_CODE
18 bytes in segment CODE_C
7 bytes in segment SFR_AN
337 bytes of CODE memory
0 bytes of DATA memory (+ 7 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -