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

📄 tc0counter.lss

📁 AVR单片机atmega16的定时计数器T0实现四位加减计数器
💻 LSS
字号:

TC0counter.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000001e2  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000000a  00800060  000001e2  00000276  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000000c  0080006a  0080006a  00000280  2**0
                  ALLOC
  3 .noinit       00000000  00800076  00800076  00000280  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000280  2**0
                  CONTENTS
  5 .stab         00000534  00000000  00000000  00000280  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000679  00000000  00000000  000007b4  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 45 00 	jmp	0x8a
  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:	e2 ee       	ldi	r30, 0xE2	; 226
  68:	f1 e0       	ldi	r31, 0x01	; 1
  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:	aa 36       	cpi	r26, 0x6A	; 106
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	aa e6       	ldi	r26, 0x6A	; 106
  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:	a6 37       	cpi	r26, 0x76	; 118
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 99 00 	jmp	0x132

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

0000008e <Display>:


void Display(uint *p)              //动态显示函数,参数p为待显示的数组名
{
	uchar i,sel=0x01;           
  8e:	71 e0       	ldi	r23, 0x01	; 1
  90:	20 ea       	ldi	r18, 0xA0	; 160
  92:	3f e0       	ldi	r19, 0x0F	; 15
  94:	40 e0       	ldi	r20, 0x00	; 0
  96:	50 e0       	ldi	r21, 0x00	; 0
  98:	63 e0       	ldi	r22, 0x03	; 3
  9a:	dc 01       	movw	r26, r24
	for(i=0;i<4;i++)
	{
		PORTC=~sel;                //选通最右边的数码管
  9c:	87 2f       	mov	r24, r23
  9e:	80 95       	com	r24
  a0:	85 bb       	out	0x15, r24	; 21
		PORTA=Table[p[i]];         //送字型码		
  a2:	ed 91       	ld	r30, X+
  a4:	fd 91       	ld	r31, X+
  a6:	e0 5a       	subi	r30, 0xA0	; 160
  a8:	ff 4f       	sbci	r31, 0xFF	; 255
  aa:	80 81       	ld	r24, Z
  ac:	8b bb       	out	0x1b, r24	; 27
 */
static __inline__ void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  ae:	c9 01       	movw	r24, r18
  b0:	01 97       	sbiw	r24, 0x01	; 1
  b2:	f1 f7       	brne	.-4      	; 0xb0
		_delay_ms(2);              //显示延时       
		sel=sel<<1;                //移位以显示前一位
  b4:	77 0f       	add	r23, r23
  b6:	61 50       	subi	r22, 0x01	; 1
  b8:	67 ff       	sbrs	r22, 7
  ba:	f0 cf       	rjmp	.-32     	; 0x9c
  bc:	08 95       	ret

000000be <Process>:
	}
}


//******************************计数值处理函数******************************
//功能:此函数用于将计数值拆分为BCD码的千,百,十,一数据,用于查表显示//
//参数说明:参数i:计数值;参数p:处理数据存放的数组名//


void Process(uint i,uint *p) 
{
  be:	0f 93       	push	r16
  c0:	1f 93       	push	r17
  c2:	cf 93       	push	r28
  c4:	df 93       	push	r29
  c6:	fc 01       	movw	r30, r24
  c8:	8b 01       	movw	r16, r22
	p[0]=i/1000;
  ca:	28 ee       	ldi	r18, 0xE8	; 232
  cc:	33 e0       	ldi	r19, 0x03	; 3
  ce:	b9 01       	movw	r22, r18
  d0:	0e 94 dc 00 	call	0x1b8
  d4:	d8 01       	movw	r26, r16
  d6:	6d 93       	st	X+, r22
  d8:	7c 93       	st	X, r23
	i=i%1000;
  da:	cf 01       	movw	r24, r30
  dc:	b9 01       	movw	r22, r18
  de:	0e 94 dc 00 	call	0x1b8
  e2:	9c 01       	movw	r18, r24
	p[1]=i/100;
  e4:	e4 e6       	ldi	r30, 0x64	; 100
  e6:	f0 e0       	ldi	r31, 0x00	; 0
  e8:	bf 01       	movw	r22, r30
  ea:	0e 94 dc 00 	call	0x1b8
  ee:	e8 01       	movw	r28, r16
  f0:	6a 83       	std	Y+2, r22	; 0x02
  f2:	7b 83       	std	Y+3, r23	; 0x03
	i=i%100;
  f4:	c9 01       	movw	r24, r18
  f6:	bf 01       	movw	r22, r30
  f8:	0e 94 dc 00 	call	0x1b8
  fc:	9c 01       	movw	r18, r24
	p[2]=i/10;
  fe:	ea e0       	ldi	r30, 0x0A	; 10
 100:	f0 e0       	ldi	r31, 0x00	; 0
 102:	bf 01       	movw	r22, r30
 104:	0e 94 dc 00 	call	0x1b8
 108:	6c 83       	std	Y+4, r22	; 0x04
 10a:	7d 83       	std	Y+5, r23	; 0x05
	i=i%10;
 10c:	c9 01       	movw	r24, r18
 10e:	bf 01       	movw	r22, r30
 110:	0e 94 dc 00 	call	0x1b8
	p[3]=i;
 114:	8e 83       	std	Y+6, r24	; 0x06
 116:	9f 83       	std	Y+7, r25	; 0x07
 118:	df 91       	pop	r29
 11a:	cf 91       	pop	r28
 11c:	1f 91       	pop	r17
 11e:	0f 91       	pop	r16
 120:	08 95       	ret

00000122 <Init_IO>:
	//int j;
	//for(j=0;j<4;j++,p++)
	//Data[j]= *p;
}


void Init_IO(void)               //初始化I/O口
{
	DDRA=0xff;                    //设置A口为推挽1输出
 122:	8f ef       	ldi	r24, 0xFF	; 255
 124:	8a bb       	out	0x1a, r24	; 26
	PORTA=0xff;
 126:	8b bb       	out	0x1b, r24	; 27
	DDRC=0xff;                    //设置C口为不带上拉电阻的输入
 128:	84 bb       	out	0x14, r24	; 20
	PORTC=0xff;    
 12a:	85 bb       	out	0x15, r24	; 21
	DDRD=0x00;                    //设置D口为推挽1输出;             
 12c:	11 ba       	out	0x11, r1	; 17
	PORTD=0x00;
 12e:	12 ba       	out	0x12, r1	; 18
 130:	08 95       	ret

00000132 <main>:
}


int main(void)
{	
 132:	cf e5       	ldi	r28, 0x5F	; 95
 134:	d4 e0       	ldi	r29, 0x04	; 4
 136:	de bf       	out	0x3e, r29	; 62
 138:	cd bf       	out	0x3d, r28	; 61
	uint i,Load;
	Init_IO();                        //初始化I/O口
 13a:	0e 94 91 00 	call	0x122
	PORTA=0xff;						  //点亮测试所有的数码管
 13e:	8f ef       	ldi	r24, 0xFF	; 255
 140:	8b bb       	out	0x1b, r24	; 27
	PORTC=0x00;
 142:	15 ba       	out	0x15, r1	; 21
 144:	a0 ea       	ldi	r26, 0xA0	; 160
 146:	bf e0       	ldi	r27, 0x0F	; 15
 148:	c0 e0       	ldi	r28, 0x00	; 0
 14a:	d0 e0       	ldi	r29, 0x00	; 0
 14c:	28 ee       	ldi	r18, 0xE8	; 232
 14e:	33 e0       	ldi	r19, 0x03	; 3
 */
static __inline__ void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 150:	cd 01       	movw	r24, r26
 152:	01 97       	sbiw	r24, 0x01	; 1
 154:	f1 f7       	brne	.-4      	; 0x152
	for(i=0;i<1001;i++)
 156:	21 50       	subi	r18, 0x01	; 1
 158:	30 40       	sbci	r19, 0x00	; 0
 15a:	37 ff       	sbrs	r19, 7
 15c:	f9 cf       	rjmp	.-14     	; 0x150
	_delay_ms(2);               //显示延时
	PORTC=0xff;                      //数码管熄灭,进入计数器状态               
 15e:	8f ef       	ldi	r24, 0xFF	; 255
 160:	85 bb       	out	0x15, r24	; 21
	TCCR0=0x06;
 162:	86 e0       	ldi	r24, 0x06	; 6
 164:	83 bf       	out	0x33, r24	; 51
	TCNT0=CNT;
 166:	80 91 6a 00 	lds	r24, 0x006A
 16a:	82 bf       	out	0x32, r24	; 50
	while( (PIND&0x01)==0)
	{     
		uint j;
		if(CNT!=9999)
		{
			CNT=CNT+1;
			TCNT0=CNT;
			Process(TCNT0,Data);          //计数值处理
			Display(Data); 				 //动态扫描显示 
 16c:	80 99       	sbic	0x10, 0	; 16
 16e:	1c c0       	rjmp	.+56     	; 0x1a8
 170:	80 91 6a 00 	lds	r24, 0x006A
 174:	90 91 6b 00 	lds	r25, 0x006B
 178:	27 e2       	ldi	r18, 0x27	; 39
 17a:	8f 30       	cpi	r24, 0x0F	; 15
 17c:	92 07       	cpc	r25, r18
 17e:	91 f0       	breq	.+36     	; 0x1a4
 180:	01 96       	adiw	r24, 0x01	; 1
 182:	90 93 6b 00 	sts	0x006B, r25
 186:	80 93 6a 00 	sts	0x006A, r24
 18a:	80 91 6a 00 	lds	r24, 0x006A
 18e:	82 bf       	out	0x32, r24	; 50
 190:	82 b7       	in	r24, 0x32	; 50
 192:	6c e6       	ldi	r22, 0x6C	; 108
 194:	70 e0       	ldi	r23, 0x00	; 0
 196:	99 27       	eor	r25, r25
 198:	0e 94 5f 00 	call	0xbe
 19c:	8c e6       	ldi	r24, 0x6C	; 108
 19e:	90 e0       	ldi	r25, 0x00	; 0
 1a0:	0e 94 47 00 	call	0x8e
 1a4:	80 9b       	sbis	0x10, 0	; 16
 1a6:	e4 cf       	rjmp	.-56     	; 0x170
		}	
	}
	Display(Data);
 1a8:	8c e6       	ldi	r24, 0x6C	; 108
 1aa:	90 e0       	ldi	r25, 0x00	; 0
 1ac:	0e 94 47 00 	call	0x8e
	return 0;
}
 1b0:	80 e0       	ldi	r24, 0x00	; 0
 1b2:	90 e0       	ldi	r25, 0x00	; 0
 1b4:	0c 94 f0 00 	jmp	0x1e0

000001b8 <__udivmodhi4>:
 1b8:	aa 1b       	sub	r26, r26
 1ba:	bb 1b       	sub	r27, r27
 1bc:	51 e1       	ldi	r21, 0x11	; 17
 1be:	07 c0       	rjmp	.+14     	; 0x1ce

000001c0 <__udivmodhi4_loop>:
 1c0:	aa 1f       	adc	r26, r26
 1c2:	bb 1f       	adc	r27, r27
 1c4:	a6 17       	cp	r26, r22
 1c6:	b7 07       	cpc	r27, r23
 1c8:	10 f0       	brcs	.+4      	; 0x1ce
 1ca:	a6 1b       	sub	r26, r22
 1cc:	b7 0b       	sbc	r27, r23

000001ce <__udivmodhi4_ep>:
 1ce:	88 1f       	adc	r24, r24
 1d0:	99 1f       	adc	r25, r25
 1d2:	5a 95       	dec	r21
 1d4:	a9 f7       	brne	.-22     	; 0x1c0
 1d6:	80 95       	com	r24
 1d8:	90 95       	com	r25
 1da:	bc 01       	movw	r22, r24
 1dc:	cd 01       	movw	r24, r26
 1de:	08 95       	ret

000001e0 <_exit>:
 1e0:	ff cf       	rjmp	.-2      	; 0x1e0

⌨️ 快捷键说明

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