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

📄 buzzer_timer1_interrupt.lss

📁 avr单片机的定时器使用范例
💻 LSS
字号:

buzzer_timer1_interrupt.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000001d0  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000006  00800060  000001d0  00000244  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000001  00800066  000001d6  0000024a  2**0
                  ALLOC
  3 .debug_aranges 00000040  00000000  00000000  0000024a  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_pubnames 0000009c  00000000  00000000  0000028a  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   00000195  00000000  00000000  00000326  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 000000e6  00000000  00000000  000004bb  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   000001c3  00000000  00000000  000005a1  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  00000080  00000000  00000000  00000764  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    000000fb  00000000  00000000  000007e4  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54	; 0x54 <__ctors_end>
   4:	0c 94 9c 00 	jmp	0x138	; 0x138 <__vector_1>
   8:	0c 94 c1 00 	jmp	0x182	; 0x182 <__vector_2>
   c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  10:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  14:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  18:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  1c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  20:	0c 94 52 00 	jmp	0xa4	; 0xa4 <__vector_8>
  24:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  28:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  2c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  30:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  34:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  38:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  3c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  40:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  44:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  48:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  4c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  50:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>

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:	e0 ed       	ldi	r30, 0xD0	; 208
  68:	f1 e0       	ldi	r31, 0x01	; 1
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

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

00000070 <.do_copy_data_start>:
  70:	a6 36       	cpi	r26, 0x66	; 102
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

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

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

00000080 <.do_clear_bss_start>:
  80:	a7 36       	cpi	r26, 0x67	; 103
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0e 94 85 00 	call	0x10a	; 0x10a <main>
  8a:	0c 94 e6 00 	jmp	0x1cc	; 0x1cc <_exit>

0000008e <__bad_interrupt>:
  8e:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

00000092 <timer1_init>:

 unsigned long time1=1000000;
unsigned int tcnt1=0xfc2e;

void timer1_init(void)  //定时器1中断函数
{
  92:	1e bc       	out	0x2e, r1	; 46
 TCCR1B=0X00;//先停止定时器1
 TCNT1H=0Xfc;//设定计数器初值65535-1000000/1024= 64559 = 0xfc2e //定时一秒 内 部震荡 1 M 赫兹
  94:	8c ef       	ldi	r24, 0xFC	; 252
  96:	8d bd       	out	0x2d, r24	; 45
 TCNT1L=0X2f;
  98:	8f e2       	ldi	r24, 0x2F	; 47
  9a:	8c bd       	out	0x2c, r24	; 44
 TCCR1A=0X00;//启动定时器1,使用1024分频
  9c:	1f bc       	out	0x2f, r1	; 47
 TCCR1B=0X05;
  9e:	85 e0       	ldi	r24, 0x05	; 5
  a0:	8e bd       	out	0x2e, r24	; 46
}
  a2:	08 95       	ret

000000a4 <__vector_8>:
SIGNAL(SIG_OVERFLOW1)     //interrupt[TIM1_OVF]
{
  a4:	1f 92       	push	r1
  a6:	0f 92       	push	r0
  a8:	0f b6       	in	r0, 0x3f	; 63
  aa:	0f 92       	push	r0
  ac:	11 24       	eor	r1, r1
  ae:	8f 93       	push	r24
  b0:	9f 93       	push	r25
  b2:	af 93       	push	r26
  b4:	bf 93       	push	r27
tcnt1=(65535-time1/(fenpin)*(F_CPU/1000000));
  b6:	80 91 60 00 	lds	r24, 0x0060
  ba:	90 91 61 00 	lds	r25, 0x0061
  be:	a0 91 62 00 	lds	r26, 0x0062
  c2:	b0 91 63 00 	lds	r27, 0x0063
  c6:	07 2e       	mov	r0, r23
  c8:	7a e0       	ldi	r23, 0x0A	; 10
  ca:	b6 95       	lsr	r27
  cc:	a7 95       	ror	r26
  ce:	97 95       	ror	r25
  d0:	87 95       	ror	r24
  d2:	7a 95       	dec	r23
  d4:	d1 f7       	brne	.-12     	; 0xca <__vector_8+0x26>
  d6:	70 2d       	mov	r23, r0
  d8:	80 95       	com	r24
  da:	90 95       	com	r25
  dc:	90 93 65 00 	sts	0x0065, r25
  e0:	80 93 64 00 	sts	0x0064, r24
TCNT1= tcnt1; //加载初始值
  e4:	9d bd       	out	0x2d, r25	; 45
  e6:	8c bd       	out	0x2c, r24	; 44
 //TCNT1H=0Xfc; //重设初始值
 //TCNT1L=0X2e; //完成一次工作

PORTA=uc_Led;//输出
  e8:	80 91 66 00 	lds	r24, 0x0066
  ec:	8b bb       	out	0x1b, r24	; 27
 TCCR1B=0X05;
  ee:	95 e0       	ldi	r25, 0x05	; 5
  f0:	9e bd       	out	0x2e, r25	; 46
 uc_Led++; 
  f2:	8f 5f       	subi	r24, 0xFF	; 255
  f4:	80 93 66 00 	sts	0x0066, r24

}
  f8:	bf 91       	pop	r27
  fa:	af 91       	pop	r26
  fc:	9f 91       	pop	r25
  fe:	8f 91       	pop	r24
 100:	0f 90       	pop	r0
 102:	0f be       	out	0x3f, r0	; 63
 104:	0f 90       	pop	r0
 106:	1f 90       	pop	r1
 108:	18 95       	reti

0000010a <main>:

int main(void)
{
 10a:	8f ef       	ldi	r24, 0xFF	; 255
 10c:	8a bb       	out	0x1a, r24	; 26
  DDRA=0Xff;
  SREG|=0X80;// 全局中断使能即  sei();
 10e:	8f b7       	in	r24, 0x3f	; 63
 110:	80 68       	ori	r24, 0x80	; 128
 112:	8f bf       	out	0x3f, r24	; 63
  TIMSK|=0X04;
 114:	89 b7       	in	r24, 0x39	; 57
 116:	84 60       	ori	r24, 0x04	; 4
 118:	89 bf       	out	0x39, r24	; 57
 unsigned long time1=1000000;
unsigned int tcnt1=0xfc2e;

void timer1_init(void)  //定时器1中断函数
{
 TCCR1B=0X00;//先停止定时器1
 11a:	1e bc       	out	0x2e, r1	; 46
 TCNT1H=0Xfc;//设定计数器初值65535-1000000/1024= 64559 = 0xfc2e //定时一秒 内 部震荡 1 M 赫兹
 11c:	8c ef       	ldi	r24, 0xFC	; 252
 11e:	8d bd       	out	0x2d, r24	; 45
 TCNT1L=0X2f;
 120:	8f e2       	ldi	r24, 0x2F	; 47
 122:	8c bd       	out	0x2c, r24	; 44
 TCCR1A=0X00;//启动定时器1,使用1024分频
 124:	1f bc       	out	0x2f, r1	; 47
 TCCR1B=0X05;
 126:	85 e0       	ldi	r24, 0x05	; 5
 128:	8e bd       	out	0x2e, r24	; 46
{
  DDRA=0Xff;
  SREG|=0X80;// 全局中断使能即  sei();
  TIMSK|=0X04;
  timer1_init();
  External_Inter();
 12a:	0e 94 98 00 	call	0x130	; 0x130 <External_Inter>
 12e:	ff cf       	rjmp	.-2      	; 0x12e <main+0x24>

00000130 <External_Inter>:

#include <avr/interrupt.h>
extern unsigned long time1;
void External_Inter(void)//外部中断设置
{
 130:	8b b7       	in	r24, 0x3b	; 59
 132:	80 6e       	ori	r24, 0xE0	; 224
 134:	8b bf       	out	0x3b, r24	; 59
GICR|=_BV(INT0)|_BV(INT1)|_BV(INT2); //低电平中断   GICR为通用中断控制器

}
 136:	08 95       	ret

00000138 <__vector_1>:
SIGNAL(SIG_INTERRUPT0) 
{
 138:	1f 92       	push	r1
 13a:	0f 92       	push	r0
 13c:	0f b6       	in	r0, 0x3f	; 63
 13e:	0f 92       	push	r0
 140:	11 24       	eor	r1, r1
 142:	8f 93       	push	r24
 144:	9f 93       	push	r25
 146:	af 93       	push	r26
 148:	bf 93       	push	r27
time1++; //外中断0程序
 14a:	80 91 60 00 	lds	r24, 0x0060
 14e:	90 91 61 00 	lds	r25, 0x0061
 152:	a0 91 62 00 	lds	r26, 0x0062
 156:	b0 91 63 00 	lds	r27, 0x0063
 15a:	01 96       	adiw	r24, 0x01	; 1
 15c:	a1 1d       	adc	r26, r1
 15e:	b1 1d       	adc	r27, r1
 160:	80 93 60 00 	sts	0x0060, r24
 164:	90 93 61 00 	sts	0x0061, r25
 168:	a0 93 62 00 	sts	0x0062, r26
 16c:	b0 93 63 00 	sts	0x0063, r27

}
 170:	bf 91       	pop	r27
 172:	af 91       	pop	r26
 174:	9f 91       	pop	r25
 176:	8f 91       	pop	r24
 178:	0f 90       	pop	r0
 17a:	0f be       	out	0x3f, r0	; 63
 17c:	0f 90       	pop	r0
 17e:	1f 90       	pop	r1
 180:	18 95       	reti

00000182 <__vector_2>:
SIGNAL(SIG_INTERRUPT1)
{
 182:	1f 92       	push	r1
 184:	0f 92       	push	r0
 186:	0f b6       	in	r0, 0x3f	; 63
 188:	0f 92       	push	r0
 18a:	11 24       	eor	r1, r1
 18c:	8f 93       	push	r24
 18e:	9f 93       	push	r25
 190:	af 93       	push	r26
 192:	bf 93       	push	r27
time1--; //外中断1程序
 194:	80 91 60 00 	lds	r24, 0x0060
 198:	90 91 61 00 	lds	r25, 0x0061
 19c:	a0 91 62 00 	lds	r26, 0x0062
 1a0:	b0 91 63 00 	lds	r27, 0x0063
 1a4:	01 97       	sbiw	r24, 0x01	; 1
 1a6:	a1 09       	sbc	r26, r1
 1a8:	b1 09       	sbc	r27, r1
 1aa:	80 93 60 00 	sts	0x0060, r24
 1ae:	90 93 61 00 	sts	0x0061, r25
 1b2:	a0 93 62 00 	sts	0x0062, r26
 1b6:	b0 93 63 00 	sts	0x0063, r27

}
 1ba:	bf 91       	pop	r27
 1bc:	af 91       	pop	r26
 1be:	9f 91       	pop	r25
 1c0:	8f 91       	pop	r24
 1c2:	0f 90       	pop	r0
 1c4:	0f be       	out	0x3f, r0	; 63
 1c6:	0f 90       	pop	r0
 1c8:	1f 90       	pop	r1
 1ca:	18 95       	reti

000001cc <_exit>:
 1cc:	f8 94       	cli

000001ce <__stop_program>:
 1ce:	ff cf       	rjmp	.-2      	; 0x1ce <__stop_program>

⌨️ 快捷键说明

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