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

📄 hwg.lss

📁 AVRMEG32编写的一个项目代码,里面包含一般应用的模块.
💻 LSS
📖 第 1 页 / 共 5 页
字号:
}

// start a conversion on the current a2d input channel
void a2dStartConvert(void)
{
//	sbi(ADCSRA, ADIF);	// clear hardware "conversion complete" flag
	sbi(ADCSRA, ADEN);
    19a4:	37 9a       	sbi	0x06, 7	; 6
    19a6:	08 95       	ret

000019a8 <a2dIsComplete>:
//	sbi(ADCSRA, ADSC);  // start conversion
}

// return TRUE if conversion is complete
u08 a2dIsComplete(void)
{
	return bit_is_set(ADCSRA, ADSC);
    19a8:	86 b1       	in	r24, 0x06	; 6
    19aa:	99 27       	eor	r25, r25
}
    19ac:	80 74       	andi	r24, 0x40	; 64
    19ae:	90 70       	andi	r25, 0x00	; 0
    19b0:	08 95       	ret

000019b2 <a2dConvert10bit>:

// Perform a 10-bit conversion
// starts conversion, waits until conversion is done, and returns result

unsigned short a2dConvert10bit(void)
{
    u16 Timeout_loop = 0;//超时记数
    19b2:	80 e0       	ldi	r24, 0x00	; 0
    19b4:	90 e0       	ldi	r25, 0x00	; 0
//	a2dCompleteFlag = FALSE;				// clear conversion complete flag
//	outb(ADMUX, (inb(ADMUX) & ~ADC_MUX_MASK) | (ch & ADC_MUX_MASK));	// set channel
//	sbi(ADCSRA, ADIF);						// clear hardware "conversion complete" flag
	sbi(ADCSRA, ADSC);						// start conversion
    19b6:	36 9a       	sbi	0x06, 6	; 6
	//while(!a2dCompleteFlag);				// wait until conversion complete
	//while( bit_is_clear(ADCSR, ADIF) );		// wait until conversion complete
	while( bit_is_set(ADCSRA, ADSC) && (++Timeout_loop !=0));// wait until conversion complete
    19b8:	36 9b       	sbis	0x06, 6	; 6
    19ba:	02 c0       	rjmp	.+4      	; 0x19c0 <a2dConvert10bit+0xe>
    19bc:	01 96       	adiw	r24, 0x01	; 1
    19be:	e1 f7       	brne	.-8      	; 0x19b8 <a2dConvert10bit+0x6>

	// CAUTION: MUST READ ADCL BEFORE ADCH!!!
	return (inb(ADCL) | (inb(ADCH)<<8));	// read ADC (full 10 bits);
    19c0:	84 b1       	in	r24, 0x04	; 4
    19c2:	28 2f       	mov	r18, r24
    19c4:	33 27       	eor	r19, r19
    19c6:	85 b1       	in	r24, 0x05	; 5
    19c8:	99 27       	eor	r25, r25
    19ca:	98 2f       	mov	r25, r24
    19cc:	88 27       	eor	r24, r24
}
    19ce:	82 2b       	or	r24, r18
    19d0:	93 2b       	or	r25, r19
    19d2:	08 95       	ret

000019d4 <__vector_16>:

/*// Perform a 8-bit conversion.
// starts conversion, waits until conversion is done, and returns result
unsigned char a2dConvert8bit(unsigned char ch)
{
	// do 10-bit conversion and return highest 8 bits
	return a2dConvert10bit(ch)>>2  ;			// return ADC MSB byte
}*/

//! Interrupt handler for ADC complete interrupt.
SIGNAL(SIG_ADC)
{
    19d4:	1f 92       	push	r1
    19d6:	0f 92       	push	r0
    19d8:	0f b6       	in	r0, 0x3f	; 63
    19da:	0f 92       	push	r0
    19dc:	11 24       	eor	r1, r1
    19de:	8f 93       	push	r24
	// set the a2d conversion flag to indicate "complete"
	a2dCompleteFlag = TRUE;
    19e0:	8f ef       	ldi	r24, 0xFF	; 255
    19e2:	80 93 2c 04 	sts	0x042C, r24
    19e6:	8f 91       	pop	r24
    19e8:	0f 90       	pop	r0
    19ea:	0f be       	out	0x3f, r0	; 63
    19ec:	0f 90       	pop	r0
    19ee:	1f 90       	pop	r1
    19f0:	18 95       	reti

000019f2 <do_a2d>:
}

//去极值求平均数滤波,采样6次
u16 do_a2d(void)
{
    19f2:	8f 92       	push	r8
    19f4:	9f 92       	push	r9
    19f6:	af 92       	push	r10
    19f8:	bf 92       	push	r11
    19fa:	df 92       	push	r13
    19fc:	ef 92       	push	r14
    19fe:	ff 92       	push	r15
    1a00:	0f 93       	push	r16
    1a02:	1f 93       	push	r17
    1a04:	cf 93       	push	r28
    1a06:	df 93       	push	r29
    1a08:	cd b7       	in	r28, 0x3d	; 61
    1a0a:	de b7       	in	r29, 0x3e	; 62
    1a0c:	2c 97       	sbiw	r28, 0x0c	; 12
    1a0e:	0f b6       	in	r0, 0x3f	; 63
    1a10:	f8 94       	cli
    1a12:	de bf       	out	0x3e, r29	; 62
    1a14:	0f be       	out	0x3f, r0	; 63
    1a16:	cd bf       	out	0x3d, r28	; 61
	unsigned char count,i,j;
	u16 value_buf[6];
	u16 temp;
	u16 sum=0;
    1a18:	aa 24       	eor	r10, r10
    1a1a:	bb 24       	eor	r11, r11
    1a1c:	75 e0       	ldi	r23, 0x05	; 5
    1a1e:	d7 2e       	mov	r13, r23
    1a20:	75 01       	movw	r14, r10
	for (count=0;count<6;count++)
	{
		value_buf[count] = a2dConvert10bit();
    1a22:	4e 01       	movw	r8, r28
    1a24:	08 94       	sec
    1a26:	81 1c       	adc	r8, r1
    1a28:	91 1c       	adc	r9, r1
    1a2a:	87 01       	movw	r16, r14
    1a2c:	08 0d       	add	r16, r8
    1a2e:	19 1d       	adc	r17, r9
    1a30:	0e 94 d9 0c 	call	0x19b2 <a2dConvert10bit>
    1a34:	f8 01       	movw	r30, r16
    1a36:	91 83       	std	Z+1, r25	; 0x01
    1a38:	80 83       	st	Z, r24
    1a3a:	da 94       	dec	r13
    1a3c:	82 e0       	ldi	r24, 0x02	; 2
    1a3e:	90 e0       	ldi	r25, 0x00	; 0
    1a40:	e8 0e       	add	r14, r24
    1a42:	f9 1e       	adc	r15, r25
    1a44:	d7 fe       	sbrs	r13, 7
    1a46:	ed cf       	rjmp	.-38     	; 0x1a22 <do_a2d+0x30>
    1a48:	00 e0       	ldi	r16, 0x00	; 0
    1a4a:	10 e0       	ldi	r17, 0x00	; 0
    1a4c:	46 e0       	ldi	r20, 0x06	; 6
    1a4e:	50 e0       	ldi	r21, 0x00	; 0
    1a50:	ba 01       	movw	r22, r20
    1a52:	b4 e0       	ldi	r27, 0x04	; 4
		//_delay_ms(10) ;
	}
	for (j=0;j<6-1;j++)
	{
		for (i=0;i<6-j;i++)
    1a54:	a0 e0       	ldi	r26, 0x00	; 0
    1a56:	06 17       	cp	r16, r22
    1a58:	17 07       	cpc	r17, r23
    1a5a:	bc f4       	brge	.+46     	; 0x1a8a <do_a2d+0x98>
		{
			if ( value_buf[i]>value_buf[i+1] )
    1a5c:	ea 2f       	mov	r30, r26
    1a5e:	ff 27       	eor	r31, r31
    1a60:	ee 0f       	add	r30, r30
    1a62:	ff 1f       	adc	r31, r31
    1a64:	e8 0d       	add	r30, r8
    1a66:	f9 1d       	adc	r31, r9
    1a68:	20 81       	ld	r18, Z
    1a6a:	31 81       	ldd	r19, Z+1	; 0x01
    1a6c:	82 81       	ldd	r24, Z+2	; 0x02
    1a6e:	93 81       	ldd	r25, Z+3	; 0x03
    1a70:	82 17       	cp	r24, r18
    1a72:	93 07       	cpc	r25, r19
    1a74:	20 f4       	brcc	.+8      	; 0x1a7e <do_a2d+0x8c>
			{
				temp = value_buf[i];
				value_buf[i] = value_buf[i+1];
    1a76:	91 83       	std	Z+1, r25	; 0x01
    1a78:	80 83       	st	Z, r24
				value_buf[i+1] = temp;
    1a7a:	33 83       	std	Z+3, r19	; 0x03
    1a7c:	22 83       	std	Z+2, r18	; 0x02
    1a7e:	af 5f       	subi	r26, 0xFF	; 255
    1a80:	8a 2f       	mov	r24, r26
    1a82:	99 27       	eor	r25, r25
    1a84:	84 17       	cp	r24, r20
    1a86:	95 07       	cpc	r25, r21
    1a88:	4c f3       	brlt	.-46     	; 0x1a5c <do_a2d+0x6a>
    1a8a:	b1 50       	subi	r27, 0x01	; 1
    1a8c:	61 50       	subi	r22, 0x01	; 1
    1a8e:	70 40       	sbci	r23, 0x00	; 0
    1a90:	41 50       	subi	r20, 0x01	; 1
    1a92:	50 40       	sbci	r21, 0x00	; 0
    1a94:	b7 ff       	sbrs	r27, 7
    1a96:	de cf       	rjmp	.-68     	; 0x1a54 <do_a2d+0x62>
    1a98:	63 e0       	ldi	r22, 0x03	; 3
    1a9a:	d6 2e       	mov	r13, r22
    1a9c:	fe 01       	movw	r30, r28
    1a9e:	33 96       	adiw	r30, 0x03	; 3
			}
		}
	}
	for(count=1;count<5;count++)
	sum += value_buf[count];
    1aa0:	81 91       	ld	r24, Z+
    1aa2:	91 91       	ld	r25, Z+
    1aa4:	a8 0e       	add	r10, r24
    1aa6:	b9 1e       	adc	r11, r25
    1aa8:	da 94       	dec	r13
    1aaa:	d7 fe       	sbrs	r13, 7
    1aac:	f9 cf       	rjmp	.-14     	; 0x1aa0 <do_a2d+0xae>
	return (u16)(sum/(6-2));
}
    1aae:	c5 01       	movw	r24, r10
    1ab0:	96 95       	lsr	r25
    1ab2:	87 95       	ror	r24
    1ab4:	96 95       	lsr	r25
    1ab6:	87 95       	ror	r24
    1ab8:	2c 96       	adiw	r28, 0x0c	; 12
    1aba:	0f b6       	in	r0, 0x3f	; 63
    1abc:	f8 94       	cli
    1abe:	de bf       	out	0x3e, r29	; 62
    1ac0:	0f be       	out	0x3f, r0	; 63
    1ac2:	cd bf       	out	0x3d, r28	; 61
    1ac4:	df 91       	pop	r29
    1ac6:	cf 91       	pop	r28
    1ac8:	1f 91       	pop	r17
    1aca:	0f 91       	pop	r16
    1acc:	ff 90       	pop	r15
    1ace:	ef 90       	pop	r14
    1ad0:	df 90       	pop	r13
    1ad2:	bf 90       	pop	r11
    1ad4:	af 90       	pop	r10
    1ad6:	9f 90       	pop	r9
    1ad8:	8f 90       	pop	r8
    1ada:	08 95       	ret

00001adc <ad_result>:

//还原模拟量,用u16,分开乘
u16 ad_result( u16 ad_data , u08 liangcheng )
{
    1adc:	0f 93       	push	r16
    1ade:	1f 93       	push	r17
    1ae0:	cf 93       	push	r28
    1ae2:	df 93       	push	r29
	u16 ad_value;
	ad_data = ad_data * 4;//1024 * 4 方便计算
    1ae4:	ec 01       	movw	r28, r24
    1ae6:	cc 0f       	add	r28, r28
    1ae8:	dd 1f       	adc	r29, r29
    1aea:	cc 0f       	add	r28, r28
    1aec:	dd 1f       	adc	r29, r29
    1aee:	e6 2f       	mov	r30, r22
    1af0:	ff 27       	eor	r31, r31
	if(liangcheng >15)
    1af2:	60 31       	cpi	r22, 0x10	; 16
    1af4:	68 f4       	brcc	.+26     	; 0x1b10 <ad_result+0x34>
    {
       ad_value=(ad_data * 15)/100;//如43.5要用435表示
    }
    else
	{
	   ad_value=(ad_data * liangcheng)/100;
    1af6:	ce 9f       	mul	r28, r30
    1af8:	c0 01       	movw	r24, r0
    1afa:	cf 9f       	mul	r28, r31
    1afc:	90 0d       	add	r25, r0
    1afe:	de 9f       	mul	r29, r30
    1b00:	90 0d       	add	r25, r0
    1b02:	11 24       	eor	r1, r1
    1b04:	64 e6       	ldi	r22, 0x64	; 100
    1b06:	70 e0       	ldi	r23, 0x00	; 0
    1b08:	0e 94 59 26 	call	0x4cb2 <__udivmodhi4>
    1b0c:	9b 01       	movw	r18, r22
	   return (ad_value);   //返回模拟量
    1b0e:	45 c0       	rjmp	.+138    	; 0x1b9a <ad_result+0xbe>
    1b10:	9e 01       	movw	r18, r28
    1b12:	a4 e0       	ldi	r26, 0x04	; 4
    1b14:	22 0f       	add	r18, r18
    1b16:	33 1f       	adc	r19, r19
    1b18:	aa 95       	dec	r26
    1b1a:	e1 f7       	brne	.-8      	; 0x1b14 <ad_result+0x38>
    1b1c:	2c 1b       	sub	r18, r28
    1b1e:	3d 0b       	sbc	r19, r29
    1b20:	c9 01       	movw	r24, r18
    1b22:	64 e6       	ldi	r22, 0x64	; 100
    1b24:	70 e0       	ldi	r23, 0x00	; 0
    1b26:	0e 94 59 26 	call	0x4cb2 <__udivmodhi4>
    1b2a:	8b 01       	movw	r16, r22
    }
	if(liangcheng-15 > 15)
    1b2c:	cf 01       	movw	r24, r30
    1b2e:	0f 97       	sbiw	r24, 0x0f	; 15
    1b30:	80 31       	cpi	r24, 0x10	; 16
    1b32:	91 05       	cpc	r25, r1
    1b34:	64 f0       	brlt	.+24     	; 0x1b4e <ad_result+0x72>
    {
         ad_value+=(ad_data * 15)/100;
    1b36:	c9 01       	movw	r24, r18
    1b38:	64 e6       	ldi	r22, 0x64	; 100
    1b3a:	70 e0       	ldi	r23, 0x00	; 0
    1b3c:	0e 94 59 26 	ca

⌨️ 快捷键说明

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