📄 position.lst
字号:
1 .file "position.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __CCP__ = 0x34
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
82 .global get_rel_angle
84 get_rel_angle:
1:position.c **** #include "position.h"
2:position.c ****
3:position.c **** #define Pi 3.1415926536
4:position.c ****
5:position.c **** #define abs(x) ( (x) < 0 ? -(x) : (x) )
6:position.c ****
7:position.c **** volatile int angle_loca, x_loca , y_loca ;
8:position.c ****
9:position.c **** volatile unsigned char uart_rec[6];
10:position.c ****
11:position.c **** volatile unsigned char count;
12:position.c ****
13:position.c **** void get_position()
14:position.c **** {
15:position.c **** unsigned char temp;
16:position.c ****
17:position.c **** count = 0;
18:position.c **** while(1)
19:position.c **** {
20:position.c **** temp = uartGetc();
21:position.c **** if(temp & 0x80)break;
22:position.c **** else continue;
23:position.c **** }
24:position.c **** uart_rec[count] = (temp & 0x7F);
25:position.c **** count ++;
26:position.c ****
27:position.c **** while(count < 6)
28:position.c **** {
29:position.c **** temp = uartGetc();
30:position.c **** uart_rec[count] = (temp & 0x7F);
31:position.c **** count++;
32:position.c **** }
33:position.c ****
34:position.c **** angle_loca = (uart_rec[0] + (uart_rec[1] << 7)) >> 1;
35:position.c **** x_loca = uart_rec[2] + (uart_rec[3] << 7);
36:position.c **** y_loca = uart_rec[4] + (uart_rec[5] << 7);
37:position.c **** return;
38:position.c **** }
39:position.c ****
40:position.c **** int get_rel_angle(int angle_des)
41:position.c **** {
85 */
87 .LM1:
88 lds r18,angle_loca
89 lds r19,(angle_loca)+1
42:position.c **** int rel_angle = angle_des - angle_loca;
90 r24,r18
91 sbc r25,r19
92 0000 2091 0000 movw r18,r24
94 0008 821B .LM2:
95 000a 930B subi r24,lo8(-(180))
96 000c 9C01 sbci r25,hi8(-(180))
43:position.c **** if(rel_angle >= -180 && rel_angle <= 180)
97 24,lo8(361)
98 sbci r25,hi8(361)
99 000e 8C54 brlo .L2
101 0012 8956 .LM3:
102 0014 9140 cpi r18,181
103 0016 00F0 cpc r19,__zero_reg__
44:position.c **** return rel_angle;
45:position.c **** else if(rel_angle > 180)
104 L3
106 0018 253B .LM4:
107 001a 3105 subi r18,lo8(-(-360))
108 001c 04F0 sbci r19,hi8(-(-360))
46:position.c **** return (rel_angle - 360);
109 .L2
110 .L3:
112 0020 3140 .LM5:
113 0022 00C0 ldi r24,hi8(-180)
114 cpi r18,lo8(-180)
47:position.c **** else if(rel_angle < -180)
115 19,r24
116 brlt .L4
117 0024 8FEF ldi r18,lo8(0)
118 0026 2C34 ldi r19,hi8(0)
119 0028 3807 rjmp .L2
120 002a 04F0 .L4:
122 002e 30E0 .LM6:
123 0030 00C0 subi r18,lo8(-(360))
124 sbci r19,hi8(-(360))
48:position.c **** return (rel_angle + 360);
125 bn 68,0,51,.LM7-.LFBB1
126 .LM7:
127 0032 2859 movw r24,r18
128 0034 3E4F /* epilogue start */
129 ret
49:position.c **** else
50:position.c **** return 0;
51:position.c **** }
130 e get_rel_angle, .-get_rel_angle
134 0038 0895 .Lscope1:
137 .global get_rotate_speed
139 get_rotate_speed:
141 .LM8:
142 .LFBB2:
143 /* prologue: function */
144 /* frame size = 0 */
52:position.c ****
53:position.c **** short get_rotate_speed(int angle)
54:position.c **** {
145 ,.LM9-.LFBB2
146 .LM9:
147 cpi r24,121
148 cpc r25,__zero_reg__
149 brlt .L7
55:position.c **** if(angle > 120)
150 r18,lo8(50)
151 ldi r19,hi8(50)
152 003a 8937 rjmp .L8
153 003c 9105 .L7:
155 0040 22E3 .LM10:
156 0042 30E0 cpi r24,91
157 0044 00C0 cpc r25,__zero_reg__
158 brlt .L9
56:position.c **** return 50;
57:position.c **** else if(angle > 90)
159 lo8(40)
160 ldi r19,hi8(40)
161 0046 8B35 rjmp .L8
162 0048 9105 .L9:
164 004c 28E2 .LM11:
165 004e 30E0 cpi r24,46
166 0050 00C0 cpc r25,__zero_reg__
167 brlt .L10
58:position.c **** return 40;
59:position.c **** else if(angle > 45)
168 lo8(30)
169 ldi r19,hi8(30)
170 0052 8E32 rjmp .L8
171 0054 9105 .L10:
173 0058 2EE1 .LM12:
174 005a 30E0 sbiw r24,16
175 005c 00C0 brge .L11
176 ldi r18,lo8(10)
60:position.c **** return 30;
61:position.c **** else if(angle > 15)
177 hi8(10)
178 rjmp .L8
179 005e 4097 .L11:
180 0060 04F4 ldi r18,lo8(20)
181 0062 2AE0 ldi r19,hi8(20)
182 0064 30E0 .L8:
184 .LM13:
185 0068 24E1 movw r24,r18
186 006a 30E0 /* epilogue start */
187 ret
62:position.c **** return 20;
63:position.c **** else
64:position.c **** return 10;
65:position.c **** }
188 rotate_speed, .-get_rotate_speed
189 .Lscope2:
193 .global get_angle_des
195 get_angle_des:
197 .LM14:
198 .LFBB3:
199 push r12
200 push r13
66:position.c ****
67:position.c **** void rotate(int angle_des, short move_speed)
68:position.c **** {
69:position.c **** int rel_angle;
70:position.c **** short rotate_speed;
71:position.c ****
72:position.c **** motor(0x1a, move_speed, move_speed);
73:position.c **** _delay_ms(10);
74:position.c ****
75:position.c **** get_position();
76:position.c **** rel_angle = get_rel_angle(angle_des);
77:position.c ****
78:position.c **** while(abs(rel_angle) > 1)
79:position.c **** {
80:position.c **** get_position();
81:position.c **** rel_angle = get_rel_angle(angle_des);
82:position.c **** rotate_speed = get_rotate_speed(abs(rel_angle));
83:position.c **** if(rel_angle > 0)
84:position.c **** motor(0x1a, rotate_speed+move_speed, -1*rotate_speed+move_speed);
85:position.c **** else
86:position.c **** motor(0x1a, -1*rotate_speed+move_speed, rotate_speed+move_speed);
87:position.c **** }
88:position.c ****
89:position.c **** motor(0x1a,move_speed,move_speed);
90:position.c **** return;
91:position.c **** }
92:position.c ****
93:position.c **** int get_angle_des(int x_des, int y_des)
94:position.c **** {
201 sh r15
202 push r16
203 push r17
204 0070 CF92 push r28
205 0072 DF92 push r29
206 0074 EF92 /* prologue: function */
207 0076 FF92 /* frame size = 0 */
208 0078 0F93 movw r28,r24
209 007a 1F93 movw r18,r22
211 007e DF93 .LM15:
212 lds r24,x_loca
213 lds r25,(x_loca)+1
214 0080 EC01 cp r28,r24
215 0082 9B01 cpc r29,r25
95:position.c **** int angle_des;
96:position.c **** if(x_des == x_loca)
216 abn 68,0,98,.LM16-.LFBB3
217 .LM16:
218 0084 8091 0000 lds r24,y_loca
219 0088 9091 0000 lds r25,(y_loca)+1
220 008c C817 cp r24,r22
221 008e D907 cpc r25,r23
222 0090 01F4 brlt .L15
97:position.c **** {
98:position.c **** if(y_des > y_loca)
223 2,lo8(-90)
224 ldi r23,hi8(-90)
225 0092 8091 0000 rjmp .L16
226 0096 9091 0000 .L15:
227 009a 8617 ldi r22,lo8(90)
228 009c 9707 ldi r23,hi8(90)
229 009e 04F0 rjmp .L16
230 00a0 66EA .L14:
232 00a4 00C0 .LM17:
233 lds r24,y_loca
234 00a6 6AE5 lds r25,(y_loca)+1
235 00a8 70E0 lds r12,x_loca
236 00aa 00C0 lds r13,(x_loca)+1
237 sub r18,r24
99:position.c **** angle_des = 90;
100:position.c **** else
101:position.c **** angle_des = -90;
102:position.c **** }
103:position.c **** else
104:position.c **** angle_des = (int)((atan(((double)(y_des-y_loca))/((double)(x_des-x_loca))))*180.0/Pi) ;
238 ovw r22,r18
239 clr r24
240 00ac 8091 0000 sbrc r23,7
241 00b0 9091 0000 com r24
242 00b4 C090 0000 mov r25,r24
243 00b8 D090 0000 call __floatsisf
244 00bc 281B movw r14,r22
245 00be 390B movw r16,r24
246 00c0 B901 movw r22,r28
247 00c2 8827 sub r22,r12
248 00c4 77FD sbc r23,r13
249 00c6 8095 clr r24
250 00c8 982F sbrc r23,7
251 00ca 0E94 0000 com r24
252 00ce 7B01 mov r25,r24
253 00d0 8C01 call __floatsisf
254 00d2 BE01 movw r18,r22
255 00d4 6C19 movw r20,r24
256 00d6 7D09 movw r24,r16
257 00d8 8827 movw r22,r14
258 00da 77FD call __divsf3
259 00dc 8095 call atan
260 00de 982F ldi r18,lo8(0x43340000)
261 00e0 0E94 0000 ldi r19,hi8(0x43340000)
262 00e4 9B01 ldi r20,hlo8(0x43340000)
263 00e6 AC01 ldi r21,hhi8(0x43340000)
264 00e8 C801 call __mulsf3
265 00ea B701 ldi r18,lo8(0x40490fdb)
266 00ec 0E94 0000 ldi r19,hi8(0x40490fdb)
267 00f0 0E94 0000 ldi r20,hlo8(0x40490fdb)
268 00f4 20E0 ldi r21,hhi8(0x40490fdb)
269 00f6 30E0 call __divsf3
270 00f8 44E3 call __fixsfsi
271 00fa 53E4 .L16:
273 0100 2BED .LM18:
274 0102 3FE0 lds r24,x_loca
275 0104 49E4 lds r25,(x_loca)+1
276 0106 50E4 cp r28,r24
277 0108 0E94 0000 cpc r29,r25
278 010c 0E94 0000 brge .L17
105:position.c ****
106:position.c **** if(x_des < x_loca)
280 (-(180))
281 rjmp .L18
282 0110 8091 0000 .L17:
284 0118 C817 .LM20:
285 011a D907 movw r24,r22
286 011c 04F4 subi r24,lo8(-(360))
107:position.c **** angle_des += 180;
287 25,hi8(-(360))
288 ldi r22,lo8(360)
289 011e 6C54 ldi r23,hi8(360)
290 0120 7F4F call __divmodhi4
291 0122 00C0 movw r22,r24
292 .L18:
108:position.c **** else
109:position.c **** angle_des = (angle_des+360)%360;
293 n 68,0,112,.LM21-.LFBB3
294 .LM21:
295 0124 CB01 movw r24,r22
296 0126 8859 /* epilogue start */
297 0128 9E4F pop r29
298 012a 68E6 pop r28
299 012c 71E0 pop r17
300 012e 0E94 0000 pop r16
301 0132 BC01 pop r15
302 pop r14
110:position.c ****
111:position.c **** return angle_des;
112:position.c **** }
303 pop r12
304 ret
309 013a 1F91 .Lscope3:
311 013e FF90 .global get_position
313 0142 DF90 get_position:
315 0146 0895 .LM22:
316 .LFBB4:
317 /* prologue: function */
318 /* frame size = 0 */
320 .LM23:
321 sts count,__zero_reg__
322 .L21:
324 .LM24:
325 call uartGetc
327 .LM25:
328 sbrs r24,7
329 rjmp .L21
330 rjmp .L26
331 .L23:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -