⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pt100.lst

📁 原创
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -