📄 main.lst
字号:
1 .file "main.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
79 .global DelayMs
81 DelayMs:
83 .Ltext1:
1:mydelay.h **** /*-----------------------------------------------------------------------
2:mydelay.h **** 延时函数
3:mydelay.h **** 系统时钟:8M
4:mydelay.h **** -----------------------------------------------------------------------*/
5:mydelay.h **** /*key words
6:mydelay.h ****
7:mydelay.h **** void DelayMs(unsigned int );
8:mydelay.h **** void Delay(Unsigned int );
9:mydelay.h ****
10:mydelay.h **** */
11:mydelay.h ****
12:mydelay.h **** #ifndef _mydelay_H_
13:mydelay.h **** #define _mydelay_H_
14:mydelay.h ****
15:mydelay.h **** #include <avr/delay.h>
16:mydelay.h ****
17:mydelay.h **** #define FEQ 8 //系统时钟8MHz
18:mydelay.h ****
19:mydelay.h ****
20:mydelay.h **** void DelayMs(unsigned int t)
21:mydelay.h **** {
84 ze=0) */
85 movw r20,r24
86 ldi r18,lo8(0)
87 ldi r19,hi8(0)
88 0000 AC01 ldi r30,lo8(2000)
89 0002 20E0 ldi r31,hi8(2000)
90 0004 30E0 rjmp .L2
91 0006 E0ED .L3:
92 0008 F7E0 .LBB20:
93 000a 00C0 .LBB21:
95 .Ltext2:
97 .LM1:
98 movw r24,r30
1:c:/winavr/bin/../avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:c:/winavr/bin/../avr/include/util/delay.h **** Copyright (c) 2004,2005 Joerg Wunsch
3:c:/winavr/bin/../avr/include/util/delay.h **** All rights reserved.
4:c:/winavr/bin/../avr/include/util/delay.h ****
5:c:/winavr/bin/../avr/include/util/delay.h **** Redistribution and use in source and binary forms, with or without
6:c:/winavr/bin/../avr/include/util/delay.h **** modification, are permitted provided that the following conditions are met:
7:c:/winavr/bin/../avr/include/util/delay.h ****
8:c:/winavr/bin/../avr/include/util/delay.h **** * Redistributions of source code must retain the above copyright
9:c:/winavr/bin/../avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer.
10:c:/winavr/bin/../avr/include/util/delay.h ****
11:c:/winavr/bin/../avr/include/util/delay.h **** * Redistributions in binary form must reproduce the above copyright
12:c:/winavr/bin/../avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer in
13:c:/winavr/bin/../avr/include/util/delay.h **** the documentation and/or other materials provided with the
14:c:/winavr/bin/../avr/include/util/delay.h **** distribution.
15:c:/winavr/bin/../avr/include/util/delay.h ****
16:c:/winavr/bin/../avr/include/util/delay.h **** * Neither the name of the copyright holders nor the names of
17:c:/winavr/bin/../avr/include/util/delay.h **** contributors may be used to endorse or promote products derived
18:c:/winavr/bin/../avr/include/util/delay.h **** from this software without specific prior written permission.
19:c:/winavr/bin/../avr/include/util/delay.h ****
20:c:/winavr/bin/../avr/include/util/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:c:/winavr/bin/../avr/include/util/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:c:/winavr/bin/../avr/include/util/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:c:/winavr/bin/../avr/include/util/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:c:/winavr/bin/../avr/include/util/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:c:/winavr/bin/../avr/include/util/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:c:/winavr/bin/../avr/include/util/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:c:/winavr/bin/../avr/include/util/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:c:/winavr/bin/../avr/include/util/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:c:/winavr/bin/../avr/include/util/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:c:/winavr/bin/../avr/include/util/delay.h **** POSSIBILITY OF SUCH DAMAGE. */
31:c:/winavr/bin/../avr/include/util/delay.h ****
32:c:/winavr/bin/../avr/include/util/delay.h **** /* $Id: delay.h,v 1.1.2.1 2005/12/12 23:19:49 joerg_wunsch Exp $ */
33:c:/winavr/bin/../avr/include/util/delay.h ****
34:c:/winavr/bin/../avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_
35:c:/winavr/bin/../avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1
36:c:/winavr/bin/../avr/include/util/delay.h ****
37:c:/winavr/bin/../avr/include/util/delay.h **** #include <inttypes.h>
38:c:/winavr/bin/../avr/include/util/delay.h ****
39:c:/winavr/bin/../avr/include/util/delay.h **** /** \defgroup util_delay <util/delay.h>: Busy-wait delay loops
40:c:/winavr/bin/../avr/include/util/delay.h **** \code
41:c:/winavr/bin/../avr/include/util/delay.h **** #define F_CPU 1000000UL // 1 MHz
42:c:/winavr/bin/../avr/include/util/delay.h **** //#define F_CPU 14.7456E6
43:c:/winavr/bin/../avr/include/util/delay.h **** #include <util/delay.h>
44:c:/winavr/bin/../avr/include/util/delay.h **** \endcode
45:c:/winavr/bin/../avr/include/util/delay.h ****
46:c:/winavr/bin/../avr/include/util/delay.h **** \note As an alternative method, it is possible to pass the
47:c:/winavr/bin/../avr/include/util/delay.h **** F_CPU macro down to the compiler from the Makefile.
48:c:/winavr/bin/../avr/include/util/delay.h **** Obviously, in that case, no \c \#define statement should be
49:c:/winavr/bin/../avr/include/util/delay.h **** used.
50:c:/winavr/bin/../avr/include/util/delay.h ****
51:c:/winavr/bin/../avr/include/util/delay.h **** The functions in this header file implement simple delay loops
52:c:/winavr/bin/../avr/include/util/delay.h **** that perform a busy-waiting. They are typically used to
53:c:/winavr/bin/../avr/include/util/delay.h **** facilitate short delays in the program execution. They are
54:c:/winavr/bin/../avr/include/util/delay.h **** implemented as count-down loops with a well-known CPU cycle
55:c:/winavr/bin/../avr/include/util/delay.h **** count per loop iteration. As such, no other processing can
56:c:/winavr/bin/../avr/include/util/delay.h **** occur simultaneously. It should be kept in mind that the
57:c:/winavr/bin/../avr/include/util/delay.h **** functions described here do not disable interrupts.
58:c:/winavr/bin/../avr/include/util/delay.h ****
59:c:/winavr/bin/../avr/include/util/delay.h **** In general, for long delays, the use of hardware timers is
60:c:/winavr/bin/../avr/include/util/delay.h **** much preferrable, as they free the CPU, and allow for
61:c:/winavr/bin/../avr/include/util/delay.h **** concurrent processing of other events while the timer is
62:c:/winavr/bin/../avr/include/util/delay.h **** running. However, in particular for very short delays, the
63:c:/winavr/bin/../avr/include/util/delay.h **** overhead of setting up a hardware timer is too much compared
64:c:/winavr/bin/../avr/include/util/delay.h **** to the overall delay time.
65:c:/winavr/bin/../avr/include/util/delay.h ****
66:c:/winavr/bin/../avr/include/util/delay.h **** Two inline functions are provided for the actual delay algorithms.
67:c:/winavr/bin/../avr/include/util/delay.h ****
68:c:/winavr/bin/../avr/include/util/delay.h **** Two wrapper functions allow the specification of microsecond, and
69:c:/winavr/bin/../avr/include/util/delay.h **** millisecond delays directly, using the application-supplied macro
70:c:/winavr/bin/../avr/include/util/delay.h **** F_CPU as the CPU clock frequency (in Hertz). These functions
71:c:/winavr/bin/../avr/include/util/delay.h **** operate on double typed arguments, however when optimization is
72:c:/winavr/bin/../avr/include/util/delay.h **** turned on, the entire floating-point calculation will be done at
73:c:/winavr/bin/../avr/include/util/delay.h **** compile-time.
74:c:/winavr/bin/../avr/include/util/delay.h ****
75:c:/winavr/bin/../avr/include/util/delay.h **** \note When using _delay_us() and _delay_ms(), the expressions
76:c:/winavr/bin/../avr/include/util/delay.h **** passed as arguments to these functions shall be compile-time
77:c:/winavr/bin/../avr/include/util/delay.h **** constants, otherwise the floating-point calculations to setup the
78:c:/winavr/bin/../avr/include/util/delay.h **** loops will be done at run-time, thereby drastically increasing
79:c:/winavr/bin/../avr/include/util/delay.h **** both the resulting code size, as well as the time required to
80:c:/winavr/bin/../avr/include/util/delay.h **** setup the loops.
81:c:/winavr/bin/../avr/include/util/delay.h **** */
82:c:/winavr/bin/../avr/include/util/delay.h ****
83:c:/winavr/bin/../avr/include/util/delay.h **** #if !defined(__DOXYGEN__)
84:c:/winavr/bin/../avr/include/util/delay.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
85:c:/winavr/bin/../avr/include/util/delay.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
86:c:/winavr/bin/../avr/include/util/delay.h **** static inline void _delay_us(double __us) __attribute__((always_inline));
87:c:/winavr/bin/../avr/include/util/delay.h **** static inline void _delay_ms(double __ms) __attribute__((always_inline));
88:c:/winavr/bin/../avr/include/util/delay.h **** #endif
89:c:/winavr/bin/../avr/include/util/delay.h ****
90:c:/winavr/bin/../avr/include/util/delay.h **** /** \ingroup util_delay
91:c:/winavr/bin/../avr/include/util/delay.h ****
92:c:/winavr/bin/../avr/include/util/delay.h **** Delay loop using an 8-bit counter \c __count, so up to 256
93:c:/winavr/bin/../avr/include/util/delay.h **** iterations are possible. (The value 256 would have to be passed
94:c:/winavr/bin/../avr/include/util/delay.h **** as 0.) The loop executes three CPU cycles per iteration, not
95:c:/winavr/bin/../avr/include/util/delay.h **** including the overhead the compiler needs to setup the counter
96:c:/winavr/bin/../avr/include/util/delay.h **** register.
97:c:/winavr/bin/../avr/include/util/delay.h ****
98:c:/winavr/bin/../avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
99:c:/winavr/bin/../avr/include/util/delay.h **** can be achieved.
100:c:/winavr/bin/../avr/include/util/delay.h **** */
101:c:/winavr/bin/../avr/include/util/delay.h **** void
102:c:/winavr/bin/../avr/include/util/delay.h **** _delay_loop_1(uint8_t __count)
103:c:/winavr/bin/../avr/include/util/delay.h **** {
104:c:/winavr/bin/../avr/include/util/delay.h **** __asm__ volatile (
105:c:/winavr/bin/../avr/include/util/delay.h **** "1: dec %0" "\n\t"
106:c:/winavr/bin/../avr/include/util/delay.h **** "brne 1b"
107:c:/winavr/bin/../avr/include/util/delay.h **** : "=r" (__count)
108:c:/winavr/bin/../avr/include/util/delay.h **** : "0" (__count)
109:c:/winavr/bin/../avr/include/util/delay.h **** );
110:c:/winavr/bin/../avr/include/util/delay.h **** }
111:c:/winavr/bin/../avr/include/util/delay.h ****
112:c:/winavr/bin/../avr/include/util/delay.h **** /** \ingroup util_delay
113:c:/winavr/bin/../avr/include/util/delay.h ****
114:c:/winavr/bin/../avr/include/util/delay.h **** Delay loop using a 16-bit counter \c __count, so up to 65536
115:c:/winavr/bin/../avr/include/util/delay.h **** iterations are possible. (The value 65536 would have to be
116:c:/winavr/bin/../avr/include/util/delay.h **** passed as 0.) The loop executes four CPU cycles per iteration,
117:c:/winavr/bin/../avr/include/util/delay.h **** not including the overhead the compiler requires to setup the
118:c:/winavr/bin/../avr/include/util/delay.h **** counter register pair.
119:c:/winavr/bin/../avr/include/util/delay.h ****
120:c:/winavr/bin/../avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
121:c:/winavr/bin/../avr/include/util/delay.h **** milliseconds can be achieved.
122:c:/winavr/bin/../avr/include/util/delay.h **** */
123:c:/winavr/bin/../avr/include/util/delay.h **** void
124:c:/winavr/bin/../avr/include/util/delay.h **** _delay_loop_2(uint16_t __count)
125:c:/winavr/bin/../avr/include/util/delay.h **** {
126:c:/winavr/bin/../avr/include/util/delay.h **** __asm__ volatile (
99 sbiw r24,1
100 brne 1b
101 000c CF01 /* #NOAPP */
102 .LBE21:
103 000e 0197 .LBE20:
105 .Ltext3:
107 .LM2:
108 subi r18,lo8(-(1))
109 sbci r19,hi8(-(1))
22:mydelay.h **** unsigned int i;
23:mydelay.h **** for(i=0;i<t;i++)
110 8,r20
111 cpc r19,r21
112 0012 2F5F brne .L3
113 0014 3F4F /* epilogue: frame size=0 */
114 ret
115 0016 2417 /* epilogue end (size=1) */
116 0018 3507 /* function DelayMs size 17 (16) */
124 .Lscope0:
126 .global delay_1us
128 delay_1us:
130 .LM3:
131 /* prologue: frame size=0 */
132 /* prologue end (size=0) */
24:mydelay.h **** _delay_loop_2(FEQ * 250 );
25:mydelay.h **** }
26:mydelay.h ****
27:mydelay.h ****
28:mydelay.h ****
29:mydelay.h **** /*-----------------------------------------------------------------------
30:mydelay.h **** 软延时延时函数
31:mydelay.h **** 系统时钟:8M
32:mydelay.h **** -----------------------------------------------------------------------*/
33:mydelay.h **** void delay_1us(void) //1us延时函数
34:mydelay.h **** {
134 #NOAPP */
135 /* epilogue: frame size=0 */
136 ret
137 /* epilogue end (size=1) */
35:mydelay.h **** asm("nop");
138 unction delay_1us size 3 (2) */
140 .Lscope1:
143 .global delay_nus
145 delay_nus:
147 .LM5:
148 /* prologue: frame size=0 */
149 /* prologue end (size=0) */
150 ldi r18,lo8(0)
151 ldi r19,hi8(0)
152 rjmp .L9
153 .L10:
36:mydelay.h **** // _delay_loop_2(250);//4
37:mydelay.h ****
38:mydelay.h **** }
39:mydelay.h ****
40:mydelay.h **** void delay_nus(unsigned int n) //N us延时函数
41:mydelay.h **** {
155 .LM6:
156 /* #APP */
157 nop
158 0022 20E0 /* #NOAPP */
159 0024 30E0 .LBE23:
160 0026 00C0 .LBE22:
162 .LM7:
163 subi r18,lo8(-(1))
164 sbci r19,hi8(-(1))
165 .L9:
166 cp r18,r24
167 0028 0000 cpc r19,r25
168 brne .L10
169 /* epilogue: frame size=0 */
170 ret
42:mydelay.h **** unsigned int i=0;
43:mydelay.h **** for (i=0;i<n;i++)
171 size=1) */
172 /* function delay_nus size 11 (10) */
177 0030 3907 .Lscope2:
179 .global delay_1ms
181 delay_1ms:
183 .LM8:
184 /* prologue: frame size=0 */
185 /* prologue end (size=0) */
186 /* epilogue: frame size=0 */
187 ret
188 /* epilogue end (size=1) */
189 /* function delay_1ms size 1 (0) */
191 .Lscope3:
44:mydelay.h **** delay_1us();
45:mydelay.h **** }
46:mydelay.h ****
47:mydelay.h **** void delay_1ms(void) //1ms延时函数
48:mydelay.h **** {
192 0,15)",36,0,0,delay_nms
194 .global delay_nms
196 delay_nms:
198 .LM9:
199 /* prologue: frame size=0 */
200 /* prologue end (size=0) */
201 /* epilogue: frame size=0 */
202 ret
203 /* epilogue end (size=1) */
204 /* function delay_nms size 1 (0) */
206 .Lscope4:
49:mydelay.h **** unsigned int i;
50:mydelay.h **** for (i=0;i<1140;i++);
51:mydelay.h **** }
52:mydelay.h ****
53:mydelay.h **** void delay_nms(unsigned int n) //N ms延时函数
54:mydelay.h **** {
207 s:F(0,15)",36,0,0,delay_s
209 .global delay_s
211 delay_s:
213 .LM10:
214 /* prologue: frame size=0 */
215 push r16
216 push r17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -