📄 motor_control.lss
字号:
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 + -