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

📄 motor_control.lss

📁 利用avr c编程的综合程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     8a8:	80 6e       	ori	r24, 0xE0	; 224
     8aa:	88 bb       	out	0x18, r24	; 24
     8ac:	80 ee       	ldi	r24, 0xE0	; 224
     8ae:	9e e2       	ldi	r25, 0x2E	; 46
     8b0:	01 97       	sbiw	r24, 0x01	; 1
     8b2:	f1 f7       	brne	.-4      	; 0x8b0 <__vector_9+0x4e>
       _delay_ms(3); 
	   PORTB &= 0x1F;
     8b4:	88 b3       	in	r24, 0x18	; 24
     8b6:	8f 71       	andi	r24, 0x1F	; 31
     8b8:	88 bb       	out	0x18, r24	; 24
	}
	if(count_m == 125)
     8ba:	80 91 88 00 	lds	r24, 0x0088
     8be:	8d 37       	cpi	r24, 0x7D	; 125
     8c0:	39 f4       	brne	.+14     	; 0x8d0 <__vector_9+0x6e>
	{
	count_m = 0;
     8c2:	10 92 88 00 	sts	0x0088, r1
	second ++;
     8c6:	80 91 89 00 	lds	r24, 0x0089
     8ca:	8f 5f       	subi	r24, 0xFF	; 255
     8cc:	80 93 89 00 	sts	0x0089, r24
	}
     8d0:	ff 91       	pop	r31
     8d2:	ef 91       	pop	r30
     8d4:	bf 91       	pop	r27
     8d6:	af 91       	pop	r26
     8d8:	9f 91       	pop	r25
     8da:	8f 91       	pop	r24
     8dc:	7f 91       	pop	r23
     8de:	6f 91       	pop	r22
     8e0:	5f 91       	pop	r21
     8e2:	4f 91       	pop	r20
     8e4:	3f 91       	pop	r19
     8e6:	2f 91       	pop	r18
     8e8:	0f 90       	pop	r0
     8ea:	0f be       	out	0x3f, r0	; 63
     8ec:	0f 90       	pop	r0
     8ee:	1f 90       	pop	r1
     8f0:	18 95       	reti

000008f2 <__vector_11>:
volatile unsigned char rx_wr_index, rx_rd_index, rx_counter;

volatile unsigned char rx_buffer_overflow = 0;

ISR (USART_RXC_vect)
{
     8f2:	1f 92       	push	r1
     8f4:	0f 92       	push	r0
     8f6:	0f b6       	in	r0, 0x3f	; 63
     8f8:	0f 92       	push	r0
     8fa:	11 24       	eor	r1, r1
     8fc:	8f 93       	push	r24
     8fe:	9f 93       	push	r25
     900:	ef 93       	push	r30
     902:	ff 93       	push	r31
	unsigned char status,data;
	status = UCSRA;
     904:	8b b1       	in	r24, 0x0b	; 11
	data = UDR;
     906:	9c b1       	in	r25, 0x0c	; 12
	if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
     908:	8c 71       	andi	r24, 0x1C	; 28
     90a:	f9 f4       	brne	.+62     	; 0x94a <__vector_11+0x58>
	{
		rx_buffer[rx_wr_index] = data;
     90c:	e0 91 8b 00 	lds	r30, 0x008B
     910:	f0 e0       	ldi	r31, 0x00	; 0
     912:	e4 57       	subi	r30, 0x74	; 116
     914:	ff 4f       	sbci	r31, 0xFF	; 255
     916:	90 83       	st	Z, r25
		if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index = 0;
     918:	80 91 8b 00 	lds	r24, 0x008B
     91c:	8f 5f       	subi	r24, 0xFF	; 255
     91e:	80 93 8b 00 	sts	0x008B, r24
     922:	80 91 8b 00 	lds	r24, 0x008B
     926:	88 30       	cpi	r24, 0x08	; 8
     928:	11 f4       	brne	.+4      	; 0x92e <__vector_11+0x3c>
     92a:	10 92 8b 00 	sts	0x008B, r1
		if (++rx_counter == RX_BUFFER_SIZE)
     92e:	80 91 94 00 	lds	r24, 0x0094
     932:	8f 5f       	subi	r24, 0xFF	; 255
     934:	80 93 94 00 	sts	0x0094, r24
     938:	80 91 94 00 	lds	r24, 0x0094
     93c:	88 30       	cpi	r24, 0x08	; 8
     93e:	29 f4       	brne	.+10     	; 0x94a <__vector_11+0x58>
		{
			rx_counter = 0;
     940:	10 92 94 00 	sts	0x0094, r1
			rx_buffer_overflow = 1;
     944:	81 e0       	ldi	r24, 0x01	; 1
     946:	80 93 8a 00 	sts	0x008A, r24
		}
	}
}
     94a:	ff 91       	pop	r31
     94c:	ef 91       	pop	r30
     94e:	9f 91       	pop	r25
     950:	8f 91       	pop	r24
     952:	0f 90       	pop	r0
     954:	0f be       	out	0x3f, r0	; 63
     956:	0f 90       	pop	r0
     958:	1f 90       	pop	r1
     95a:	18 95       	reti

0000095c <uartGetc>:

unsigned char uartGetc(void)
{	
	unsigned char data;
	while(rx_counter == 0);
     95c:	80 91 94 00 	lds	r24, 0x0094
     960:	88 23       	and	r24, r24
     962:	e1 f3       	breq	.-8      	; 0x95c <uartGetc>
	
	data=rx_buffer[rx_rd_index];
     964:	e0 91 95 00 	lds	r30, 0x0095
     968:	f0 e0       	ldi	r31, 0x00	; 0
     96a:	e4 57       	subi	r30, 0x74	; 116
     96c:	ff 4f       	sbci	r31, 0xFF	; 255
     96e:	e0 81       	ld	r30, Z
	if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
     970:	80 91 95 00 	lds	r24, 0x0095
     974:	8f 5f       	subi	r24, 0xFF	; 255
     976:	80 93 95 00 	sts	0x0095, r24
     97a:	80 91 95 00 	lds	r24, 0x0095
     97e:	88 30       	cpi	r24, 0x08	; 8
     980:	11 f4       	brne	.+4      	; 0x986 <uartGetc+0x2a>
     982:	10 92 95 00 	sts	0x0095, r1
	cli();
     986:	f8 94       	cli
	if(rx_counter)
     988:	80 91 94 00 	lds	r24, 0x0094
     98c:	88 23       	and	r24, r24
     98e:	29 f0       	breq	.+10     	; 0x99a <uartGetc+0x3e>
		--rx_counter;
     990:	80 91 94 00 	lds	r24, 0x0094
     994:	81 50       	subi	r24, 0x01	; 1
     996:	80 93 94 00 	sts	0x0094, r24
	sei();
     99a:	78 94       	sei
	return data;
}
     99c:	8e 2f       	mov	r24, r30
     99e:	08 95       	ret

000009a0 <uartOpen>:

void uartOpen(void)
{
	UCSRB = 0x98;
     9a0:	88 e9       	ldi	r24, 0x98	; 152
     9a2:	8a b9       	out	0x0a, r24	; 10
}
     9a4:	08 95       	ret

000009a6 <uartClose>:

void uartClose(void)
{
	UCSRB &= 0x00;
     9a6:	8a b1       	in	r24, 0x0a	; 10
     9a8:	1a b8       	out	0x0a, r1	; 10
}
     9aa:	08 95       	ret

000009ac <uartPutc>:

void uartPutc(unsigned char c)
{
	while ( !( UCSRA & DATA_REGISTER_EMPTY) )
     9ac:	5d 9b       	sbis	0x0b, 5	; 11
     9ae:	fe cf       	rjmp	.-4      	; 0x9ac <uartPutc>
	;
	UDR = c;
     9b0:	8c b9       	out	0x0c, r24	; 12
}
     9b2:	08 95       	ret

000009b4 <uartInit>:
   // Communication Parameters: 8 Data, 1 Stop, Odd Parity
   // USART Receiver: On
   // USART Transmitter: On
   // USART Mode: Asynchronous
   // USART Baud rate: 38400
   UCSRA=0x00;
     9b4:	1b b8       	out	0x0b, r1	; 11
   UCSRB=0x98;
     9b6:	88 e9       	ldi	r24, 0x98	; 152
     9b8:	8a b9       	out	0x0a, r24	; 10
   UCSRC=0xB6;
     9ba:	86 eb       	ldi	r24, 0xB6	; 182
     9bc:	80 bd       	out	0x20, r24	; 32
   UBRRH=0x00;
     9be:	10 bc       	out	0x20, r1	; 32
   UBRRL=0x19;
     9c0:	89 e1       	ldi	r24, 0x19	; 25
     9c2:	89 b9       	out	0x09, r24	; 9

   sei();
     9c4:	78 94       	sei
}
     9c6:	08 95       	ret

000009c8 <get_rel_angle>:
	return;
}

int get_rel_angle(int angle_des)
{
	int rel_angle = angle_des - angle_loca;
     9c8:	20 91 9c 00 	lds	r18, 0x009C
     9cc:	30 91 9d 00 	lds	r19, 0x009D
     9d0:	82 1b       	sub	r24, r18
     9d2:	93 0b       	sbc	r25, r19
     9d4:	9c 01       	movw	r18, r24
	if(rel_angle >= -180 && rel_angle <= 180)
     9d6:	8c 54       	subi	r24, 0x4C	; 76
     9d8:	9f 4f       	sbci	r25, 0xFF	; 255
     9da:	89 56       	subi	r24, 0x69	; 105
     9dc:	91 40       	sbci	r25, 0x01	; 1
     9de:	78 f0       	brcs	.+30     	; 0x9fe <get_rel_angle+0x36>
		return rel_angle;
	else if(rel_angle > 180)
     9e0:	25 3b       	cpi	r18, 0xB5	; 181
     9e2:	31 05       	cpc	r19, r1
     9e4:	1c f0       	brlt	.+6      	; 0x9ec <get_rel_angle+0x24>
		return (rel_angle - 360);
     9e6:	28 56       	subi	r18, 0x68	; 104
     9e8:	31 40       	sbci	r19, 0x01	; 1
     9ea:	09 c0       	rjmp	.+18     	; 0x9fe <get_rel_angle+0x36>
	else if(rel_angle < -180)
     9ec:	8f ef       	ldi	r24, 0xFF	; 255
     9ee:	2c 34       	cpi	r18, 0x4C	; 76
     9f0:	38 07       	cpc	r19, r24
     9f2:	1c f0       	brlt	.+6      	; 0x9fa <get_rel_angle+0x32>
     9f4:	20 e0       	ldi	r18, 0x00	; 0
     9f6:	30 e0       	ldi	r19, 0x00	; 0
     9f8:	02 c0       	rjmp	.+4      	; 0x9fe <get_rel_angle+0x36>
		return (rel_angle + 360);
     9fa:	28 59       	subi	r18, 0x98	; 152
     9fc:	3e 4f       	sbci	r19, 0xFE	; 254
	else 
		return 0;
}
     9fe:	c9 01       	movw	r24, r18
     a00:	08 95       	ret

00000a02 <get_rotate_speed>:

short get_rotate_speed(int angle)
{
	if(angle > 120)
     a02:	89 37       	cpi	r24, 0x79	; 121
     a04:	91 05       	cpc	r25, r1
     a06:	1c f0       	brlt	.+6      	; 0xa0e <get_rotate_speed+0xc>
     a08:	22 e3       	ldi	r18, 0x32	; 50
     a0a:	30 e0       	ldi	r19, 0x00	; 0
     a0c:	13 c0       	rjmp	.+38     	; 0xa34 <get_rotate_speed+0x32>
		return 50;
	else if(angle > 90)
     a0e:	8b 35       	cpi	r24, 0x5B	; 91
     a10:	91 05       	cpc	r25, r1
     a12:	1c f0       	brlt	.+6      	; 0xa1a <get_rotate_speed+0x18>
     a14:	28 e2       	ldi	r18, 0x28	; 40
     a16:	30 e0       	ldi	r19, 0x00	; 0
     a18:	0d c0       	rjmp	.+26     	; 0xa34 <get_rotate_speed+0x32>
		return 40;
	else if(angle > 45)
     a1a:	8e 32       	cpi	r24, 0x2E	; 46
     a1c:	91 05       	cpc	r25, r1
     a1e:	1c f0       	brlt	.+6      	; 0xa26 <get_rotate_speed+0x24>
     a20:	2e e1       	ldi	r18, 0x1E	; 30
     a22:	30 e0       	ldi	r19, 0x00	; 0
     a24:	07 c0       	rjmp	.+14     	; 0xa34 <get_rotate_speed+0x32>
		return 30;
	else if(angle > 15)
     a26:	40 97       	sbiw	r24, 0x10	; 16
     a28:	1c f4       	brge	.+6      	; 0xa30 <get_rotate_speed+0x2e>
     a2a:	2a e0       	ldi	r18, 0x0A	; 10
     a2c:	30 e0       	ldi	r19, 0x00	; 0
     a2e:	02 c0       	rjmp	.+4      	; 0xa34 <get_rotate_speed+0x32>
     a30:	24 e1       	ldi	r18, 0x14	; 20
     a32:	30 e0       	ldi	r19, 0x00	; 0
		return 20;
	else 
		return 10;
}
     a34:	c9 01       	movw	r24, r18
     a36:	08 95       	ret

00000a38 <get_angle_des>:
	motor(0x1a,move_speed,move_speed);
	return;
}

int get_angle_des(int x_des, int y_des)
{
     a38:	cf 92       	push	r12
     a3a:	df 92       	push	r13
     a3c:	ef 92       	push	r14
     a3e:	ff 92       	push	r15
     a40:	0f 93       	push	r16
     a42:	1f 93       	push	r17
     a44:	cf 93       	push	r28
     a46:	df 93       	push	r29
     a48:	ec 01       	movw	r28, r24
     a4a:	9b 01       	movw	r18, r22
	int angle_des; 
	if(x_des == x_loca)
     a4c:	80 91 a1 00 	lds	r24, 0x00A1
     a50:	90 91 a2 00 	lds	r25, 0x00A2
     a54:	c8 17       	cp	r28, r24
     a56:	d9 07       	cpc	r29, r25
     a58:	69 f4       	brne	.+26     	; 0xa74 <get_angle_des+0x3c>
	{
		if(y_des > y_loca)
     a5a:	80 91 9e 00 	lds	r24, 0x009E
     a5e:	90 91 9f 00 	lds	r25, 0x009F
     a62:	86 17       	cp	r24, r22
     a64:	97 07       	cpc	r25, r23
     a66:	1c f0       	brlt	.+6      	; 0xa6e <get_angle_des+0x36>
     a68:	66 ea       	ldi	r22, 0xA6	; 166
     a6a:	7f ef       	ldi	r23, 0xFF	; 255
     a6c:	35 c0       	rjmp	.+106    	; 0xad8 <get_angle_des+0xa0>
     a6e:	6a e5       	ldi	r22, 0x5A	; 90
     a70:	70 e0       	ldi	r23, 0x00	; 0
     a72:	32 c0       	rjmp	.+100    	; 0xad8 <get_angle_des+0xa0>
			angle_des = 90;
		else
			angle_des = -90;
	}
	else
		angle_des = (int)((atan(((double)(y_des-y_loca))/((double)(x_des-x_loca))))*180.0/Pi) ;
     a74:	80 91 9e 00 	lds	r24, 0x009E
     a78:	90 91 9f 00 	lds	r25, 0x009F
     a7c:	c0 90 a1 00 	lds	r12, 0x00A1
     a80:	d0 90 a2 00 	lds	r13, 0x00A2
     a84:	28 1b       	sub	r18, r24
     a86:	39 0b       	sbc	r19, r25
     a88:	b9 01       	movw	r22, r18
     a8a:	88 27       	eor	r24, r24
     a8c:	77 fd       	sbrc	r23, 7
     a8e:	80 95       	com	r24
     a90:	98 2f       	mov	r25, r24
     a92:	0e 94 e3 07 	call	0xfc6	; 0xfc6 <__floatsisf>
     a96:	7b 01       	movw	r14, r22
     a98:	8c 01       	movw	r16, r24
     a9a:	be 01       	movw	r22, r28
     a9c:	6c 19       	sub	r22, r12
     a9e:	7d 09       	sbc	r23, r13
     aa0:	88 27       	eor	r24, r24
     aa2:	77 fd       	sbrc	r23, 7
     aa4:	80 95       	com	r24
     aa6:	98 2f       	mov	r25, r24
     aa8:	0e 94 e3 07 	call	0xfc6	; 0xfc6 <__floatsisf>
     aac:	9b 01       	movw	r18, r22
     aae:	ac 01       	movw	r20, r24
     ab0:	c8 01       	movw	r24, r16
     ab2:	b7 01       	movw	r22, r14
     ab4:	0e 94 48 07 	call	0xe90	; 0xe90 <__divsf3>
     ab8:	0e 94 20 07 	call	0xe40	; 0xe40 <atan>
     abc:	20 e0       	ldi	r18, 0x00	; 0
     abe:	30 e0       	ldi	r19, 0x00	; 0
     ac0:	44 e3       	ldi	r20, 0x34	; 52
     ac2:	53 e4       	ldi	r21, 0x43	; 67
     ac4:	0e 94 9b 08 	call	0x1136	; 0x1136 <__mulsf3>
     ac8:	2b ed       	ldi	r18, 0xDB	; 219
     aca:	3f e0       	ldi	r19, 0x0F	; 15
     acc:	49 e4       	ldi	

⌨️ 快捷键说明

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