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

📄 main.lss

📁 AVR atmega64串口驱动
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     92a:	85 bd       	out	0x25, r24	; 37
     92c:	08 95       	ret

0000092e <__vector_9>:
}

//T2比较中断服务程序
//#pragma interrupt_handler timer2_comp_isr:5
//void timer2_comp_isr(void)
SIGNAL(SIG_OUTPUT_COMPARE2)
{
     92e:	1f 92       	push	r1
     930:	0f 92       	push	r0
     932:	0f b6       	in	r0, 0x3f	; 63
     934:	0f 92       	push	r0
     936:	11 24       	eor	r1, r1
     938:	8f 93       	push	r24
    count50ms++;
     93a:	80 91 26 02 	lds	r24, 0x0226
     93e:	8f 5f       	subi	r24, 0xFF	; 255
     940:	80 93 26 02 	sts	0x0226, r24
    if(count50ms==3)
     944:	80 91 26 02 	lds	r24, 0x0226
     948:	83 30       	cpi	r24, 0x03	; 3
     94a:	09 f0       	breq	.+2      	; 0x94e <__vector_9+0x20>
     94c:	87 c0       	rjmp	.+270    	; 0xa5c <__vector_9+0x12e>
	{
		count50ms=0;
     94e:	10 92 26 02 	sts	0x0226, r1
		time100ms=1;
     952:	80 91 5b 0a 	lds	r24, 0x0A5B
     956:	81 60       	ori	r24, 0x01	; 1
     958:	80 93 5b 0a 	sts	0x0A5B, r24
	// time100ms_n++;
		count500ms++;
     95c:	80 91 67 0a 	lds	r24, 0x0A67
     960:	8f 5f       	subi	r24, 0xFF	; 255
     962:	80 93 67 0a 	sts	0x0A67, r24
		if(count500ms==5)
     966:	80 91 67 0a 	lds	r24, 0x0A67
     96a:	85 30       	cpi	r24, 0x05	; 5
     96c:	09 f0       	breq	.+2      	; 0x970 <__vector_9+0x42>
     96e:	76 c0       	rjmp	.+236    	; 0xa5c <__vector_9+0x12e>
		{
			time500ms_n++;
     970:	80 91 24 02 	lds	r24, 0x0224
     974:	8f 5f       	subi	r24, 0xFF	; 255
     976:	80 93 24 02 	sts	0x0224, r24
			count500ms=0;
     97a:	10 92 67 0a 	sts	0x0A67, r1
			time500ms=1;
     97e:	80 91 5b 0a 	lds	r24, 0x0A5B
     982:	82 60       	ori	r24, 0x02	; 2
     984:	80 93 5b 0a 	sts	0x0A5B, r24
			count1s++;
     988:	80 91 68 0a 	lds	r24, 0x0A68
     98c:	8f 5f       	subi	r24, 0xFF	; 255
     98e:	80 93 68 0a 	sts	0x0A68, r24
			if(count1s==2)
     992:	80 91 68 0a 	lds	r24, 0x0A68
     996:	82 30       	cpi	r24, 0x02	; 2
     998:	09 f0       	breq	.+2      	; 0x99c <__vector_9+0x6e>
     99a:	60 c0       	rjmp	.+192    	; 0xa5c <__vector_9+0x12e>
			{
				count1s=0;
     99c:	10 92 68 0a 	sts	0x0A68, r1
				time1s=1;
     9a0:	80 91 5b 0a 	lds	r24, 0x0A5B
     9a4:	84 60       	ori	r24, 0x04	; 4
     9a6:	80 93 5b 0a 	sts	0x0A5B, r24
				time1s_n++;
     9aa:	80 91 23 02 	lds	r24, 0x0223
     9ae:	8f 5f       	subi	r24, 0xFF	; 255
     9b0:	80 93 23 02 	sts	0x0223, r24
				count3s++;
     9b4:	80 91 22 02 	lds	r24, 0x0222
     9b8:	8f 5f       	subi	r24, 0xFF	; 255
     9ba:	80 93 22 02 	sts	0x0222, r24
				count30s++;
     9be:	80 91 21 02 	lds	r24, 0x0221
     9c2:	8f 5f       	subi	r24, 0xFF	; 255
     9c4:	80 93 21 02 	sts	0x0221, r24
				count1m++;
     9c8:	80 91 20 02 	lds	r24, 0x0220
     9cc:	8f 5f       	subi	r24, 0xFF	; 255
     9ce:	80 93 20 02 	sts	0x0220, r24
				if(count3s==3)
     9d2:	80 91 22 02 	lds	r24, 0x0222
     9d6:	83 30       	cpi	r24, 0x03	; 3
     9d8:	39 f4       	brne	.+14     	; 0x9e8 <__vector_9+0xba>
				{
					count3s=0;
     9da:	10 92 22 02 	sts	0x0222, r1
					time3s=1;
     9de:	80 91 5b 0a 	lds	r24, 0x0A5B
     9e2:	88 60       	ori	r24, 0x08	; 8
     9e4:	80 93 5b 0a 	sts	0x0A5B, r24
				}
				if(count30s==30)
     9e8:	80 91 21 02 	lds	r24, 0x0221
     9ec:	8e 31       	cpi	r24, 0x1E	; 30
     9ee:	39 f4       	brne	.+14     	; 0x9fe <__vector_9+0xd0>
				{
					count30s=0;
     9f0:	10 92 21 02 	sts	0x0221, r1
					time30s=1;	
     9f4:	80 91 5a 0a 	lds	r24, 0x0A5A
     9f8:	80 64       	ori	r24, 0x40	; 64
     9fa:	80 93 5a 0a 	sts	0x0A5A, r24
				}
				if(count1m==60)
     9fe:	80 91 20 02 	lds	r24, 0x0220
     a02:	8c 33       	cpi	r24, 0x3C	; 60
     a04:	b9 f4       	brne	.+46     	; 0xa34 <__vector_9+0x106>
				{
					count1m=0;
     a06:	10 92 20 02 	sts	0x0220, r1
					time1m=1;	
     a0a:	80 91 5b 0a 	lds	r24, 0x0A5B
     a0e:	80 61       	ori	r24, 0x10	; 16
     a10:	80 93 5b 0a 	sts	0x0A5B, r24
					count1h++;
     a14:	80 91 1f 02 	lds	r24, 0x021F
     a18:	8f 5f       	subi	r24, 0xFF	; 255
     a1a:	80 93 1f 02 	sts	0x021F, r24
					if(count1h==60)
     a1e:	80 91 1f 02 	lds	r24, 0x021F
     a22:	8c 33       	cpi	r24, 0x3C	; 60
     a24:	39 f4       	brne	.+14     	; 0xa34 <__vector_9+0x106>
					{
						count1h=0;
     a26:	10 92 1f 02 	sts	0x021F, r1
						time1h=1;
     a2a:	80 91 5b 0a 	lds	r24, 0x0A5B
     a2e:	80 62       	ori	r24, 0x20	; 32
     a30:	80 93 5b 0a 	sts	0x0A5B, r24
					}
				}
				if(sms_t)//发送短信时,开始计时
     a34:	80 91 66 0a 	lds	r24, 0x0A66
     a38:	87 ff       	sbrs	r24, 7
     a3a:	10 c0       	rjmp	.+32     	; 0xa5c <__vector_9+0x12e>
				{
					count_time_out++;
     a3c:	80 91 28 02 	lds	r24, 0x0228
     a40:	8f 5f       	subi	r24, 0xFF	; 255
     a42:	80 93 28 02 	sts	0x0228, r24
					if(count_time_out==15)
     a46:	80 91 28 02 	lds	r24, 0x0228
     a4a:	8f 30       	cpi	r24, 0x0F	; 15
     a4c:	39 f4       	brne	.+14     	; 0xa5c <__vector_9+0x12e>
					{
						count_time_out=0;
     a4e:	10 92 28 02 	sts	0x0228, r1
						timeout=1;
     a52:	80 91 66 0a 	lds	r24, 0x0A66
     a56:	82 60       	ori	r24, 0x02	; 2
     a58:	80 93 66 0a 	sts	0x0A66, r24
     a5c:	8f 91       	pop	r24
     a5e:	0f 90       	pop	r0
     a60:	0f be       	out	0x3f, r0	; 63
     a62:	0f 90       	pop	r0
     a64:	1f 90       	pop	r1
     a66:	18 95       	reti

00000a68 <timer>:
					}
				}
				
			}
		}
	 
	}
}
//定时器初始化
void timer (void)
{
	//timer0_init();
	timer2_init();
     a68:	0e 94 8b 04 	call	0x916 <timer2_init>
     a6c:	08 95       	ret

00000a6e <AdcConvert>:



uint AdcConvert(uchar adc_input)
{
     a6e:	ff 92       	push	r15
     a70:	0f 93       	push	r16
     a72:	1f 93       	push	r17
     a74:	cf 93       	push	r28
     a76:	df 93       	push	r29
     a78:	cd b7       	in	r28, 0x3d	; 61
     a7a:	de b7       	in	r29, 0x3e	; 62
     a7c:	60 97       	sbiw	r28, 0x10	; 16
     a7e:	0f b6       	in	r0, 0x3f	; 63
     a80:	f8 94       	cli
     a82:	de bf       	out	0x3e, r29	; 62
     a84:	0f be       	out	0x3f, r0	; 63
     a86:	cd bf       	out	0x3d, r28	; 61
uint g_aAdValue[8];	//A/D转换缓冲区
	uchar i;
	uint ret;
	uchar max_id,min_id,max_value,min_value;
	
	ADMUX=(0xc0|adc_input);//内部2.56V参考电压,0通道
     a88:	80 6c       	ori	r24, 0xC0	; 192
     a8a:	87 b9       	out	0x07, r24	; 7
	ADCSRA|=_BV(ADEN);//使能ADC,单次转换模式
     a8c:	37 9a       	sbi	0x06, 7	; 6
     a8e:	47 e0       	ldi	r20, 0x07	; 7
     a90:	20 e0       	ldi	r18, 0x00	; 0
     a92:	30 e0       	ldi	r19, 0x00	; 0
	//连续转换8次
	for(i=0;i<8;i++)
	{
		ADCSRA|=_BV(ADSC);
     a94:	36 9a       	sbi	0x06, 6	; 6
    can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
     a96:	8c e3       	ldi	r24, 0x3C	; 60
	__asm__ volatile (
     a98:	8a 95       	dec	r24
     a9a:	f1 f7       	brne	.-4      	; 0xa98 <AdcConvert+0x2a>
     a9c:	36 9b       	sbis	0x06, 6	; 6
     a9e:	05 c0       	rjmp	.+10     	; 0xaaa <AdcConvert+0x3c>
     aa0:	8c e3       	ldi	r24, 0x3C	; 60
     aa2:	8a 95       	dec	r24
     aa4:	f1 f7       	brne	.-4      	; 0xaa2 <AdcConvert+0x34>
     aa6:	36 99       	sbic	0x06, 6	; 6
     aa8:	fb cf       	rjmp	.-10     	; 0xaa0 <AdcConvert+0x32>
		_delay_loop_1(60);
		while(ADCSRA&_BV(ADSC))
			_delay_loop_1(60);
		ret=ADCL;
     aaa:	84 b1       	in	r24, 0x04	; 4
     aac:	68 2f       	mov	r22, r24
     aae:	77 27       	eor	r23, r23
		ret|=(uint)(ADCH<<8);
     ab0:	85 b1       	in	r24, 0x05	; 5
     ab2:	99 27       	eor	r25, r25
     ab4:	98 2f       	mov	r25, r24
     ab6:	88 27       	eor	r24, r24
     ab8:	86 2b       	or	r24, r22
     aba:	97 2b       	or	r25, r23
		g_aAdValue[i]=ret;
     abc:	8e 01       	movw	r16, r28
     abe:	0f 5f       	subi	r16, 0xFF	; 255
     ac0:	1f 4f       	sbci	r17, 0xFF	; 255
     ac2:	f9 01       	movw	r30, r18
     ac4:	e0 0f       	add	r30, r16
     ac6:	f1 1f       	adc	r31, r17
     ac8:	91 83       	std	Z+1, r25	; 0x01
     aca:	80 83       	st	Z, r24
     acc:	41 50       	subi	r20, 0x01	; 1
     ace:	2e 5f       	subi	r18, 0xFE	; 254
     ad0:	3f 4f       	sbci	r19, 0xFF	; 255
     ad2:	47 ff       	sbrs	r20, 7
     ad4:	df cf       	rjmp	.-66     	; 0xa94 <AdcConvert+0x26>
	}
	ret=0;
     ad6:	60 e0       	ldi	r22, 0x00	; 0
     ad8:	70 e0       	ldi	r23, 0x00	; 0
     ada:	46 e0       	ldi	r20, 0x06	; 6
     adc:	fe 01       	movw	r30, r28
     ade:	33 96       	adiw	r30, 0x03	; 3
	for(i=1;i<8;i++)
		ret+=g_aAdValue[i];
     ae0:	81 91       	ld	r24, Z+
     ae2:	91 91       	ld	r25, Z+
     ae4:	68 0f       	add	r22, r24
     ae6:	79 1f       	adc	r23, r25
     ae8:	41 50       	subi	r20, 0x01	; 1
     aea:	47 ff       	sbrs	r20, 7
     aec:	f9 cf       	rjmp	.-14     	; 0xae0 <AdcConvert+0x72>
	
	//找到最大和最小值索引	
	ret/=7;
     aee:	cb 01       	movw	r24, r22
     af0:	67 e0       	ldi	r22, 0x07	; 7
     af2:	70 e0       	ldi	r23, 0x00	; 0
     af4:	0e 94 c9 1d 	call	0x3b92 <__udivmodhi4>
	max_id=min_id=1;
     af8:	b1 e0       	ldi	r27, 0x01	; 1
     afa:	fb 2e       	mov	r15, r27
	max_value=min_value=0;
     afc:	a0 e0       	ldi	r26, 0x00	; 0
     afe:	5a 2f       	mov	r21, r26
	for(i=1;i<8;i++)
     b00:	4b 2f       	mov	r20, r27
     b02:	f8 01       	movw	r30, r16
     b04:	32 96       	adiw	r30, 0x02	; 2
	{
		if(g_aAdValue[i]>ret)
     b06:	20 81       	ld	r18, Z
     b08:	31 81       	ldd	r19, Z+1	; 0x01
     b0a:	62 17       	cp	r22, r18
     b0c:	73 07       	cpc	r23, r19
     b0e:	58 f4       	brcc	.+22     	; 0xb26 <AdcConvert+0xb8>
		{
			if(g_aAdValue[i]-ret>max_value)
     b10:	26 1b       	sub	r18, r22
     b12:	37 0b       	sbc	r19, r23
     b14:	85 2f       	mov	r24, r21
     b16:	99 27       	eor	r25, r25
     b18:	82 17       	cp	r24, r18
     b1a:	93 07       	cpc	r25, r19
     b1c:	88 f4       	brcc	.+34     	; 0xb40 <AdcConvert+0xd2>
			{
				max_value=g_aAdValue[i]-ret;
     b1e:	50 81       	ld	r21, Z
     b20:	56 1b       	sub	r21, r22
				max_id=i;
     b22:	f4 2e       	mov	r15, r20
     b24:	0d c0       	rjmp	.+26     	; 0xb40 <AdcConvert+0xd2>
			}
		}
		else
		{
			if(ret-g_aAdValue[i]>min_value)
     b26:	cb 01       	movw	r24, r22
     b28:	82 1b       	sub	r24, r18
     b2a:	93 0b       	sbc	r25, r19
     b2c:	9c 01       	movw	r18, r24
     b2e:	8a 2f       	mov	r24, r26
     b30:	99 27       	eor	r25, r25
     b32:	82 17       	cp	r24, r18
     b34:	93 07       	cpc	r25, r19
     b36:	20 f4       	brcc	.+8      	; 0xb40 <AdcConvert+0xd2>
			{
				min_value=ret-g_aAdValue[i];
     b38:	80 81       	ld	r24, Z
     b3a:	a6 2f       	mov	r26, r22
     b3c:	a8 1b       	sub	r26, r24
				min_id=i;
     b3e:	b4 2f       	mov	r27, r20
     b40:	4f 5f       	subi	r20, 0xFF	; 255
     b42:	32 96       	adiw	r30, 0x02	; 2
     b44:	48 30       	cpi	r20, 0x08	; 8
     b46:	f8 f2       	brcs	.-66     	; 0xb06 <AdcConvert+0x98>
			}
		}
	}
	
	//去掉第一个和最大最小值后的平均值
	ret=0;
     b48:	60 e0       	ldi	r22, 0x00	; 0
     b4a:	70 e0       	ldi	r23, 0x00	; 0
	for(i=1;i<8;i++)
     b4c:	41 e0       	ldi	r20, 0x01	; 1
     b4e:	f8 01       	movw	r30, r16
     b50:	32 96       	adiw	r30, 0x02	; 2
	{
		if((i!=min_id)&&(i!=max_id))
     b52:	4b 17       	cp	r20, r27
     b54:	31 f0       	breq	.+12     	; 0xb62 <AdcConvert+0xf4>
     b56:	4f 15       	cp	r20, r15
     b58:	21 f0       	breq	.+8      	; 0xb62 <AdcConvert+0xf4>
			ret+=g_aAdValue[i];     
     b5a:	80 81       	ld	r24, Z
     b5c:	91 81       	ldd	r25, Z+1	; 0x01
     b5e:	68 0f       	add	r22, r24
     b60:	79 1f       	adc	r23, r25
     b62:	4f 5f       	subi	r20, 0xFF	; 255
     b64:	32 96       	adiw	r30, 0x02	; 2
     b66:	48 30       	cpi	r20, 0x08	; 8
     b68:	a0 f3       	brcs	.-24     	; 0xb52 <AdcConvert+0xe4>
	}
	if(min_id!=max_id)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -