📄 adc.lst
字号:
ARM COMPILER V2.53, adc 02/08/06 16:25:35 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE adc
OBJECT MODULE PLACED IN .\Obj\adc.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe adc.c THUMB BROWSE DEBUG PRINT(.\LST\ADC.LST) TABS(4) OBJECT(.\Obj\adc.obj)
stmt level source
1
2 #include<lpc214x.h>
3 #include <code.h>
4
5
6
7
8 //10K的热敏电阻0-50度所对应的码表值
9 const unsigned int Temp_code[]=
10 {
11 // 0-25
12 2843,2718,2599,2486,2379,2277,2180,2087,1999,1916,1836,1760,1688,1619,1553,1490,1430,1373,1319,1266,1217
-,1169,1124,1081,1039,1000,
13 // 26--50
14 962,925,891,857,826,795,766,738,711,686,661,638,615,593,573,553,534,515,497,480,464,449,433,419,405,
15 // 51-75
16 // 392,379,366,355,343,332,321,311,301,292,283,274,265,257,249,242,234,227,220,214,208,201,195,190,184,
17 // 76--100
18 // 179,174,169,164,159,155,150,146,142,138,134,131,127,124,120,117,114,111,108,105,102,100,97,94,92
19
20
21 };
22
23 /***********************************************************************
24 //查电阻值所对应的温度是多少
25 ***********************************************************************/
26
27
28 unsigned char check_code(unsigned int k)
29 {
30 1 unsigned char i;
31 1 if(k<405)return(51); //大于50度以上都显示为51度
32 1 for(i=0;k<Temp_code[i];i++);
33 1 return (i-1);
34 1
35 1 }
36
37 /***********************************************************************
38 //R=30K或20K
39 //RT=10K
40 ***********************************************************************/
41
42
43 unsigned int Totemp(unsigned int AD)
44 {
45 1 unsigned int Itemp;
46 1 unsigned int Tk;
47 1 Tk=1023-AD;
48 1
49 1 Itemp=(unsigned int)(((unsigned long)1000*AD)/Tk); //扩大100倍
50 1 return(Itemp);
51 1 }
52
53
54 unsigned char Get_Temp(unsigned int i)
55 {
56 1 return (check_code(Totemp(i))); //转换温度
57 1 }
58
ARM COMPILER V2.53, adc 02/08/06 16:25:35 PAGE 2
59
60
61
62 void Ad_fun (void) { /* Delay function */
63 1 unsigned int val;
64 1 unsigned char t;
65 1 AD0CR |= 1<<24; /* Start A/D Conversion */
66 1 do {
67 2 val = AD0DR1; /* Read A/D Data Register */
68 2 } while ((val & 0x80000000) == 0); /* Wait for end of A/D Conversion */
69 1 AD0CR &= ~0x01000000; /* Stop A/D Conversion */
70 1 val = (val >> 6) & 0x03FF; /* Extract AIN0 Value */
71 1
72 1 t=Get_Temp(val)-2; //校准
73 1
74 1 Draw_a(t/10,88,0,8);
75 1 Draw_a(t%10,96,0,8);
76 1 Draw_a(13,104,0,8);
77 1
78 1 }
ARM COMPILER V2.53, adc 02/08/06 16:25:35 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (Draw_a?T)
EXTERN CODE16 (?C?UDIV?T)
EXTERN CODE16 (?C?SDIV?T)
*** PUBLICS:
PUBLIC check_code?T
PUBLIC Totemp?T
PUBLIC Get_Temp?T
PUBLIC Ad_fun?T
PUBLIC Temp_code
*** DATA SEGMENT '?CON?adc':
00000000 Temp_code:
00000000 BEGIN_INIT
00000000 00000B1B DD 0xB1B
00000004 00000A9E DD 0xA9E
00000008 00000A27 DD 0xA27
0000000C 000009B6 DD 0x9B6
00000010 0000094B DD 0x94B
00000014 000008E5 DD 0x8E5
00000018 00000884 DD 0x884
0000001C 00000827 DD 0x827
00000020 000007CF DD 0x7CF
00000024 0000077C DD 0x77C
00000028 0000072C DD 0x72C
0000002C 000006E0 DD 0x6E0
00000030 00000698 DD 0x698
00000034 00000653 DD 0x653
00000038 00000611 DD 0x611
0000003C 000005D2 DD 0x5D2
00000040 00000596 DD 0x596
00000044 0000055D DD 0x55D
00000048 00000527 DD 0x527
0000004C 000004F2 DD 0x4F2
00000050 000004C1 DD 0x4C1
00000054 00000491 DD 0x491
00000058 00000464 DD 0x464
0000005C 00000439 DD 0x439
00000060 0000040F DD 0x40F
00000064 000003E8 DD 0x3E8
00000068 000003C2 DD 0x3C2
0000006C 0000039D DD 0x39D
00000070 0000037B DD 0x37B
00000074 00000359 DD 0x359
00000078 0000033A DD 0x33A
0000007C 0000031B DD 0x31B
00000080 000002FE DD 0x2FE
00000084 000002E2 DD 0x2E2
00000088 000002C7 DD 0x2C7
0000008C 000002AE DD 0x2AE
00000090 00000295 DD 0x295
00000094 0000027E DD 0x27E
00000098 00000267 DD 0x267
0000009C 00000251 DD 0x251
000000A0 0000023D DD 0x23D
000000A4 00000229 DD 0x229
000000A8 00000216 DD 0x216
000000AC 00000203 DD 0x203
000000B0 000001F1 DD 0x1F1
000000B4 000001E0 DD 0x1E0
000000B8 000001D0 DD 0x1D0
000000BC 000001C1 DD 0x1C1
ARM COMPILER V2.53, adc 02/08/06 16:25:35 PAGE 4
000000C0 000001B1 DD 0x1B1
000000C4 000001A3 DD 0x1A3
000000C8 00000195 DD 0x195
000000CC END_INIT
*** CODE SEGMENT '?PR?check_code?T?adc':
28: unsigned char check_code(unsigned int k)
00000000 1C02 MOV R2,R0 ; k
00000002 ---- Variable 'k' assigned to Register 'R2' ----
29: {
00000002 ; SCOPE-START
31: if(k<405)return(51); //大于50度以上都显示为51度
00000002 1C10 MOV R0,R2 ; k
00000004 4800 LDR R1,=0x195
00000006 4288 CMP R0,R1 ; k
00000008 D201 BCS L_7 ; T=0x0000000E
0000000A 2033 MOV R0,#0x33
0000000C E011 B L_2 ; T=0x00000032
32: for(i=0;k<Temp_code[i];i++);
0000000E L_7:
0000000E 2100 MOV R1,#0x0
00000010 ---- Variable 'i' assigned to Register 'R1' ----
00000010 E002 B L_5 ; T=0x00000018
00000012 L_3:
00000012 3101 ADD R1,#0x1
00000014 0609 LSL R1,R1,#0x18
00000016 0E09 LSR R1,R1,#0x18
00000018 L_5:
00000018 1C08 MOV R0,R1 ; i
0000001A 0603 LSL R3,R0,#0x18 ; i
0000001C 0E1B LSR R3,R3,#0x18
0000001E 009B LSL R3,R3,#0x2
00000020 4800 LDR R0,=Temp_code ; Temp_code
00000022 58C3 LDR R3,[R0,R3]
00000024 1C10 MOV R0,R2 ; k
00000026 4298 CMP R0,R3 ; k
00000028 D3F3 BCC L_3 ; T=0x00000012
33: return (i-1);
0000002A 1C08 MOV R0,R1 ; i
0000002C 0600 LSL R0,R0,#0x18 ; i
0000002E 0E00 LSR R0,R0,#0x18
00000030 3801 SUB R0,#0x1
00000032 ; SCOPE-END
35: }
00000032 L_2:
00000032 4770 BX R14
00000034 ENDP ; 'check_code?T'
*** CODE SEGMENT '?PR?Totemp?T?adc':
43: unsigned int Totemp(unsigned int AD)
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; AD
00000004 ---- Variable 'AD' assigned to Register 'R1' ----
44: {
00000004 ; SCOPE-START
47: Tk=1023-AD;
00000004 1C08 MOV R0,R1 ; AD
00000006 4800 LDR R2,=0x3FF
00000008 1A12 SUB R2,R0 ; AD
0000000A ---- Variable 'Tk' assigned to Register 'R2' ----
49: Itemp=(unsigned int)(((unsigned long)1000*AD)/Tk); //扩大100倍
0000000A 1C08 MOV R0,R1 ; AD
0000000C 49FA LDR R1,=0x3E8
0000000E 4348 MUL R0,R1
00000010 1C11 MOV R1,R2 ; Tk
00000012 F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
00000014 FFF5 BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
ARM COMPILER V2.53, adc 02/08/06 16:25:35 PAGE 5
00000016 1C08 MOV R0,R1
00000018 ---- Variable 'Itemp' assigned to Register 'R1' ----
50: return(Itemp);
00000018 1C08 MOV R0,R1 ; Itemp
0000001A ; SCOPE-END
51: }
0000001A BC08 POP {R3}
0000001C 4718 BX R3
0000001E ENDP ; 'Totemp?T'
*** CODE SEGMENT '?PR?Get_Temp?T?adc':
54: unsigned char Get_Temp(unsigned int i)
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; i
00000004 ---- Variable 'i' assigned to Register 'R1' ----
56: return (check_code(Totemp(i))); //转换温度
00000004 1C08 MOV R0,R1 ; i
00000006 F7FF BL Totemp?T ; T=0x0001 (1)
00000008 FFFB BL Totemp?T ; T=0x0001 (2)
0000000A F7FF BL check_code?T ; T=0x0001 (1)
0000000C FFF9 BL check_code?T ; T=0x0001 (2)
0000000E 0600 LSL R0,R0,#0x18 ; check_code?T
00000010 0E00 LSR R0,R0,#0x18
57: }
00000012 BC08 POP {R3}
00000014 4718 BX R3
00000016 ENDP ; 'Get_Temp?T'
*** CODE SEGMENT '?PR?Ad_fun?T?adc':
62: void Ad_fun (void) { /* Delay function */
00000000 B510 PUSH {R4,LR}
00000002 ; SCOPE-START
65: AD0CR |= 1<<24; /* Start A/D Conversion */
00000002 4800 LDR R2,=0x1000000
00000004 4800 LDR R0,=0xE0034000
00000006 6801 LDR R1,[R0,#0x0]
00000008 4311 ORR R1,R2
0000000A 6001 STR R1,[R0,#0x0]
66: do {
0000000C L_10:
67: val = AD0DR1; /* Read A/D Data Register */
0000000C 4800 LDR R0,=0xE0034014
0000000E 6801 LDR R1,[R0,#0x0]
00000010 ---- Variable 'val' assigned to Register 'R1' ----
68: } while ((val & 0x80000000) == 0); /* Wait for end of A/D Conversion */
00000010 1C08 MOV R0,R1 ; val
00000012 4800 LDR R2,=0x80000000
00000014 4210 TST R0,R2 ; val
00000016 D0F9 BEQ L_10 ; T=0x0000000C
69: AD0CR &= ~0x01000000; /* Stop A/D Conversion */
00000018 4800 LDR R3,=0x1000000
0000001A 4800 LDR R0,=0xE0034000
0000001C 6802 LDR R2,[R0,#0x0]
0000001E 439A BIC R2,R3
00000020 6002 STR R2,[R0,#0x0]
70: val = (val >> 6) & 0x03FF; /* Extract AIN0 Value */
00000022 0989 LSR R1,R1,#0x6 ; val
00000024 4800 LDR R0,=0x3FF
00000026 4001 AND R1,R0
72: t=Get_Temp(val)-2; //校准
00000028 1C08 MOV R0,R1 ; val
0000002A F7FF BL Get_Temp?T ; T=0x0001 (1)
0000002C FFE9 BL Get_Temp?T ; T=0x0001 (2)
0000002E 0604 LSL R4,R0,#0x18 ; Get_Temp?T
00000030 0E24 LSR R4,R4,#0x18
00000032 3C02 SUB R4,#0x2
00000034 0624 LSL R4,R4,#0x18
00000036 0E24 LSR R4,R4,#0x18
ARM COMPILER V2.53, adc 02/08/06 16:25:35 PAGE 6
00000038 ---- Variable 't' assigned to Register 'R4' ----
74: Draw_a(t/10,88,0,8);
00000038 1C20 MOV R0,R4 ; t
0000003A 0600 LSL R0,R0,#0x18 ; t
0000003C 0E00 LSR R0,R0,#0x18
0000003E 210A MOV R1,#0xA
00000040 F7FF BL ?C?SDIV?T ; T=0x0001 (1) ; ?C?SDIV?T
00000042 FFDE BL ?C?SDIV?T ; T=0x0001 (2) ; ?C?SDIV?T
00000044 1C08 MOV R0,R1
00000046 2158 MOV R1,#0x58
00000048 2200 MOV R2,#0x0
0000004A 2308 MOV R3,#0x8
0000004C F7FF BL Draw_a?T ; T=0x0001 (1)
0000004E FFD8 BL Draw_a?T ; T=0x0001 (2)
75: Draw_a(t%10,96,0,8);
00000050 1C20 MOV R0,R4 ; t
00000052 0600 LSL R0,R0,#0x18 ; t
00000054 0E00 LSR R0,R0,#0x18
00000056 210A MOV R1,#0xA
00000058 F7FF BL ?C?SDIV?T ; T=0x0001 (1) ; ?C?SDIV?T
0000005A FFD2 BL ?C?SDIV?T ; T=0x0001 (2) ; ?C?SDIV?T
0000005C 1C01 MOV R1,R0
0000005E 2160 MOV R1,#0x60
00000060 2200 MOV R2,#0x0
00000062 2308 MOV R3,#0x8
00000064 F7FF BL Draw_a?T ; T=0x0001 (1)
00000066 FFCC BL Draw_a?T ; T=0x0001 (2)
76: Draw_a(13,104,0,8);
00000068 200D MOV R0,#0xD
0000006A 2168 MOV R1,#0x68
0000006C 2200 MOV R2,#0x0
0000006E 2308 MOV R3,#0x8
00000070 F7FF BL Draw_a?T ; T=0x0001 (1)
00000072 FFC6 BL Draw_a?T ; T=0x0001 (2)
00000074 ; SCOPE-END
00000074 BC10 POP {R4}
00000076 BC08 POP {R3}
00000078 4718 BX R3
0000007A ENDP ; 'Ad_fun?T'
Module Information Static
----------------------------------
code size = ------
data size = ------
const size = 204
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -