📄 motor_control.lst
字号:
1 .file "motor_control.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:
80 .global n_second
82 n_second:
1:motor_control.c **** #include "motor_control.h"
2:motor_control.c ****
3:motor_control.c **** volatile unsigned char sys_time = 0;
4:motor_control.c ****
5:motor_control.c **** #define hand_open() motor(0x3a,500,800)
6:motor_control.c **** #define hand_close() motor(0x3a,500,1600)
7:motor_control.c ****
8:motor_control.c **** #define Y_DASH_MAX 7000
9:motor_control.c ****
10:motor_control.c **** #define abs(x) ((x) >= 0 ? (x) : -(x))
11:motor_control.c ****
12:motor_control.c **** void n_second(unsigned char n);
13:motor_control.c **** void get_cheese(void);
14:motor_control.c ****
15:motor_control.c **** int main(void)
16:motor_control.c **** {
17:motor_control.c **** DDRB |= 0xE0;
18:motor_control.c **** uartInit();
19:motor_control.c **** sensorInit();
20:motor_control.c **** timeInit();
21:motor_control.c **** sei();
22:motor_control.c ****
23:motor_control.c **** unsigned char dash_start_time;
24:motor_control.c ****
25:motor_control.c **** get_position();
26:motor_control.c ****
27:motor_control.c **** get_cheese();
28:motor_control.c ****
29:motor_control.c **** rotate(90, 0);
30:motor_control.c ****
31:motor_control.c **** dash_start_time = getTime();
32:motor_control.c ****
33:motor_control.c **** motor(0x1a, 150, 150);
34:motor_control.c ****
35:motor_control.c **** get_position();
36:motor_control.c **** while((getTime() - dash_start_time) < 6 && (y_loca < Y_DASH_MAX))
37:motor_control.c **** get_position();
38:motor_control.c ****
39:motor_control.c **** motor(0x1a, 0, 0);
40:motor_control.c ****
41:motor_control.c **** rotate(180, 0);
42:motor_control.c ****
43:motor_control.c **** motor(0x1a, -100, -100);
44:motor_control.c ****
45:motor_control.c **** while(!(Left_backward_straight == 0 || Right_backward_straight == 0))get_sensor();
46:motor_control.c ****
47:motor_control.c **** // Get to the bar
48:motor_control.c **** if(Left_backward_straight == 0 && Right_forward_straight != 0)
49:motor_control.c **** {
50:motor_control.c **** motor(0x1a, 0, -40);
51:motor_control.c **** while(Right_backward_straight != 0)
52:motor_control.c **** get_sensor();
53:motor_control.c **** motor(0x1a, 0, 0);
54:motor_control.c **** }
55:motor_control.c **** else if(Right_backward_straight == 0 && Left_backward_straight != 0)
56:motor_control.c **** {
57:motor_control.c **** motor(0x1a, -40, 0);
58:motor_control.c **** while(Left_backward_straight != 0)
59:motor_control.c **** get_sensor();
60:motor_control.c **** motor(0x1a, 0, 0);
61:motor_control.c **** }
62:motor_control.c **** else
63:motor_control.c **** motor(0x1a, 0, 0);
64:motor_control.c **** // The mission ends.
65:motor_control.c **** _delay_ms(500);
66:motor_control.c ****
67:motor_control.c ****
68:motor_control.c **** motor(0x1a, 100, 100);
69:motor_control.c ****
70:motor_control.c **** get_position();
71:motor_control.c **** while(x_loca > 2700)
72:motor_control.c **** get_position();
73:motor_control.c ****
74:motor_control.c **** motor(0x1a, 0, 0);
75:motor_control.c ****
76:motor_control.c **** rotate(270, 0);
77:motor_control.c ****
78:motor_control.c **** motor(0x1a, -100, -100);
79:motor_control.c ****
80:motor_control.c **** get_sensor();
81:motor_control.c ****
82:motor_control.c **** while(!(Left_backward_straight == 0 && Right_backward_straight == 0))
83:motor_control.c **** get_sensor();
84:motor_control.c ****
85:motor_control.c **** // Get to the bar
86:motor_control.c **** if(Left_backward_straight == 0 && Right_forward_straight != 0)
87:motor_control.c **** {
88:motor_control.c **** motor(0x1a, 0, -40);
89:motor_control.c **** while(Right_backward_straight != 0)
90:motor_control.c **** get_sensor();
91:motor_control.c **** motor(0x1a, 0, 0);
92:motor_control.c **** }
93:motor_control.c **** else if(Right_backward_straight == 0 && Left_backward_straight != 0)
94:motor_control.c **** {
95:motor_control.c **** motor(0x1a, -40, 0);
96:motor_control.c **** while(Left_backward_straight != 0)
97:motor_control.c **** get_sensor();
98:motor_control.c **** motor(0x1a, 0, 0);
99:motor_control.c **** }
100:motor_control.c **** else
101:motor_control.c **** motor(0x1a, 0, 0);
102:motor_control.c ****
103:motor_control.c **** motor(0x1a, 0, 0);
104:motor_control.c ****
105:motor_control.c **** ledDispInit();
106:motor_control.c **** while(1)
107:motor_control.c **** {
108:motor_control.c **** ;
109:motor_control.c **** }
110:motor_control.c **** }
111:motor_control.c ****
112:motor_control.c **** void n_second(unsigned char n)
113:motor_control.c **** {
83 in r28,__SP_L__
84 in r29,__SP_H__
85 /* prologue: function */
86 0000 DF93 /* frame size = 1 */
87 0002 CF93 mov r20,r24
89 0006 CDB7 .LM1:
90 0008 DEB7 std Y+1,__zero_reg__
91 .LBB49:
92 .LBB50:
93 000a 482F .LBB51:
114:motor_control.c **** volatile unsigned char i = 0;
94 tabs "c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h",132,0,0,.Ltext1
95 .Ltext1:
97 .LM2:
98 ldi r18,lo8(400)
99 ldi r19,hi8(400)
100 rjmp .L2
101 .L4:
102 .LBE52:
1:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** Copyright (c) 2007 Joerg Wunsch
3:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** All rights reserved.
4:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
5:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** Redistribution and use in source and binary forms, with or without
6:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** modification, are permitted provided that the following conditions are met:
7:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
8:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** * Redistributions of source code must retain the above copyright
9:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer.
10:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
11:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** * Redistributions in binary form must reproduce the above copyright
12:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer in
13:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** the documentation and/or other materials provided with the
14:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** distribution.
15:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
16:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** * Neither the name of the copyright holders nor the names of
17:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** contributors may be used to endorse or promote products derived
18:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** from this software without specific prior written permission.
19:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
20:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** POSSIBILITY OF SUCH DAMAGE. */
31:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
32:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** /* $Id: delay_basic.h,v 1.1 2007/05/13 21:23:20 joerg_wunsch Exp $ */
33:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
34:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_
35:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1
36:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
37:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** #include <inttypes.h>
38:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
39:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** /** \file */
40:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic <util/delay_basic.h>: Basic busy-wait delay loops
41:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** \code
42:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** #include <util/delay_basic.h>
43:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** \endcode
44:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
45:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** The functions in this header file implement simple delay loops
46:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** that perform a busy-waiting. They are typically used to
47:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** facilitate short delays in the program execution. They are
48:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** implemented as count-down loops with a well-known CPU cycle
49:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** count per loop iteration. As such, no other processing can
50:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** occur simultaneously. It should be kept in mind that the
51:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** functions described here do not disable interrupts.
52:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
53:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** In general, for long delays, the use of hardware timers is
54:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** much preferrable, as they free the CPU, and allow for
55:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** concurrent processing of other events while the timer is
56:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** running. However, in particular for very short delays, the
57:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** overhead of setting up a hardware timer is too much compared
58:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** to the overall delay time.
59:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
60:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** Two inline functions are provided for the actual delay algorithms.
61:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
62:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** */
63:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
64:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__)
65:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
66:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
67:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** #endif
68:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
69:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
70:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
71:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** Delay loop using an 8-bit counter \c __count, so up to 256
72:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** iterations are possible. (The value 256 would have to be passed
73:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** as 0.) The loop executes three CPU cycles per iteration, not
74:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** including the overhead the compiler needs to setup the counter
75:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** register.
76:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
77:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
78:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** can be achieved.
79:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** */
80:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** void
81:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count)
82:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** {
83:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** __asm__ volatile (
84:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** "1: dec %0" "\n\t"
85:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** "brne 1b"
86:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** : "=r" (__count)
87:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** : "0" (__count)
88:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** );
89:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** }
90:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
91:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
92:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
93:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** Delay loop using a 16-bit counter \c __count, so up to 65536
94:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** iterations are possible. (The value 65536 would have to be
95:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** passed as 0.) The loop executes four CPU cycles per iteration,
96:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** not including the overhead the compiler requires to setup the
97:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** counter register pair.
98:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h ****
99:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
100:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** milliseconds can be achieved.
101:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** */
102:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** void
103:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** _delay_loop_2(uint16_t __count)
104:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** {
105:c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h **** __asm__ volatile (
103 LBE50:
104 .LBE49:
106 0010 31E0 .Ltext2:
108 .LM3:
109 ldi r24,lo8(10000)
110 ldi r25,hi8(10000)
111 .L3:
112 .LBB56:
113 .LBB55:
114 .LBB54:
115:motor_control.c **** for(; i < n; i++)
115 abs "c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h",132,0,0,.Ltext3
116 .Ltext3:
118 0016 97E2 .LM4:
119 movw r30,r18
120 /* #APP */
121 ; 105 "c:/winavr-20080512/lib/gcc/../../avr/include/util/delay_basic.h" 1
122 1: sbiw r30,1
123 brne 1b
124 ; 0 "" 2
125 /* #NOAPP */
126 .LBE53:
127 .LBE54:
129 .Ltext4:
131 001a 3197 .LM5:
132 001c 01F4 sbiw r24,1
134 .LM6:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -