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

📄 countermeter.lss

📁 一个用AVR做出的一个频率计
💻 LSS
📖 第 1 页 / 共 2 页
字号:

countermeter.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000005d6  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000000e  00800060  000005d6  0000066a  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000007  0080006e  0080006e  00000678  2**0
                  ALLOC
  3 .noinit       00000000  00800075  00800075  00000678  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000678  2**0
                  CONTENTS
  5 .stab         00000930  00000000  00000000  00000678  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      0000083b  00000000  00000000  00000fa8  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54
   4:	0c 94 45 00 	jmp	0x8a
   8:	0c 94 45 00 	jmp	0x8a
   c:	0c 94 45 00 	jmp	0x8a
  10:	0c 94 45 00 	jmp	0x8a
  14:	0c 94 45 00 	jmp	0x8a
  18:	0c 94 45 00 	jmp	0x8a
  1c:	0c 94 45 00 	jmp	0x8a
  20:	0c 94 45 00 	jmp	0x8a
  24:	0c 94 47 00 	jmp	0x8e
  28:	0c 94 45 00 	jmp	0x8a
  2c:	0c 94 45 00 	jmp	0x8a
  30:	0c 94 45 00 	jmp	0x8a
  34:	0c 94 45 00 	jmp	0x8a
  38:	0c 94 45 00 	jmp	0x8a
  3c:	0c 94 45 00 	jmp	0x8a
  40:	0c 94 45 00 	jmp	0x8a
  44:	0c 94 45 00 	jmp	0x8a
  48:	0c 94 45 00 	jmp	0x8a
  4c:	0c 94 45 00 	jmp	0x8a
  50:	0c 94 45 00 	jmp	0x8a

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	e6 ed       	ldi	r30, 0xD6	; 214
  68:	f5 e0       	ldi	r31, 0x05	; 5
  6a:	02 c0       	rjmp	.+4      	; 0x70

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	ae 36       	cpi	r26, 0x6E	; 110
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	ae e6       	ldi	r26, 0x6E	; 110
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	a5 37       	cpi	r26, 0x75	; 117
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 dc 01 	jmp	0x3b8

0000008a <__bad_interrupt>:
  8a:	0c 94 00 00 	jmp	0x0

0000008e <__vector_9>:



SIGNAL(SIG_OVERFLOW0)	//定时器T0溢出中断程序(16 uS中断一次)
{
  8e:	1f 92       	push	r1
  90:	0f 92       	push	r0
  92:	0f b6       	in	r0, 0x3f	; 63
  94:	0f 92       	push	r0
  96:	11 24       	eor	r1, r1
  98:	2f 93       	push	r18
  9a:	3f 93       	push	r19
  9c:	4f 93       	push	r20
  9e:	5f 93       	push	r21
  a0:	6f 93       	push	r22
  a2:	7f 93       	push	r23
  a4:	8f 93       	push	r24
  a6:	9f 93       	push	r25
  a8:	af 93       	push	r26
  aa:	bf 93       	push	r27
  ac:	ef 93       	push	r30
  ae:	ff 93       	push	r31
  b0:	cf 93       	push	r28
  b2:	df 93       	push	r29
  b4:	cd b7       	in	r28, 0x3d	; 61
  b6:	de b7       	in	r29, 0x3e	; 62
  b8:	22 97       	sbiw	r28, 0x02	; 2
  ba:	de bf       	out	0x3e, r29	; 62
  bc:	cd bf       	out	0x3d, r28	; 61
	unsigned char a,b;
    //重新装载初值
    TCNT0 = TI0_L;
  be:	83 e8       	ldi	r24, 0x83	; 131
  c0:	80 93 52 00 	sts	0x0052, r24
    //关闭所有数码管
    PORTA |= 0X07; 
  c4:	80 91 3b 00 	lds	r24, 0x003B
  c8:	87 60       	ori	r24, 0x07	; 7
  ca:	80 93 3b 00 	sts	0x003B, r24
	
	if (active_led == 5)
  ce:	80 91 6e 00 	lds	r24, 0x006E
  d2:	85 30       	cpi	r24, 0x05	; 5
  d4:	49 f4       	brne	.+18     	; 0xe8
	{
		b = digits[10 + mode_setting];    //第6为数码管用于模式指示
  d6:	80 91 74 00 	lds	r24, 0x0074
  da:	99 27       	eor	r25, r25
  dc:	fc 01       	movw	r30, r24
  de:	e6 59       	subi	r30, 0x96	; 150
  e0:	ff 4f       	sbci	r31, 0xFF	; 255
  e2:	80 81       	ld	r24, Z
  e4:	8a 83       	std	Y+2, r24	; 0x02
  e6:	38 c0       	rjmp	.+112    	; 0x158
	}
	else
	{
		a = led_value >> (( 4 - active_led ) * 4);
  e8:	80 91 6e 00 	lds	r24, 0x006E
  ec:	28 2f       	mov	r18, r24
  ee:	33 27       	eor	r19, r19
  f0:	84 e0       	ldi	r24, 0x04	; 4
  f2:	90 e0       	ldi	r25, 0x00	; 0
  f4:	82 1b       	sub	r24, r18
  f6:	93 0b       	sbc	r25, r19
  f8:	9c 01       	movw	r18, r24
  fa:	22 0f       	add	r18, r18
  fc:	33 1f       	adc	r19, r19
  fe:	22 0f       	add	r18, r18
 100:	33 1f       	adc	r19, r19
 102:	80 91 6f 00 	lds	r24, 0x006F
 106:	90 91 70 00 	lds	r25, 0x0070
 10a:	a0 91 71 00 	lds	r26, 0x0071
 10e:	b0 91 72 00 	lds	r27, 0x0072
 112:	04 c0       	rjmp	.+8      	; 0x11c
 114:	b6 95       	lsr	r27
 116:	a7 95       	ror	r26
 118:	97 95       	ror	r25
 11a:	87 95       	ror	r24
 11c:	2a 95       	dec	r18
 11e:	d2 f7       	brpl	.-12     	; 0x114
 120:	89 83       	std	Y+1, r24	; 0x01
	
		b = digits[a & 0x0f];
 122:	89 81       	ldd	r24, Y+1	; 0x01
 124:	99 27       	eor	r25, r25
 126:	8f 70       	andi	r24, 0x0F	; 15
 128:	90 70       	andi	r25, 0x00	; 0
 12a:	fc 01       	movw	r30, r24
 12c:	e0 5a       	subi	r30, 0xA0	; 160
 12e:	ff 4f       	sbci	r31, 0xFF	; 255
 130:	80 81       	ld	r24, Z
 132:	8a 83       	std	Y+2, r24	; 0x02
	
		if (decimal_point == (4 - active_led) )
 134:	80 91 73 00 	lds	r24, 0x0073
 138:	48 2f       	mov	r20, r24
 13a:	55 27       	eor	r21, r21
 13c:	80 91 6e 00 	lds	r24, 0x006E
 140:	28 2f       	mov	r18, r24
 142:	33 27       	eor	r19, r19
 144:	84 e0       	ldi	r24, 0x04	; 4
 146:	90 e0       	ldi	r25, 0x00	; 0
 148:	82 1b       	sub	r24, r18
 14a:	93 0b       	sbc	r25, r19
 14c:	48 17       	cp	r20, r24
 14e:	59 07       	cpc	r21, r25
 150:	19 f4       	brne	.+6      	; 0x158
			b |= SEG_dot;
 152:	8a 81       	ldd	r24, Y+2	; 0x02
 154:	80 68       	ori	r24, 0x80	; 128
 156:	8a 83       	std	Y+2, r24	; 0x02
	}
    PORTB = b;
 158:	8a 81       	ldd	r24, Y+2	; 0x02
 15a:	80 93 38 00 	sts	0x0038, r24
	//设置显示位置			
    PORTA = ((PORTA & 0Xf8)|active_led);
 15e:	98 ef       	ldi	r25, 0xF8	; 248
 160:	80 91 3b 00 	lds	r24, 0x003B
 164:	98 23       	and	r25, r24
 166:	80 91 6e 00 	lds	r24, 0x006E
 16a:	89 2b       	or	r24, r25
 16c:	80 93 3b 00 	sts	0x003B, r24
	active_led = (active_led+1) % 6;
 170:	80 91 6e 00 	lds	r24, 0x006E
 174:	99 27       	eor	r25, r25
 176:	01 96       	adiw	r24, 0x01	; 1
 178:	26 e0       	ldi	r18, 0x06	; 6
 17a:	30 e0       	ldi	r19, 0x00	; 0
 17c:	b9 01       	movw	r22, r18
 17e:	0e 94 d8 02 	call	0x5b0
 182:	80 93 6e 00 	sts	0x006E, r24
 186:	22 96       	adiw	r28, 0x02	; 2
 188:	f8 94       	cli
 18a:	de bf       	out	0x3e, r29	; 62
 18c:	cd bf       	out	0x3d, r28	; 61
 18e:	df 91       	pop	r29
 190:	cf 91       	pop	r28
 192:	ff 91       	pop	r31
 194:	ef 91       	pop	r30
 196:	bf 91       	pop	r27
 198:	af 91       	pop	r26
 19a:	9f 91       	pop	r25
 19c:	8f 91       	pop	r24
 19e:	7f 91       	pop	r23
 1a0:	6f 91       	pop	r22
 1a2:	5f 91       	pop	r21
 1a4:	4f 91       	pop	r20
 1a6:	3f 91       	pop	r19
 1a8:	2f 91       	pop	r18
 1aa:	0f 90       	pop	r0
 1ac:	0f be       	out	0x3f, r0	; 63
 1ae:	0f 90       	pop	r0
 1b0:	1f 90       	pop	r1
 1b2:	18 95       	reti

000001b4 <delay>:
}





/****************************************************************************/
/*  helpers  ****************************************************************/
/****************************************************************************/


void delay(unsigned short us) 
{
 1b4:	cf 93       	push	r28
 1b6:	df 93       	push	r29
 1b8:	cd b7       	in	r28, 0x3d	; 61
 1ba:	de b7       	in	r29, 0x3e	; 62
 1bc:	26 97       	sbiw	r28, 0x06	; 6
 1be:	0f b6       	in	r0, 0x3f	; 63
 1c0:	f8 94       	cli
 1c2:	de bf       	out	0x3e, r29	; 62
 1c4:	0f be       	out	0x3f, r0	; 63
 1c6:	cd bf       	out	0x3d, r28	; 61
 1c8:	89 83       	std	Y+1, r24	; 0x01
 1ca:	9a 83       	std	Y+2, r25	; 0x02
    unsigned short  delay_loops;
    register unsigned short  i;

    delay_loops = (us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty) 
 1cc:	89 81       	ldd	r24, Y+1	; 0x01
 1ce:	9a 81       	ldd	r25, Y+2	; 0x02
 1d0:	03 96       	adiw	r24, 0x03	; 3
 1d2:	25 e0       	ldi	r18, 0x05	; 5
 1d4:	30 e0       	ldi	r19, 0x00	; 0
 1d6:	b9 01       	movw	r22, r18
 1d8:	0e 94 c4 02 	call	0x588
 1dc:	cb 01       	movw	r24, r22
 1de:	aa 27       	eor	r26, r26
 1e0:	bb 27       	eor	r27, r27
 1e2:	68 94       	set
 1e4:	12 f8       	bld	r1, 2
 1e6:	88 0f       	add	r24, r24
 1e8:	99 1f       	adc	r25, r25
 1ea:	aa 1f       	adc	r26, r26
 1ec:	bb 1f       	adc	r27, r27
 1ee:	16 94       	lsr	r1
 1f0:	d1 f7       	brne	.-12     	; 0x1e6
 1f2:	8b 83       	std	Y+3, r24	; 0x03
 1f4:	9c 83       	std	Y+4, r25	; 0x04

	// one loop takes 5 cpu cycles 
    for (i=0; i < delay_loops; i++);
 1f6:	1d 82       	std	Y+5, r1	; 0x05
 1f8:	1e 82       	std	Y+6, r1	; 0x06
 1fa:	8b 81       	ldd	r24, Y+3	; 0x03
 1fc:	9c 81       	ldd	r25, Y+4	; 0x04
 1fe:	2d 81       	ldd	r18, Y+5	; 0x05
 200:	3e 81       	ldd	r19, Y+6	; 0x06
 202:	28 17       	cp	r18, r24
 204:	39 07       	cpc	r19, r25
 206:	30 f4       	brcc	.+12     	; 0x214
 208:	8d 81       	ldd	r24, Y+5	; 0x05
 20a:	9e 81       	ldd	r25, Y+6	; 0x06
 20c:	01 96       	adiw	r24, 0x01	; 1
 20e:	8d 83       	std	Y+5, r24	; 0x05
 210:	9e 83       	std	Y+6, r25	; 0x06
 212:	f3 cf       	rjmp	.-26     	; 0x1fa
 214:	26 96       	adiw	r28, 0x06	; 6
 216:	0f b6       	in	r0, 0x3f	; 63
 218:	f8 94       	cli
 21a:	de bf       	out	0x3e, r29	; 62
 21c:	0f be       	out	0x3f, r0	; 63
 21e:	cd bf       	out	0x3d, r28	; 61
 220:	df 91       	pop	r29
 222:	cf 91       	pop	r28
 224:	08 95       	ret

00000226 <read_counters>:
} 



//读16位计数值
unsigned int read_counters(void)
{
 226:	cf 93       	push	r28
 228:	df 93       	push	r29
 22a:	cd b7       	in	r28, 0x3d	; 61
 22c:	de b7       	in	r29, 0x3e	; 62
 22e:	22 97       	sbiw	r28, 0x02	; 2
 230:	0f b6       	in	r0, 0x3f	; 63
 232:	f8 94       	cli
 234:	de bf       	out	0x3e, r29	; 62
 236:	0f be       	out	0x3f, r0	; 63
 238:	cd bf       	out	0x3d, r28	; 61
	unsigned int counter_value;

	// 读数据时关闭中断
	cli();
 23a:	f8 94       	cli
	//关闭数码管显示	
    PORTA |= 0X07;	
 23c:	80 91 3b 00 	lds	r24, 0x003B
 240:	87 60       	ori	r24, 0x07	; 7
 242:	80 93 3b 00 	sts	0x003B, r24
	//设置PORTB位输入	
    DDRB = 0X00;
 246:	10 92 37 00 	sts	0x0037, r1
	//置OE_H为低读取高8位	
    PORTA &= ~(1<<OE_H);
 24a:	80 91 3b 00 	lds	r24, 0x003B
 24e:	8f 7d       	andi	r24, 0xDF	; 223
 250:	80 93 3b 00 	sts	0x003B, r24
	asm volatile("nop");
 254:	00 00       	nop
	//1个脉冲锁存计数值
    PORTA |= (1<<OE_H);
 256:	80 91 3b 00 	lds	r24, 0x003B
 25a:	80 62       	ori	r24, 0x20	; 32
 25c:	80 93 3b 00 	sts	0x003B, r24
	asm volatile("nop");	
 260:	00 00       	nop
    PORTA &= ~(1<<OE_H);
 262:	80 91 3b 00 	lds	r24, 0x003B
 266:	8f 7d       	andi	r24, 0xDF	; 223
 268:	80 93 3b 00 	sts	0x003B, r24
	asm volatile("nop");	
 26c:	00 00       	nop
	//读高8位数据    
    counter_value = PINB;
 26e:	80 91 36 00 	lds	r24, 0x0036
 272:	99 27       	eor	r25, r25
 274:	89 83       	std	Y+1, r24	; 0x01
 276:	9a 83       	std	Y+2, r25	; 0x02
    //置OE_H为高    		
    PORTA |= (1<<OE_H);
 278:	80 91 3b 00 	lds	r24, 0x003B
 27c:	80 62       	ori	r24, 0x20	; 32
 27e:	80 93 3b 00 	sts	0x003B, r24
	counter_value <<= 8;	
 282:	89 81       	ldd	r24, Y+1	; 0x01
 284:	9a 81       	ldd	r25, Y+2	; 0x02
 286:	98 2f       	mov	r25, r24
 288:	88 27       	eor	r24, r24
 28a:	89 83       	std	Y+1, r24	; 0x01
 28c:	9a 83       	std	Y+2, r25	; 0x02
	//置OE_L为低读取低8位
    PORTA &= ~(1<<OE_L);
 28e:	80 91 3b 00 	lds	r24, 0x003B
 292:	8f 7e       	andi	r24, 0xEF	; 239
 294:	80 93 3b 00 	sts	0x003B, r24
	asm volatile("nop");
 298:	00 00       	nop
	//1个脉冲锁存计数值
    PORTA |= (1<<OE_L);
 29a:	80 91 3b 00 	lds	r24, 0x003B
 29e:	80 61       	ori	r24, 0x10	; 16
 2a0:	80 93 3b 00 	sts	0x003B, r24
	asm volatile("nop");
 2a4:	00 00       	nop
    PORTA &= ~(1<<OE_L);
 2a6:	80 91 3b 00 	lds	r24, 0x003B
 2aa:	8f 7e       	andi	r24, 0xEF	; 239
 2ac:	80 93 3b 00 	sts	0x003B, r24
	asm volatile("nop");
 2b0:	00 00       	nop
    //读低8位数据  
    counter_value |= PINB ;  
 2b2:	80 91 36 00 	lds	r24, 0x0036
 2b6:	28 2f       	mov	r18, r24
 2b8:	33 27       	eor	r19, r19
 2ba:	89 81       	ldd	r24, Y+1	; 0x01
 2bc:	9a 81       	ldd	r25, Y+2	; 0x02
 2be:	82 2b       	or	r24, r18
 2c0:	93 2b       	or	r25, r19
 2c2:	89 83       	std	Y+1, r24	; 0x01
 2c4:	9a 83       	std	Y+2, r25	; 0x02
    //置OE_L为高      
    PORTA |= (1<<OE_L);	
 2c6:	80 91 3b 00 	lds	r24, 0x003B
 2ca:	80 61       	ori	r24, 0x10	; 16
 2cc:	80 93 3b 00 	sts	0x003B, r24
    //设置PORTB位输出
    DDRB = 0XFF;
 2d0:	8f ef       	ldi	r24, 0xFF	; 255
 2d2:	80 93 37 00 	sts	0x0037, r24
	//使能数码管刷新
	sei();	
 2d6:	78 94       	sei
	return counter_value;
 2d8:	89 81       	ldd	r24, Y+1	; 0x01
 2da:	9a 81       	ldd	r25, Y+2	; 0x02
 2dc:	22 96       	adiw	r28, 0x02	; 2
 2de:	0f b6       	in	r0, 0x3f	; 63
 2e0:	f8 94       	cli
 2e2:	de bf       	out	0x3e, r29	; 62
 2e4:	0f be       	out	0x3f, r0	; 63
 2e6:	cd bf       	out	0x3d, r28	; 61
 2e8:	df 91       	pop	r29
 2ea:	cf 91       	pop	r28
 2ec:	08 95       	ret

000002ee <capture>:
}



void capture(unsigned int compare)
{
 2ee:	cf 93       	push	r28
 2f0:	df 93       	push	r29
 2f2:	cd b7       	in	r28, 0x3d	; 61
 2f4:	de b7       	in	r29, 0x3e	; 62
 2f6:	22 97       	sbiw	r28, 0x02	; 2
 2f8:	0f b6       	in	r0, 0x3f	; 63
 2fa:	f8 94       	cli
 2fc:	de bf       	out	0x3e, r29	; 62
 2fe:	0f be       	out	0x3f, r0	; 63
 300:	cd bf       	out	0x3d, r28	; 61
 302:	89 83       	std	Y+1, r24	; 0x01
 304:	9a 83       	std	Y+2, r25	; 0x02

	//清零外部计数器
    PORTA &= ~(1<<CLEAR);
 306:	80 91 3b 00 	lds	r24, 0x003B
 30a:	8f 7b       	andi	r24, 0xBF	; 191
 30c:	80 93 3b 00 	sts	0x003B, r24
	asm volatile("nop");

⌨️ 快捷键说明

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