📄 pt100.lst
字号:
(0209)
(0210)
(0211) unsigned int read_adc(void)//查询方式读取ADC单端通道
(0212) {
(0213) ADMUX=(0xc0|0x00); //adc_input:单端通道 0x00~0x07,0x1E,0x1F
_read_adc:
04D1 EC80 LDI R24,0xC0
04D2 B987 OUT 0x07,R24
(0214) //0xc0:选择内部2.56V参考电压
(0215) ADCSRA|=(1<<ADSC); //启动AD转换
04D3 9A36 SBI 0x06,6
(0216) while ((ADCSRA&(1<<ADIF))==0);
04D4 9B34 SBIS 0x06,4
04D5 CFFE RJMP 0x04D4
(0217) ADCSRA|=(1<<ADIF); //写1清除标志位
04D6 9A34 SBI 0x06,4
(0218) return ADC; //ADC=ADCH:ADCL
04D7 B104 IN R16,0x04
04D8 B115 IN R17,0x05
04D9 9508 RET
_AdAverage:
sum --> Y+68
count --> Y+72
temp --> R10
j --> R12
value_buf --> Y+0
i --> R14
04DA 940E08A7 CALL push_gset5x
04DC 97EF SBIW R28,0x3F
04DD 972A SBIW R28,0xA
(0219) }
(0220)
(0221) #define N (34)
(0222)
(0223) unsigned int AdAverage(void)
(0224) {
(0225) unsigned char count,i,j;
(0226) unsigned int value_buf[N];
(0227) unsigned int temp;
(0228) unsigned long sum=0;
04DE E080 LDI R24,0
04DF E090 LDI R25,0
04E0 E0A0 LDI R26,0
04E1 E0B0 LDI R27,0
04E2 01FE MOVW R30,R28
04E3 5BEC SUBI R30,0xBC
04E4 4FFF SBCI R31,0xFF
04E5 8380 STD Z+0,R24
04E6 8391 STD Z+1,R25
04E7 83A2 STD Z+2,R26
04E8 83B3 STD Z+3,R27
(0229) for (count=0;count<N;count++)
04E9 2400 CLR R0
04EA 01FE MOVW R30,R28
04EB 5BE8 SUBI R30,0xB8
04EC 4FFF SBCI R31,0xFF
04ED 8200 STD Z+0,R0
04EE C017 RJMP 0x0506
(0230) {
(0231) value_buf[count] = read_adc();
04EF DFE1 RCALL _read_adc
04F0 0118 MOVW R2,R16
04F1 E082 LDI R24,2
04F2 01FE MOVW R30,R28
04F3 5BE8 SUBI R30,0xB8
04F4 4FFF SBCI R31,0xFF
04F5 8000 LDD R0,Z+0
04F6 9D80 MUL R24,R0
04F7 01F0 MOVW R30,R0
04F8 01CE MOVW R24,R28
04F9 0FE8 ADD R30,R24
04FA 1FF9 ADC R31,R25
04FB 8231 STD Z+1,R3
04FC 8220 STD Z+0,R2
04FD 01FE MOVW R30,R28
04FE 5BE8 SUBI R30,0xB8
04FF 4FFF SBCI R31,0xFF
0500 8000 LDD R0,Z+0
0501 9403 INC R0
0502 01FE MOVW R30,R28
0503 5BE8 SUBI R30,0xB8
0504 4FFF SBCI R31,0xFF
0505 8200 STD Z+0,R0
0506 01FE MOVW R30,R28
0507 5BE8 SUBI R30,0xB8
0508 4FFF SBCI R31,0xFF
0509 8180 LDD R24,Z+0
050A 3282 CPI R24,0x22
050B F318 BCS 0x04EF
(0232)
(0233) }
(0234) for (j=0;j<N-1;j++)
050C 24CC CLR R12
050D C03B RJMP 0x0549
(0235) {
(0236) for (i=0;i<N-j;i++)
050E 24EE CLR R14
050F C033 RJMP 0x0543
(0237) {
(0238) if ( value_buf[i]>value_buf[i+1] )
0510 E082 LDI R24,2
0511 9D8E MUL R24,R14
0512 01CE MOVW R24,R28
0513 9602 ADIW R24,2
0514 01F0 MOVW R30,R0
0515 0FE8 ADD R30,R24
0516 1FF9 ADC R31,R25
0517 8020 LDD R2,Z+0
0518 8031 LDD R3,Z+1
0519 01CE MOVW R24,R28
051A 01F0 MOVW R30,R0
051B 0FE8 ADD R30,R24
051C 1FF9 ADC R31,R25
051D 8040 LDD R4,Z+0
051E 8051 LDD R5,Z+1
051F 1424 CP R2,R4
0520 0435 CPC R3,R5
0521 F500 BCC 0x0542
(0239) {
(0240) temp = value_buf[i];
0522 E082 LDI R24,2
0523 9D8E MUL R24,R14
0524 01F0 MOVW R30,R0
0525 01CE MOVW R24,R28
0526 0FE8 ADD R30,R24
0527 1FF9 ADC R31,R25
0528 80A0 LDD R10,Z+0
0529 80B1 LDD R11,Z+1
(0241) value_buf[i] = value_buf[i+1];
052A E082 LDI R24,2
052B 9D8E MUL R24,R14
052C 01CE MOVW R24,R28
052D 9602 ADIW R24,2
052E 01F0 MOVW R30,R0
052F 0FE8 ADD R30,R24
0530 1FF9 ADC R31,R25
0531 8020 LDD R2,Z+0
0532 8031 LDD R3,Z+1
0533 01CE MOVW R24,R28
0534 01F0 MOVW R30,R0
0535 0FE8 ADD R30,R24
0536 1FF9 ADC R31,R25
0537 8231 STD Z+1,R3
0538 8220 STD Z+0,R2
(0242) value_buf[i+1] = temp;
0539 E082 LDI R24,2
053A 9D8E MUL R24,R14
053B 01F0 MOVW R30,R0
053C 01CE MOVW R24,R28
053D 9602 ADIW R24,2
053E 0FE8 ADD R30,R24
053F 1FF9 ADC R31,R25
0540 82B1 STD Z+1,R11
0541 82A0 STD Z+0,R10
0542 94E3 INC R14
0543 E282 LDI R24,0x22
0544 198C SUB R24,R12
0545 16E8 CP R14,R24
0546 F408 BCC 0x0548
0547 CFC8 RJMP 0x0510
0548 94C3 INC R12
0549 2D8C MOV R24,R12
054A 3281 CPI R24,0x21
054B F408 BCC 0x054D
054C CFC1 RJMP 0x050E
(0243) }
(0244) }
(0245) }
(0246) for(count=1;count<N-1;count++)
054D 2400 CLR R0
054E 9403 INC R0
054F 01FE MOVW R30,R28
0550 5BE8 SUBI R30,0xB8
0551 4FFF SBCI R31,0xFF
0552 8200 STD Z+0,R0
0553 C029 RJMP 0x057D
(0247) sum += value_buf[count];
0554 E082 LDI R24,2
0555 01FE MOVW R30,R28
0556 5BE8 SUBI R30,0xB8
0557 4FFF SBCI R31,0xFF
0558 8000 LDD R0,Z+0
0559 9D80 MUL R24,R0
055A 01F0 MOVW R30,R0
055B 01CE MOVW R24,R28
055C 0FE8 ADD R30,R24
055D 1FF9 ADC R31,R25
055E 8020 LDD R2,Z+0
055F 8031 LDD R3,Z+1
0560 2444 CLR R4
0561 2455 CLR R5
0562 01FE MOVW R30,R28
0563 5BEC SUBI R30,0xBC
0564 4FFF SBCI R31,0xFF
0565 8060 LDD R6,Z+0
0566 8071 LDD R7,Z+1
0567 8082 LDD R8,Z+2
0568 8093 LDD R9,Z+3
0569 0C62 ADD R6,R2
056A 1C73 ADC R7,R3
056B 1C84 ADC R8,R4
056C 1C95 ADC R9,R5
056D 01FE MOVW R30,R28
056E 5BEC SUBI R30,0xBC
056F 4FFF SBCI R31,0xFF
0570 8260 STD Z+0,R6
0571 8271 STD Z+1,R7
0572 8282 STD Z+2,R8
0573 8293 STD Z+3,R9
0574 01FE MOVW R30,R28
0575 5BE8 SUBI R30,0xB8
0576 4FFF SBCI R31,0xFF
0577 8000 LDD R0,Z+0
0578 9403 INC R0
0579 01FE MOVW R30,R28
057A 5BE8 SUBI R30,0xB8
057B 4FFF SBCI R31,0xFF
057C 8200 STD Z+0,R0
057D 01FE MOVW R30,R28
057E 5BE8 SUBI R30,0xB8
057F 4FFF SBCI R31,0xFF
0580 8180 LDD R24,Z+0
0581 3281 CPI R24,0x21
0582 F408 BCC 0x0584
0583 CFD0 RJMP 0x0554
(0248) return (sum/(N-2));
0584 E085 LDI R24,5
0585 E090 LDI R25,0
0586 01FE MOVW R30,R28
0587 5BEC SUBI R30,0xBC
0588 4FFF SBCI R31,0xFF
0589 8020 LDD R2,Z+0
058A 8031 LDD R3,Z+1
058B 8042 LDD R4,Z+2
058C 8053 LDD R5,Z+3
058D 938A ST R24,-Y
058E 0181 MOVW R16,R2
058F 0192 MOVW R18,R4
0590 940E08D0 CALL lsr32
0592 96EF ADIW R28,0x3F
0593 962A ADIW R28,0xA
0594 940E089D CALL pop_gset5x
0596 9508 RET
_AdAverageT:
sum --> Y+40
count --> Y+44
temp --> R10
j --> R12
value_buf --> Y+0
i --> R14
0597 940E08A7 CALL push_gset5x
0599 97AD SBIW R28,0x2D
(0249) }
(0250)
(0251) unsigned int AdAverageT(void)
(0252) {
(0253) unsigned char count,i,j;
(0254) unsigned int value_buf[20];
(0255) unsigned int temp;
(0256) unsigned long sum=0;
059A E080 LDI R24,0
059B E090 LDI R25,0
059C E0A0 LDI R26,0
059D E0B0 LDI R27,0
059E 01FE MOVW R30,R28
059F A780 STD Z+40,R24
05A0 A791 STD Z+41,R25
05A1 A7A2 STD Z+42,R26
05A2 A7B3 STD Z+43,R27
(0257) for (count=0;count<20;count++)
05A3 2400 CLR R0
05A4 A60C STD Y+44,R0
05A5 C00E RJMP 0x05B4
(0258) {
(0259) value_buf[count] = AdAverage();
05A6 DF33 RCALL _AdAverage
05A7 0118 MOVW R2,R16
05A8 E082 LDI R24,2
05A9 A40C LDD R0,Y+44
05AA 9D80 MUL R24,R0
05AB 01F0 MOVW R30,R0
05AC 01CE MOVW R24,R28
05AD 0FE8 ADD R30,R24
05AE 1FF9 ADC R31,R25
05AF 8231 STD Z+1,R3
05B0 8220 STD Z+0,R2
05B1 A40C LDD R0,Y+44
05B2 9403 INC R0
05B3 A60C STD Y+44,R0
05B4 A58C LDD R24,Y+44
05B5 3184 CPI R24,0x14
05B6 F378 BCS 0x05A6
(0260)
(0261) }
(0262) for (j=0;j<20-1;j++)
05B7 24CC CLR R12
05B8 C03B RJMP 0x05F4
(0263) {
(0264) for (i=0;i<20-j;i++)
05B9 24EE CLR R14
05BA C033 RJMP 0x05EE
(0265) {
(0266) if ( value_buf[i]>value_buf[i+1] )
05BB E082 LDI R24,2
05BC 9D8E MUL R24,R14
05BD 01CE MOVW R24,R28
05BE 9602 ADIW R24,2
05BF 01F0 MOVW R30,R0
05C0 0FE8 ADD R30,R24
05C1 1FF9 ADC R31,R25
05C2 8020 LDD R2,Z+0
05C3 8031 LDD R3,Z+1
05C4 01CE MOVW R24,R28
05C5 01F0 MOVW R30,R0
05C6 0FE8 ADD R30,R24
05C7 1FF9 ADC R31,R25
05C8 8040 LDD R4,Z+0
05C9 8051 LDD R5,Z+1
05CA 1424 CP R2,R4
05CB 0435 CPC R3,R5
05CC F500 BCC 0x05ED
(0267) {
(0268) temp = value_buf[i];
05CD E082 LDI R24,2
05CE 9D8E MUL R24,R14
05CF 01F0 MOVW R30,R0
05D0 01CE MOVW R24,R28
05D1 0FE8 ADD R30,R24
05D2 1FF9 ADC R31,R25
05D3 80A0 LDD R10,Z+0
05D4 80B1 LDD R11,Z+1
(0269) value_buf[i] = value_buf[i+1];
05D5 E082 LDI R24,2
05D6 9D8E MUL R24,R14
05D7 01CE MOVW R24,R28
05D8 9602 ADIW R24,2
05D9 01F0 MOVW R30,R0
05DA 0FE8 ADD R30,R24
05DB 1FF9 ADC R31,R25
05DC 8020 LDD R2,Z+0
05DD 8031 LDD R3,Z+1
05DE 01CE MOVW R24,R28
05DF 01F0 MOVW R30,R0
05E0 0FE8 ADD R30,R24
05E1 1FF9 ADC R31,R25
05E2 8231 STD Z+1,R3
05E3 8220 STD Z+0,R2
(0270) value_buf[i+1] = temp;
05E4 E082 LDI R24,2
05E5 9D8E MUL R24,R14
05E6 01F0 MOVW R30,R0
05E7 01CE MOVW R24,R28
05E8 9602 ADIW R24,2
05E9 0FE8 ADD R30,R24
05EA 1FF9 ADC R31,R25
05EB 82B1 STD Z+1,R11
05EC 82A0 STD Z+0,R10
05ED 94E3 INC R14
05EE E184 LDI R24,0x14
05EF 198C SUB R24,R12
05F0 16E8 CP R14,R24
05F1 F408 BCC 0x05F3
05F2 CFC8 RJMP 0x05BB
05F3 94C3 INC R12
05F4 2D8C MOV R24,R12
05F5 3183 CPI R24,0x13
05F6 F408 BCC 0x05F8
05F7 CFC1 RJMP 0x05B9
(0271) }
(0272) }
(0273) }
(0274) for(count=1;count<20-1;count++)
05F8 2400 CLR R0
05F9 9403 INC R0
05FA A60C STD Y+44,R0
05FB C01C RJMP 0x0618
(0275) sum += value_buf[count];
05FC E082 LDI R24,2
05FD A40C LDD R0,Y+44
05FE 9D80 MUL R24,R0
05FF 01F0 MOVW R30,R0
0600 01CE MOVW R24,R28
0601 0FE8 ADD R30,R24
0602 1FF9 ADC R31,R25
0603 8020 LDD R2,Z+0
0604 8031 LDD R3,Z+1
0605 2444 CLR R4
0606 2455 CLR R5
0607 01FE MOVW R30,R28
0608 A460 LDD R6,Z+40
0609 A471 LDD R7,Z+41
060A A482 LDD R8,Z+42
060B A493 LDD R9,Z+43
060C 0C62 ADD R6,R2
060D 1C73 ADC R7,R3
060E 1C84 ADC R8,R4
060F 1C95 ADC R9,R5
0610 01FE MOVW R30,R28
0611 A660 STD Z+40,R6
0612 A671 STD Z+41,R7
0613 A682 STD Z+42,R8
0614 A693 STD Z+43,R9
0615 A40C LDD R0,Y+44
0616 9403 INC R0
0617 A60C STD Y+44,R0
0618 A58C LDD R24,Y+44
0619 3183 CPI R24,0x13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -