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

📄 main.lss

📁 用ATMEGA16控制舵机转动,当按动中断按键时
💻 LSS
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000226  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00000002  00800060  00800060  0000029a  2**0
                  ALLOC
  2 .stab         0000036c  00000000  00000000  0000029c  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      00000084  00000000  00000000  00000608  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_aranges 00000040  00000000  00000000  0000068c  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_pubnames 0000009a  00000000  00000000  000006cc  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_info   00000228  00000000  00000000  00000766  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_abbrev 0000016a  00000000  00000000  0000098e  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_line   000002ba  00000000  00000000  00000af8  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_frame  00000090  00000000  00000000  00000db2  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    000000f2  00000000  00000000  00000e42  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_loc    00000080  00000000  00000000  00000f34  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54	; 0x54 <__ctors_end>
   4:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
   8:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
   c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  10:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  14:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  18:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  1c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  20:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  24:	0c 94 47 00 	jmp	0x8e	; 0x8e <__vector_9>
  28:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  2c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  30:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  34:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  38:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  3c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  40:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  44:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  48:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  4c:	0c 94 45 00 	jmp	0x8a	; 0x8a <__bad_interrupt>
  50:	0c 94 45 00 	jmp	0x8a	; 0x8a <__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:	e6 e2       	ldi	r30, 0x26	; 38
  68:	f2 e0       	ldi	r31, 0x02	; 2
  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:	a0 36       	cpi	r26, 0x60	; 96
  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:	a0 e6       	ldi	r26, 0x60	; 96
  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:	a2 36       	cpi	r26, 0x62	; 98
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 71 00 	jmp	0xe2	; 0xe2 <main>

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

0000008e <__vector_9>:


//T/C0定时中断服务程序
ISR(TIMER0_OVF_vect )
{
  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:	6f 93       	push	r22
  9a:	7f 93       	push	r23
  9c:	8f 93       	push	r24
  9e:	9f 93       	push	r25
	TCNT0 = 0xfa;        //重装计数初值
  a0:	8a ef       	ldi	r24, 0xFA	; 250
  a2:	82 bf       	out	0x32, r24	; 50
	
	if(Counter500us < jiaodu)   //判断0.5ms的次数是否小于角度标识
  a4:	90 91 61 00 	lds	r25, 0x0061
  a8:	80 91 60 00 	lds	r24, 0x0060
  ac:	98 17       	cp	r25, r24
  ae:	18 f4       	brcc	.+6      	; 0xb6 <__vector_9+0x28>
	{
		PORTB = 0x01;         //小于,则继续发送高电平
  b0:	81 e0       	ldi	r24, 0x01	; 1
  b2:	88 bb       	out	0x18, r24	; 24
  b4:	01 c0       	rjmp	.+2      	; 0xb8 <__vector_9+0x2a>
	}
	else
	{
		PORTB = 0x00;          //大于,则输出低电平
  b6:	18 ba       	out	0x18, r1	; 24
	}
	
	Counter500us++;         //0.5ms次数加1
  b8:	80 91 61 00 	lds	r24, 0x0061
  bc:	8f 5f       	subi	r24, 0xFF	; 255
  be:	80 93 61 00 	sts	0x0061, r24
	Counter500us = Counter500us % 40;	 //0.5ms次数始终为40,既保持脉冲周期为20ms
  c2:	80 91 61 00 	lds	r24, 0x0061
  c6:	68 e2       	ldi	r22, 0x28	; 40
  c8:	0e 94 07 01 	call	0x20e	; 0x20e <__udivmodqi4>
  cc:	90 93 61 00 	sts	0x0061, r25
  d0:	9f 91       	pop	r25
  d2:	8f 91       	pop	r24
  d4:	7f 91       	pop	r23
  d6:	6f 91       	pop	r22
  d8:	0f 90       	pop	r0
  da:	0f be       	out	0x3f, r0	; 63
  dc:	0f 90       	pop	r0
  de:	1f 90       	pop	r1
  e0:	18 95       	reti

000000e2 <main>:
  e2:	91 e0       	ldi	r25, 0x01	; 1
  e4:	97 bb       	out	0x17, r25	; 23
  e6:	8e ef       	ldi	r24, 0xFE	; 254
  e8:	88 bb       	out	0x18, r24	; 24
  ea:	14 ba       	out	0x14, r1	; 20
  ec:	8f ef       	ldi	r24, 0xFF	; 255
  ee:	85 bb       	out	0x15, r24	; 21
  f0:	1a ba       	out	0x1a, r1	; 26
  f2:	8b bb       	out	0x1b, r24	; 27
  f4:	89 b7       	in	r24, 0x39	; 57
  f6:	81 60       	ori	r24, 0x01	; 1
  f8:	89 bf       	out	0x39, r24	; 57
  fa:	83 b7       	in	r24, 0x33	; 51
  fc:	85 60       	ori	r24, 0x05	; 5
  fe:	83 bf       	out	0x33, r24	; 51
 100:	8a ef       	ldi	r24, 0xFA	; 250
 102:	82 bf       	out	0x32, r24	; 50
 104:	10 92 61 00 	sts	0x0061, r1
 108:	90 93 60 00 	sts	0x0060, r25
 10c:	78 94       	sei
 10e:	0e 94 e8 00 	call	0x1d0	; 0x1d0 <KeyValue>
 112:	82 30       	cpi	r24, 0x02	; 2
 114:	61 f0       	breq	.+24     	; 0x12e <main+0x4c>
 116:	83 30       	cpi	r24, 0x03	; 3
 118:	18 f4       	brcc	.+6      	; 0x120 <main+0x3e>
 11a:	81 30       	cpi	r24, 0x01	; 1
 11c:	c1 f7       	brne	.-16     	; 0x10e <main+0x2c>
 11e:	05 c0       	rjmp	.+10     	; 0x12a <main+0x48>
 120:	83 30       	cpi	r24, 0x03	; 3
 122:	39 f0       	breq	.+14     	; 0x132 <main+0x50>
 124:	84 30       	cpi	r24, 0x04	; 4
 126:	99 f7       	brne	.-26     	; 0x10e <main+0x2c>
 128:	06 c0       	rjmp	.+12     	; 0x136 <main+0x54>
 12a:	82 e0       	ldi	r24, 0x02	; 2
 12c:	05 c0       	rjmp	.+10     	; 0x138 <main+0x56>
 12e:	83 e0       	ldi	r24, 0x03	; 3
 130:	03 c0       	rjmp	.+6      	; 0x138 <main+0x56>
 132:	84 e0       	ldi	r24, 0x04	; 4
 134:	01 c0       	rjmp	.+2      	; 0x138 <main+0x56>
 136:	85 e0       	ldi	r24, 0x05	; 5
 138:	80 93 60 00 	sts	0x0060, r24
 13c:	e8 cf       	rjmp	.-48     	; 0x10e <main+0x2c>

0000013e <keyPort_init>:
#include "key.h"

 //按键端口初始化
void keyPort_init(void)    
{
 13e:	11 ba       	out	0x11, r1	; 17
	//DDRD = 0x33;           //PD2\3\6\7定义为输入口
	//PORTD |= key2 | key3 | key4;   //按键key1\2\3内部上拉电阻使能
	
	DDRD = 0x00;           //PD口全部为输入脚
	PORTD = 0xfb;   //按键key1内部上拉电阻不使能,其余使能
 140:	8b ef       	ldi	r24, 0xFB	; 251
 142:	82 bb       	out	0x12, r24	; 18
 144:	08 95       	ret

00000146 <Delayus>:
	
}
  
//按键检测
unsigned char keyScan(void)  
{
	if((!(PIND & key4)) || (!(PIND & key3)) ||
	           (!(PIND & key2)) || ((PIND & key1)))            //是否有按键按下
	{
		Delayms(20);
		if((!(PIND & key4)) || (!(PIND & key3)) ||
	           (!(PIND & key2)) || ((PIND & key1)))    //按键消除抖动后,是否有按键按下
		{
			return 1;                       //有按键按下,返回1
		}
		return 0;              //干扰信号,返回0
	}
	return 0;                      //没有按键按下,返回0
}
    
//获取按键值
unsigned char KeyValue(void)
{
	if(keyScan())                //判断那个按键被按下
	{
		if(!(PIND & key4))      //按键4被按下,则返回键值4
		return 4;
		if(!(PIND & key3))   //按键3被按下,则返回键值3
		return 3;
		if(!(PIND & key2))      //按键2被按下,则返回键值2
		return 2;
		if(PIND & key1)        //按键1被按下,则返回键值1
		return 1;		
	}
	return 0;       //没有按键按下,返回0
}

//us级别的延时函数
void Delayus(unsigned int lus)
{
 146:	9c 01       	movw	r18, r24
 148:	e4 e0       	ldi	r30, 0x04	; 4
 14a:	f0 e0       	ldi	r31, 0x00	; 0
 14c:	03 c0       	rjmp	.+6      	; 0x154 <Delayus+0xe>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 14e:	cf 01       	movw	r24, r30
 150:	01 97       	sbiw	r24, 0x01	; 1
 152:	f1 f7       	brne	.-4      	; 0x150 <Delayus+0xa>
	while(lus--)
 154:	21 50       	subi	r18, 0x01	; 1
 156:	30 40       	sbci	r19, 0x00	; 0
 158:	8f ef       	ldi	r24, 0xFF	; 255
 15a:	2f 3f       	cpi	r18, 0xFF	; 255
 15c:	38 07       	cpc	r19, r24
 15e:	b9 f7       	brne	.-18     	; 0x14e <Delayus+0x8>
 160:	08 95       	ret

00000162 <Delayms>:
	{
		_delay_loop_2(4);      //_delay_loop_2(1)是延时4个时钟周期,参数为3则延时12
		           //个时钟周期,本实验用12M晶体,则12个时钟周期为12/12=1us
    }
}

//ms级别的延时函数
void Delayms(unsigned int lms)
{
 162:	9c 01       	movw	r18, r24
 164:	0d c0       	rjmp	.+26     	; 0x180 <Delayms+0x1e>
	while(lms--)
 166:	47 ee       	ldi	r20, 0xE7	; 231
 168:	53 e0       	ldi	r21, 0x03	; 3
 16a:	e4 e0       	ldi	r30, 0x04	; 4
 16c:	f0 e0       	ldi	r31, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 16e:	cf 01       	movw	r24, r30
 170:	01 97       	sbiw	r24, 0x01	; 1
 172:	f1 f7       	brne	.-4      	; 0x170 <Delayms+0xe>
 174:	41 50       	subi	r20, 0x01	; 1
 176:	50 40       	sbci	r21, 0x00	; 0
 178:	8f ef       	ldi	r24, 0xFF	; 255
 17a:	4f 3f       	cpi	r20, 0xFF	; 255
 17c:	58 07       	cpc	r21, r24
 17e:	b9 f7       	brne	.-18     	; 0x16e <Delayms+0xc>
 180:	21 50       	subi	r18, 0x01	; 1
 182:	30 40       	sbci	r19, 0x00	; 0
 184:	8f ef       	ldi	r24, 0xFF	; 255
 186:	2f 3f       	cpi	r18, 0xFF	; 255
 188:	38 07       	cpc	r19, r24
 18a:	69 f7       	brne	.-38     	; 0x166 <Delayms+0x4>
 18c:	08 95       	ret

0000018e <keyScan>:
 18e:	87 9b       	sbis	0x10, 7	; 16
 190:	09 c0       	rjmp	.+18     	; 0x1a4 <keyScan+0x16>
 192:	86 9b       	sbis	0x10, 6	; 16
 194:	07 c0       	rjmp	.+14     	; 0x1a4 <keyScan+0x16>
 196:	83 9b       	sbis	0x10, 3	; 16
 198:	05 c0       	rjmp	.+10     	; 0x1a4 <keyScan+0x16>
 19a:	82 99       	sbic	0x10, 2	; 16
 19c:	03 c0       	rjmp	.+6      	; 0x1a4 <keyScan+0x16>
 19e:	80 e0       	ldi	r24, 0x00	; 0
 1a0:	90 e0       	ldi	r25, 0x00	; 0
 1a2:	08 95       	ret
 1a4:	84 e1       	ldi	r24, 0x14	; 20
 1a6:	90 e0       	ldi	r25, 0x00	; 0
 1a8:	0e 94 b1 00 	call	0x162	; 0x162 <Delayms>
 1ac:	87 9b       	sbis	0x10, 7	; 16
 1ae:	0d c0       	rjmp	.+26     	; 0x1ca <keyScan+0x3c>
 1b0:	86 9b       	sbis	0x10, 6	; 16
 1b2:	0b c0       	rjmp	.+22     	; 0x1ca <keyScan+0x3c>
 1b4:	83 9b       	sbis	0x10, 3	; 16
 1b6:	09 c0       	rjmp	.+18     	; 0x1ca <keyScan+0x3c>
 1b8:	80 b3       	in	r24, 0x10	; 16
 1ba:	99 27       	eor	r25, r25
 1bc:	96 95       	lsr	r25
 1be:	87 95       	ror	r24
 1c0:	96 95       	lsr	r25
 1c2:	87 95       	ror	r24
 1c4:	81 70       	andi	r24, 0x01	; 1
 1c6:	90 70       	andi	r25, 0x00	; 0
 1c8:	08 95       	ret
 1ca:	81 e0       	ldi	r24, 0x01	; 1
 1cc:	90 e0       	ldi	r25, 0x00	; 0
 1ce:	08 95       	ret

000001d0 <KeyValue>:
 1d0:	0e 94 c7 00 	call	0x18e	; 0x18e <keyScan>
 1d4:	88 23       	and	r24, r24
 1d6:	19 f4       	brne	.+6      	; 0x1de <KeyValue+0xe>
 1d8:	80 e0       	ldi	r24, 0x00	; 0
 1da:	90 e0       	ldi	r25, 0x00	; 0
 1dc:	08 95       	ret
 1de:	87 99       	sbic	0x10, 7	; 16
 1e0:	03 c0       	rjmp	.+6      	; 0x1e8 <KeyValue+0x18>
 1e2:	84 e0       	ldi	r24, 0x04	; 4
 1e4:	90 e0       	ldi	r25, 0x00	; 0
 1e6:	08 95       	ret
 1e8:	86 99       	sbic	0x10, 6	; 16
 1ea:	03 c0       	rjmp	.+6      	; 0x1f2 <KeyValue+0x22>
 1ec:	83 e0       	ldi	r24, 0x03	; 3
 1ee:	90 e0       	ldi	r25, 0x00	; 0
 1f0:	08 95       	ret
 1f2:	83 99       	sbic	0x10, 3	; 16
 1f4:	03 c0       	rjmp	.+6      	; 0x1fc <KeyValue+0x2c>
 1f6:	82 e0       	ldi	r24, 0x02	; 2
 1f8:	90 e0       	ldi	r25, 0x00	; 0
 1fa:	08 95       	ret
 1fc:	80 b3       	in	r24, 0x10	; 16
 1fe:	99 27       	eor	r25, r25
 200:	96 95       	lsr	r25
 202:	87 95       	ror	r24
 204:	96 95       	lsr	r25
 206:	87 95       	ror	r24
 208:	81 70       	andi	r24, 0x01	; 1
 20a:	90 70       	andi	r25, 0x00	; 0
 20c:	08 95       	ret

0000020e <__udivmodqi4>:
 20e:	99 1b       	sub	r25, r25
 210:	79 e0       	ldi	r23, 0x09	; 9
 212:	04 c0       	rjmp	.+8      	; 0x21c <__udivmodqi4_ep>

00000214 <__udivmodqi4_loop>:
 214:	99 1f       	adc	r25, r25
 216:	96 17       	cp	r25, r22
 218:	08 f0       	brcs	.+2      	; 0x21c <__udivmodqi4_ep>
 21a:	96 1b       	sub	r25, r22

0000021c <__udivmodqi4_ep>:
 21c:	88 1f       	adc	r24, r24
 21e:	7a 95       	dec	r23
 220:	c9 f7       	brne	.-14     	; 0x214 <__udivmodqi4_loop>
 222:	80 95       	com	r24
 224:	08 95       	ret

⌨️ 快捷键说明

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