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

📄 adc.lss

📁 avr c 模拟数据采集的程序设计方法 本程序为模数转换的例程
💻 LSS
📖 第 1 页 / 共 3 页
字号:

Adc.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000007d0  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000010  00800060  000007d0  00000864  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000000c  00800070  00800070  00000874  2**0
                  ALLOC
  3 .noinit       00000000  0080007c  0080007c  00000874  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000874  2**0
                  CONTENTS
  5 .stab         000007c8  00000000  00000000  00000874  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      000007a2  00000000  00000000  0000103c  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26
   2:	2b c0       	rjmp	.+86     	; 0x5a
   4:	2a c0       	rjmp	.+84     	; 0x5a
   6:	29 c0       	rjmp	.+82     	; 0x5a
   8:	28 c0       	rjmp	.+80     	; 0x5a
   a:	27 c0       	rjmp	.+78     	; 0x5a
   c:	26 c0       	rjmp	.+76     	; 0x5a
   e:	25 c0       	rjmp	.+74     	; 0x5a
  10:	24 c0       	rjmp	.+72     	; 0x5a
  12:	23 c0       	rjmp	.+70     	; 0x5a
  14:	22 c0       	rjmp	.+68     	; 0x5a
  16:	21 c0       	rjmp	.+66     	; 0x5a
  18:	20 c0       	rjmp	.+64     	; 0x5a
  1a:	1f c0       	rjmp	.+62     	; 0x5a
  1c:	1f c0       	rjmp	.+62     	; 0x5c
  1e:	1d c0       	rjmp	.+58     	; 0x5a
  20:	1c c0       	rjmp	.+56     	; 0x5a
  22:	1b c0       	rjmp	.+54     	; 0x5a
  24:	1a c0       	rjmp	.+52     	; 0x5a

00000026 <__ctors_end>:
  26:	11 24       	eor	r1, r1
  28:	1f be       	out	0x3f, r1	; 63
  2a:	cf e5       	ldi	r28, 0x5F	; 95
  2c:	d4 e0       	ldi	r29, 0x04	; 4
  2e:	de bf       	out	0x3e, r29	; 62
  30:	cd bf       	out	0x3d, r28	; 61

00000032 <__do_copy_data>:
  32:	10 e0       	ldi	r17, 0x00	; 0
  34:	a0 e6       	ldi	r26, 0x60	; 96
  36:	b0 e0       	ldi	r27, 0x00	; 0
  38:	e0 ed       	ldi	r30, 0xD0	; 208
  3a:	f7 e0       	ldi	r31, 0x07	; 7
  3c:	02 c0       	rjmp	.+4      	; 0x42

0000003e <.do_copy_data_loop>:
  3e:	05 90       	lpm	r0, Z+
  40:	0d 92       	st	X+, r0

00000042 <.do_copy_data_start>:
  42:	a0 37       	cpi	r26, 0x70	; 112
  44:	b1 07       	cpc	r27, r17
  46:	d9 f7       	brne	.-10     	; 0x3e

00000048 <__do_clear_bss>:
  48:	10 e0       	ldi	r17, 0x00	; 0
  4a:	a0 e7       	ldi	r26, 0x70	; 112
  4c:	b0 e0       	ldi	r27, 0x00	; 0
  4e:	01 c0       	rjmp	.+2      	; 0x52

00000050 <.do_clear_bss_loop>:
  50:	1d 92       	st	X+, r1

00000052 <.do_clear_bss_start>:
  52:	ac 37       	cpi	r26, 0x7C	; 124
  54:	b1 07       	cpc	r27, r17
  56:	e1 f7       	brne	.-8      	; 0x50
  58:	66 c0       	rjmp	.+204    	; 0x126

0000005a <__bad_interrupt>:
  5a:	d2 cf       	rjmp	.-92     	; 0x0

0000005c <__vector_14>:


//A/D转换完成中断
SIGNAL(SIG_ADC)
{
  5c:	1f 92       	push	r1
  5e:	0f 92       	push	r0
  60:	0f b6       	in	r0, 0x3f	; 63
  62:	0f 92       	push	r0
  64:	11 24       	eor	r1, r1
  66:	2f 93       	push	r18
  68:	3f 93       	push	r19
  6a:	8f 93       	push	r24
  6c:	9f 93       	push	r25
	g_nAdValue = ADCL;
  6e:	84 b1       	in	r24, 0x04	; 4
  70:	28 2f       	mov	r18, r24
  72:	33 27       	eor	r19, r19
	g_nAdValue |= (uint)(ADCH<<8);
  74:	85 b1       	in	r24, 0x05	; 5
  76:	99 27       	eor	r25, r25
  78:	98 2f       	mov	r25, r24
  7a:	88 27       	eor	r24, r24
  7c:	28 2b       	or	r18, r24
  7e:	39 2b       	or	r19, r25
  80:	30 93 71 00 	sts	0x0071, r19
  84:	20 93 70 00 	sts	0x0070, r18
  88:	9f 91       	pop	r25
  8a:	8f 91       	pop	r24
  8c:	3f 91       	pop	r19
  8e:	2f 91       	pop	r18
  90:	0f 90       	pop	r0
  92:	0f be       	out	0x3f, r0	; 63
  94:	0f 90       	pop	r0
  96:	1f 90       	pop	r1
  98:	18 95       	reti

0000009a <CInt>:
}

int CInt(float ki)
{	
  9a:	cf 92       	push	r12
  9c:	df 92       	push	r13
  9e:	ef 92       	push	r14
  a0:	ff 92       	push	r15
  a2:	0f 93       	push	r16
  a4:	1f 93       	push	r17
  a6:	cf 93       	push	r28
  a8:	df 93       	push	r29
  aa:	6b 01       	movw	r12, r22
  ac:	7c 01       	movw	r14, r24
	int tmpki;
	int retint;

	if(ki == 0) return 0;
  ae:	20 e0       	ldi	r18, 0x00	; 0
  b0:	30 e0       	ldi	r19, 0x00	; 0
  b2:	40 e0       	ldi	r20, 0x00	; 0
  b4:	50 e0       	ldi	r21, 0x00	; 0
  b6:	b2 d2       	rcall	.+1380   	; 0x61c
  b8:	88 23       	and	r24, r24
  ba:	19 f4       	brne	.+6      	; 0xc2
  bc:	80 e0       	ldi	r24, 0x00	; 0
  be:	90 e0       	ldi	r25, 0x00	; 0
  c0:	29 c0       	rjmp	.+82     	; 0x114

	tmpki=(int)fabs(ki*10) % 10;
  c2:	20 e0       	ldi	r18, 0x00	; 0
  c4:	30 e0       	ldi	r19, 0x00	; 0
  c6:	40 e2       	ldi	r20, 0x20	; 32
  c8:	51 e4       	ldi	r21, 0x41	; 65
  ca:	c7 01       	movw	r24, r14
  cc:	b6 01       	movw	r22, r12
  ce:	0b d3       	rcall	.+1558   	; 0x6e6
  d0:	dc 01       	movw	r26, r24
  d2:	cb 01       	movw	r24, r22
  d4:	bf 77       	andi	r27, 0x7F	; 127
  d6:	bc 01       	movw	r22, r24
  d8:	cd 01       	movw	r24, r26
  da:	79 d2       	rcall	.+1266   	; 0x5ce
  dc:	dc 01       	movw	r26, r24
  de:	cb 01       	movw	r24, r22
  e0:	6a e0       	ldi	r22, 0x0A	; 10
  e2:	70 e0       	ldi	r23, 0x00	; 0
  e4:	62 d3       	rcall	.+1732   	; 0x7aa
  e6:	8c 01       	movw	r16, r24
	retint=(int)ki;
  e8:	c7 01       	movw	r24, r14
  ea:	b6 01       	movw	r22, r12
  ec:	70 d2       	rcall	.+1248   	; 0x5ce
  ee:	dc 01       	movw	r26, r24
  f0:	cb 01       	movw	r24, r22
  f2:	ec 01       	movw	r28, r24
	if( tmpki >= 5)
  f4:	05 30       	cpi	r16, 0x05	; 5
  f6:	11 05       	cpc	r17, r1
  f8:	64 f0       	brlt	.+24     	; 0x112
	{
       if(ki>0)
  fa:	20 e0       	ldi	r18, 0x00	; 0
  fc:	30 e0       	ldi	r19, 0x00	; 0
  fe:	40 e0       	ldi	r20, 0x00	; 0
 100:	50 e0       	ldi	r21, 0x00	; 0
 102:	c7 01       	movw	r24, r14
 104:	b6 01       	movw	r22, r12
 106:	8d d2       	rcall	.+1306   	; 0x622
 108:	18 16       	cp	r1, r24
 10a:	14 f4       	brge	.+4      	; 0x110
			retint=retint+1;
 10c:	21 96       	adiw	r28, 0x01	; 1
 10e:	01 c0       	rjmp	.+2      	; 0x112
	    else
			retint=retint-1;
 110:	21 97       	sbiw	r28, 0x01	; 1
	}
	return retint;
 112:	ce 01       	movw	r24, r28
 114:	df 91       	pop	r29
 116:	cf 91       	pop	r28
 118:	1f 91       	pop	r17
 11a:	0f 91       	pop	r16
 11c:	ff 90       	pop	r15
 11e:	ef 90       	pop	r14
 120:	df 90       	pop	r13
 122:	cf 90       	pop	r12
 124:	08 95       	ret

00000126 <main>:
}

int main(void)
{
 126:	cf e5       	ldi	r28, 0x5F	; 95
 128:	d4 e0       	ldi	r29, 0x04	; 4
 12a:	de bf       	out	0x3e, r29	; 62
 12c:	cd bf       	out	0x3d, r28	; 61
	uchar i;	
	
	//内部2.65v参考电压,0通道
	//DDRC = _BV(PC0);
	//PORTC = _BV(PC0);
	
	OSCCAL = 0x7d;
 12e:	8d e7       	ldi	r24, 0x7D	; 125
 130:	81 bf       	out	0x31, r24	; 49
	DDRC = 0x00;
 132:	14 ba       	out	0x14, r1	; 20
	PORTC = 0x00;
 134:	15 ba       	out	0x15, r1	; 21
	
	
	//ADMUX = 0xc0; //11 00 0000
	ADMUX = _BV(REFS1)|_BV(REFS0);
 136:	80 ec       	ldi	r24, 0xC0	; 192
 138:	87 b9       	out	0x07, r24	; 7
	ACSR = (1<<ACD);
 13a:	80 e8       	ldi	r24, 0x80	; 128
 13c:	88 b9       	out	0x08, r24	; 8
	/*
	ADMUX ADC多路复其选择寄存器 - ADMUX
	7      6    5       4   3     2     1     0
	REFS1 REFS0 ADLAR  -  MUX3 MUX2 MUX1 MUX0
	REFS1,REFS0: 
	0     0    外部引脚AREF,断开内部参考源连接
	0     1    AVcc,Aref外部并接电容
	1     0    保留
	1     1    内部2.56V,AREF外部并接电容
	//此处11为内部2.56V
	ADLAR=0右对齐
	MUX3..0:0000  - ADC0

	*/
	
	//使能ADC,终端允许,自由模式,时钟CLK/8
	ADCSRA = _BV(ADEN)|_BV(ADIE)|_BV(ADFR)|_BV(ADPS1)|_BV(ADPS0);
 13e:	8b ea       	ldi	r24, 0xAB	; 171
 140:	86 b9       	out	0x06, r24	; 6
	/*
	7 - ADEN: ADC使能
	6 - ADSN:ADC开始转换
	5 - ADFR:ADC连续转换模式选择
	4 - ADIF:ADC中断标志位
	3 - ADIE:ADC中断允许
	2 ..0 - ADPS2:0:ADC预分频选择
		000 - 2 ; 001 - 2;010 - 4; 011 - 8;
		100 - 16;101 - 32;110 - 64;111 - 128

	*/
	
	/*计算公式
	ADC(ADCH+ADCL) = (Vin * 1024)/Vref
	Vin :选定的输入因交上的电压,Vref选定的参考电源的电压

	*/
	
	char* TmpStr = "0.000 V ";
 142:	c0 e6       	ldi	r28, 0x60	; 96
 144:	d0 e0       	ldi	r29, 0x00	; 0
	float TmpVal;
	unsigned int TmpPP;
	
	
	TmpStr[7]='\n';
 146:	8a e0       	ldi	r24, 0x0A	; 10
 148:	80 93 67 00 	sts	0x0067, r24
	
	Uart_Init(25);
 14c:	89 e1       	ldi	r24, 0x19	; 25
 14e:	90 e0       	ldi	r25, 0x00	; 0
 150:	60 d0       	rcall	.+192    	; 0x212
	
	ADCSRA |= _BV(ADSC);//自由模式开始转换
 152:	36 9a       	sbi	0x06, 6	; 6
 154:	23 e6       	ldi	r18, 0x63	; 99
    milliseconds can be achieved.
 */
static __inline__ void
_delay_loop_2(uint16_t __count)
{
 156:	88 ee       	ldi	r24, 0xE8	; 232
 158:	93 e0       	ldi	r25, 0x03	; 3
	__asm__ volatile (
 15a:	01 97       	sbiw	r24, 0x01	; 1
 15c:	f1 f7       	brne	.-4      	; 0x15a
	while(1)
	{
		for(i=0;i<100;i++)
 15e:	21 50       	subi	r18, 0x01	; 1
 160:	27 ff       	sbrs	r18, 7
 162:	f9 cf       	rjmp	.-14     	; 0x156
			_delay_loop_2(4*250*1);//10ms
		cli();		
 164:	f8 94       	cli
		
		
		//TmpVal = (float) ( (float)(Vref/1023) * (ADC&0X3ff) )/1000.00;
		TmpVal = (float)/*CInt(*/  (float)(((float)((Vref/1023)))*( ADC &0X3FF))/1000.00/*)*/;
 166:	84 b1       	in	r24, 0x04	; 4
 168:	95 b1       	in	r25, 0x05	; 5
 16a:	93 70       	andi	r25, 0x03	; 3
 16c:	aa 27       	eor	r26, r26
 16e:	97 fd       	sbrc	r25, 7
 170:	a0 95       	com	r26
 172:	ba 2f       	mov	r27, r26
 174:	bc 01       	movw	r22, r24
 176:	cd 01       	movw	r24, r26
 178:	47 d2       	rcall	.+1166   	; 0x608
 17a:	dc 01       	movw	r26, r24
 17c:	cb 01       	movw	r24, r22
 17e:	20 e0       	ldi	r18, 0x00	; 0
 180:	30 e0       	ldi	r19, 0x00	; 0
 182:	48 ec       	ldi	r20, 0xC8	; 200
 184:	51 e4       	ldi	r21, 0x41	; 65
 186:	bc 01       	movw	r22, r24
 188:	cd 01       	movw	r24, r26
 18a:	ad d2       	rcall	.+1370   	; 0x6e6
 18c:	dc 01       	movw	r26, r24
 18e:	cb 01       	movw	r24, r22
 190:	20 e0       	ldi	r18, 0x00	; 0
 192:	30 e0       	ldi	r19, 0x00	; 0
 194:	4a e7       	ldi	r20, 0x7A	; 122
 196:	54 e4       	ldi	r21, 0x44	; 68
 198:	bc 01       	movw	r22, r24
 19a:	cd 01       	movw	r24, r26
 19c:	d2 d1       	rcall	.+932    	; 0x542
 19e:	dc 01       	movw	r26, r24
 1a0:	cb 01       	movw	r24, r22
		TmpPP = fabs(TmpVal * 100);
 1a2:	20 e0       	ldi	r18, 0x00	; 0
 1a4:	30 e0       	ldi	r19, 0x00	; 0
 1a6:	48 ec       	ldi	r20, 0xC8	; 200
 1a8:	52 e4       	ldi	r21, 0x42	; 66
 1aa:	bc 01       	movw	r22, r24
 1ac:	cd 01       	movw	r24, r26
 1ae:	9b d2       	rcall	.+1334   	; 0x6e6
 1b0:	dc 01       	movw	r26, r24
 1b2:	cb 01       	movw	r24, r22
 1b4:	bf 77       	andi	r27, 0x7F	; 127
 1b6:	bc 01       	movw	r22, r24
 1b8:	cd 01       	movw	r24, r26
 1ba:	09 d2       	rcall	.+1042   	; 0x5ce
 1bc:	8b 01       	movw	r16, r22
 1be:	9c 01       	movw	r18, r24
	
		//TmpPP = TmpVal * 100;
		
		//TmpPP = 0xffff-TmpPP;
		

		//intf("%X  %x\n",(int)(TmpVal * 100),TmpPP);		
		
		TmpStr[0] =TmpPP/1000 + 0x30;
 1c0:	cb 01       	movw	r24, r22
 1c2:	68 ee       	ldi	r22, 0xE8	; 232
 1c4:	73 e0       	ldi	r23, 0x03	; 3
 1c6:	dd d2       	rcall	.+1466   	; 0x782
 1c8:	cb 01       	movw	r24, r22
 1ca:	80 5d       	subi	r24, 0xD0	; 208
 1cc:	80 93 60 00 	sts	0x0060, r24
		TmpPP =TmpPP % 1000;	
 1d0:	c8 01       	movw	r24, r16
 1d2:	68 ee       	ldi	r22, 0xE8	; 232
 1d4:	73 e0       	ldi	r23, 0x03	; 3
 1d6:	d5 d2       	rcall	.+1450   	; 0x782
 1d8:	9c 01       	movw	r18, r24

		TmpStr[2] = TmpPP/100 + 0x30;
 1da:	64 e6       	ldi	r22, 0x64	; 100
 1dc:	70 e0       	ldi	r23, 0x00	; 0
 1de:	d1 d2       	rcall	.+1442   	; 0x782
 1e0:	cb 01       	movw	r24, r22
 1e2:	80 5d       	subi	r24, 0xD0	; 208
 1e4:	8a 83       	std	Y+2, r24	; 0x02
		TmpPP = TmpPP % 100;
 1e6:	c9 01       	movw	r24, r18
 1e8:	64 e6       	ldi	r22, 0x64	; 100
 1ea:	70 e0       	ldi	r23, 0x00	; 0
 1ec:	ca d2       	rcall	.+1428   	; 0x782
 1ee:	9c 01       	movw	r18, r24
		
		TmpStr[3] =TmpPP/10 + 0x30;
 1f0:	6a e0       	ldi	r22, 0x0A	; 10
 1f2:	70 e0       	ldi	r23, 0x00	; 0
 1f4:	c6 d2       	rcall	.+1420   	; 0x782
 1f6:	cb 01       	movw	r24, r22
 1f8:	80 5d       	subi	r24, 0xD0	; 208
 1fa:	8b 83       	std	Y+3, r24	; 0x03
		TmpPP= TmpPP% 10;
 1fc:	c9 01       	movw	r24, r18
 1fe:	6a e0       	ldi	r22, 0x0A	; 10
 200:	70 e0       	ldi	r23, 0x00	; 0
 202:	bf d2       	rcall	.+1406   	; 0x782
		TmpStr[4] =TmpPP + 0x30;		
 204:	80 5d       	subi	r24, 0xD0	; 208
 206:	8c 83       	std	Y+4, r24	; 0x04
		Uart_PutStr(TmpStr);
 208:	80 e6       	ldi	r24, 0x60	; 96
 20a:	90 e0       	ldi	r25, 0x00	; 0
 20c:	29 d0       	rcall	.+82     	; 0x260
		//printf("%d,%s\n",g_nAdValue,TmpStr );

		sei();
 20e:	78 94       	sei
 210:	a1 cf       	rjmp	.-190    	; 0x154

00000212 <Uart_Init>:
	14.4K	86		68		34		16		8		3	
*/
//初始化
void Uart_Init(unsigned int ucBaudRate) //9600 :25/4m 38/6m
{
 212:	9c 01       	movw	r18, r24
 // 晶振频率 : 4.0MHz
    // 通信参数: 8 Data, 1 Stop, No Parity 
    // 波特率:
    // UBRRL= 0x0C    19200;
    // UBRRL= 0x19    9600;
    // UBRRL= 0x33    4800;

⌨️ 快捷键说明

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