📄 easyweb.lst
字号:
240 ADC12CTL0 &= ~ENC; // disable conversion
\ 000014 A2C3A001 BIC.W #0x2, &0x1a0
241
242 ADCResult = ADC12MEM0; // Read out ADC12 value
\ 000018 1E424001 MOV.W &0x140, R14
243
244 for (i = 0; i < sizeof Temp_Tab; i++) // Get temperature value out
\ 00001C 0C43 MOV.W #0x0, R12
\ 00001E 013C JMP ??GetTempVal_2
\ ??GetTempVal_1:
\ 000020 1C53 ADD.W #0x1, R12
\ ??GetTempVal_2:
\ 000022 3C905E00 CMP.W #0x5e, R12
\ 000026 052C JC ??GetTempVal_3
245 if (ADCResult < Temp_Tab[i]) // of table
\ 000028 0F4C MOV.W R12, R15
\ 00002A 0F5F RLA.W R15
\ 00002C 1E9F.... CMP.W Temp_Tab(R15), R14
\ 000030 F72F JC ??GetTempVal_1
246 break;
247
248 return i << 1; // Scale value
\ ??GetTempVal_3:
\ 000032 0C5C RLA.W R12
\ 000034 3041 RET
249 }
250 //------------------------------------------------------------------------------
251 // searches the TX-buffer for special strings and replaces them
252 // with dynamic values (AD-converter results)
253 //------------------------------------------------------------------------------
\ In segment CODE, align 2
254 static void InsertDynamicValues(void)
\ InsertDynamicValues:
255 {
\ 000000 0A12 PUSH.W R10
\ 000002 0B12 PUSH.W R11
\ 000004 31800600 SUB.W #0x6, SP
256 char *Key;
257 char NewKey[5];
258 int i;
259
260 if (TCPTxDataCount < 4) return; // there can't be any special string
\ 000008 A292.... CMP.W #0x4, &TCPTxDataCount
\ 00000C 4328 JNC ??InsertDynamicValues_2
261
262 Key = (char *)TCP_TX_BUF;
\ 00000E 3A40.... MOV.W #TxFrame1Mem + 54, R10
263
264 for (i = 0; i < TCPTxDataCount - 3; i++)
\ 000012 0B43 MOV.W #0x0, R11
\ 000014 173C JMP ??InsertDynamicValues_3
265 {
266 if (*Key == 'A')
267 if (*(Key + 1) == 'D')
268 if (*(Key + 3) == '%')
269 if (*(Key + 2) == '7') // "AD7%"?
270 {
271 sprintf(NewKey, "%3u", GetAD7Val()); // insert AD converter value
272 memcpy(Key, NewKey, 3); // channel 7 (P6.7)
273 }
274 else if (*(Key + 2) == 'A')
\ ??InsertDynamicValues_1:
\ 000016 FA9041000200 CMP.B #0x41, 0x2(R10)
\ 00001C 1120 JNE ??InsertDynamicValues_0
275 {
276 sprintf(NewKey, "%3u", GetTempVal()); // insert AD converter value
\ 00001E B012.... CALL #GetTempVal
\ 000022 0C12 PUSH.W R12
\ 000024 3E40.... MOV.W #`?<Constant "%3u">`, R14
\ 000028 0C41 MOV.W SP, R12
\ 00002A 2C53 ADD.W #0x2, R12
\ 00002C B012.... CALL #sprintf
277 memcpy(Key, NewKey, 3); // channel 10 (temp.-diode)
\ 000030 30120300 PUSH.W #0x3
\ 000034 0E41 MOV.W SP, R14
\ 000036 2E52 ADD.W #0x4, R14
\ 000038 0C4A MOV.W R10, R12
\ 00003A B012.... CALL #memcpy
\ 00003E 2152 ADD.W #0x4, SP
278 }
279 Key++;
\ ??InsertDynamicValues_0:
\ 000040 1A53 ADD.W #0x1, R10
\ 000042 1B53 ADD.W #0x1, R11
\ ??InsertDynamicValues_3:
\ 000044 1F42.... MOV.W &TCPTxDataCount, R15
\ 000048 3F50FDFF ADD.W #0xfffd, R15
\ 00004C 0B9F CMP.W R15, R11
\ 00004E 222C JC ??InsertDynamicValues_2
\ 000050 FA9041000000 CMP.B #0x41, 0(R10)
\ 000056 F423 JNE ??InsertDynamicValues_0
\ 000058 FA9044000100 CMP.B #0x44, 0x1(R10)
\ 00005E F023 JNE ??InsertDynamicValues_0
\ 000060 FA9025000300 CMP.B #0x25, 0x3(R10)
\ 000066 EC23 JNE ??InsertDynamicValues_0
\ 000068 FA9037000200 CMP.B #0x37, 0x2(R10)
\ 00006E D323 JNE ??InsertDynamicValues_1
\ 000070 B012.... CALL #GetAD7Val
\ 000074 0C12 PUSH.W R12
\ 000076 3E40.... MOV.W #`?<Constant "%3u">`, R14
\ 00007A 0C41 MOV.W SP, R12
\ 00007C 2C53 ADD.W #0x2, R12
\ 00007E B012.... CALL #sprintf
\ 000082 30120300 PUSH.W #0x3
\ 000086 0E41 MOV.W SP, R14
\ 000088 2E52 ADD.W #0x4, R14
\ 00008A 0C4A MOV.W R10, R12
\ 00008C B012.... CALL #memcpy
\ 000090 2152 ADD.W #0x4, SP
\ 000092 D63F JMP ??InsertDynamicValues_0
280 }
\ ??InsertDynamicValues_2:
\ 000094 31500600 ADD.W #0x6, SP
\ 000098 3B41 POP.W R11
\ 00009A 3A41 POP.W R10
\ 00009C 3041 RET
281 }
282 //------------------------------------------------------------------------------
283 // enables the 8MHz crystal on XT1 and use
284 // it as MCLK
285 //------------------------------------------------------------------------------
\ In segment CODE, align 2
286 static void InitOsc(void)
\ InitOsc:
287 {
288 WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
\ 000000 B240805A2001 MOV.W #0x5a80, &0x120
289
290 BCSCTL1 |= XTS; // XT1 as high-frequency
\ 000006 F2D040005700 BIS.B #0x40, &0x57
291 __bic_SR_register(OSCOFF); // turn on XT1 oscillator
\ 00000C 32C02000 BIC.W #0x20, SR
292
293 do
294 {
295 IFG1 &= ~OFIFG; // Clear OFIFG
\ ??InitOsc_0:
\ 000010 E2C30200 BIC.B #0x2, &0x2
296 DelayCycles(100); // Wait ~130us
\ 000014 3C406400 MOV.W #0x64, R12
\ 000018 B012.... CALL #DelayCycles
297 } while (IFG1 & OFIFG); // Test oscillator fault flag
\ 00001C E2B30200 BIT.B #0x2, &0x2
\ 000020 F72F JC ??InitOsc_0
298
299 BCSCTL2 = SELM_3; // set XT1 as MCLK
\ 000022 F240C0005800 MOV.B #0xc0, &0x58
300 }
\ 000028 3041 RET
301 //------------------------------------------------------------------------------
\ In segment CODE, align 2
302 static void InitPorts(void)
\ InitPorts:
303 {
304 P1OUT = 0; // switch all unused ports to output
\ 000000 C2432100 MOV.B #0x0, &0x21
305 P1DIR = 0xff; // (Rem.: ports 3 & 5 are set in "cs8900.c")
\ 000004 F2432200 MOV.B #0xff, &0x22
306
307 P2OUT = 0;
\ 000008 C2432900 MOV.B #0x0, &0x29
308 P2DIR = 0xff;
\ 00000C F2432A00 MOV.B #0xff, &0x2a
309
310 P4OUT = 0;
\ 000010 C2431D00 MOV.B #0x0, &0x1d
311 P4DIR = 0xff;
\ 000014 F2431E00 MOV.B #0xff, &0x1e
312
313 P6SEL = 0x80; // use P6.7 for the ADC module
\ 000018 F24080003700 MOV.B #0x80, &0x37
314 P6OUT = 0;
\ 00001E C2433500 MOV.B #0x0, &0x35
315 P6DIR = 0x7f; // all output except P6.7
\ 000022 F2407F003600 MOV.B #0x7f, &0x36
316 }
\ 000028 3041 RET
317 //------------------------------------------------------------------------------
\ In segment CODE, align 2
318 static void InitADC12(void)
\ InitADC12:
319 {
320 ADC12CTL0 = ADC12ON + REFON + REF2_5V + SHT0_6;// Turn on ADC12, 2.5Vref, set SHT0
\ 000000 B2407006A001 MOV.W #0x670, &0x1a0
321 ADC12CTL1 = SHS_0 + SHP + CONSEQ_0; // Use sampling timer, ADC12SC
\ 000006 B2400002A201 MOV.W #0x200, &0x1a2
322 // triggers conversion,
323 // single channel single conversion,
324 }
\ 00000C 3041 RET
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "%3u">`:
\ 000000 25337500 DC8 "%3u"
325
326
Maximum stack usage in bytes:
Function CSTACK
-------- ------
GetAD7Val 2
GetTempVal 2
HTTPServer 6
-> TCPReleaseRxBuffer 2
-> memcpy 4
-> memcpy 6
-> memcpy 4
-> InsertDynamicValues 2
-> TCPTransmitTxBuffer 2
-> memcpy 4
-> InsertDynamicValues 4
-> TCPTransmitTxBuffer 4
-> TCPClose 4
InitADC12 2
InitOsc 2
-> DelayCycles 2
InitPorts 2
InsertDynamicValues 16
-> GetTempVal 12
-> sprintf 14
-> memcpy 16
-> GetAD7Val 12
-> sprintf 14
-> memcpy 16
main 2
-> InitOsc 2
-> InitPorts 2
-> InitADC12 2
-> TCPLowLevelInit 2
-> TCPPassiveOpen 2
-> HTTPServer 2
Segment part sizes:
Function/Label Bytes
-------------- -----
IFG1 1
WDTCTL 2
P1OUT 1
P1DIR 1
P2OUT 1
P2DIR 1
P4OUT 1
P4DIR 1
P6OUT 1
P6DIR 1
P6SEL 1
BCSCTL1 1
BCSCTL2 1
ADC12CTL0 2
ADC12CTL1 2
ADC12MEM0 2
ADC12MCTL0 1
WebSide 1427
GetResponse 45
PWebSide 2
HTTPBytesToSend 2
HTTPStatus 1
Temp_Tab 94
main 44
HTTPServer 206
GetAD7Val 42
GetTempVal 54
InsertDynamicValues 158
InitOsc 42
InitPorts 42
InitADC12 14
?<Constant "%3u"> 4
602 bytes in segment CODE
21 bytes in segment DATA16_AN
1 570 bytes in segment DATA16_C
5 bytes in segment DATA16_Z
602 bytes of CODE memory
1 570 bytes of CONST memory
5 bytes of DATA memory (+ 21 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -