📄 disp.lst
字号:
266 00dc CDBF out __SP_L__,r28
267 /* prologue end (size=10) */
268 00de 9A83 std Y+2,r25
269 00e0 8983 std Y+1,r24
83:disp.c **** uint8_t i;
84:disp.c **** for(i=0;i<8;i++)
271 .LM21:
272 00e2 1B82 std Y+3,__zero_reg__
273 .L9:
275 .LM22:
276 00e4 8B81 ldd r24,Y+3
277 00e6 8830 cpi r24,lo8(8)
278 00e8 08F0 brlo .+2
279 00ea C8C0 rjmp .L8
85:disp.c **** {
86:disp.c **** DispSel(i);
281 .LM23:
282 00ec 8091 3B00 lds r24,59
283 00f0 282F mov r18,r24
284 00f2 2F71 andi r18,lo8(31)
285 00f4 8B81 ldd r24,Y+3
286 00f6 9927 clr r25
287 00f8 880F lsl r24
288 00fa 991F rol r25
289 00fc 8295 swap r24
290 00fe 9295 swap r25
291 0100 907F andi r25,0xf0
292 0102 9827 eor r25,r24
293 0104 807F andi r24,0xf0
294 0106 9827 eor r25,r24
295 0108 822B or r24,r18
296 010a 8093 3B00 sts 59,r24
87:disp.c **** if(i==4)_delay_ms(1);
298 .LM24:
299 010e 8B81 ldd r24,Y+3
300 0110 8430 cpi r24,lo8(4)
301 0112 09F0 breq .+2
302 0114 4EC0 rjmp .L12
303 .LBB2:
305 .Ltext1:
1:C:/WinAVR/avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:C:/WinAVR/avr/include/util/delay.h **** Copyright (c) 2004,2005 Joerg Wunsch
3:C:/WinAVR/avr/include/util/delay.h **** All rights reserved.
4:C:/WinAVR/avr/include/util/delay.h ****
5:C:/WinAVR/avr/include/util/delay.h **** Redistribution and use in source and binary forms, with or without
6:C:/WinAVR/avr/include/util/delay.h **** modification, are permitted provided that the following conditions are met:
7:C:/WinAVR/avr/include/util/delay.h ****
8:C:/WinAVR/avr/include/util/delay.h **** * Redistributions of source code must retain the above copyright
9:C:/WinAVR/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer.
10:C:/WinAVR/avr/include/util/delay.h ****
11:C:/WinAVR/avr/include/util/delay.h **** * Redistributions in binary form must reproduce the above copyright
12:C:/WinAVR/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer in
13:C:/WinAVR/avr/include/util/delay.h **** the documentation and/or other materials provided with the
14:C:/WinAVR/avr/include/util/delay.h **** distribution.
15:C:/WinAVR/avr/include/util/delay.h ****
16:C:/WinAVR/avr/include/util/delay.h **** * Neither the name of the copyright holders nor the names of
17:C:/WinAVR/avr/include/util/delay.h **** contributors may be used to endorse or promote products derived
18:C:/WinAVR/avr/include/util/delay.h **** from this software without specific prior written permission.
19:C:/WinAVR/avr/include/util/delay.h ****
20:C:/WinAVR/avr/include/util/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:C:/WinAVR/avr/include/util/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:C:/WinAVR/avr/include/util/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:C:/WinAVR/avr/include/util/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:C:/WinAVR/avr/include/util/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:C:/WinAVR/avr/include/util/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:C:/WinAVR/avr/include/util/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:C:/WinAVR/avr/include/util/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:C:/WinAVR/avr/include/util/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:C:/WinAVR/avr/include/util/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:C:/WinAVR/avr/include/util/delay.h **** POSSIBILITY OF SUCH DAMAGE. */
31:C:/WinAVR/avr/include/util/delay.h ****
32:C:/WinAVR/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/avr/include/util/delay.h ****
34:C:/WinAVR/avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_
35:C:/WinAVR/avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1
36:C:/WinAVR/avr/include/util/delay.h ****
37:C:/WinAVR/avr/include/util/delay.h **** #include <inttypes.h>
38:C:/WinAVR/avr/include/util/delay.h ****
39:C:/WinAVR/avr/include/util/delay.h **** /** \defgroup util_delay <util/delay.h>: Busy-wait delay loops
40:C:/WinAVR/avr/include/util/delay.h **** \code
41:C:/WinAVR/avr/include/util/delay.h **** #define F_CPU 1000000UL // 1 MHz
42:C:/WinAVR/avr/include/util/delay.h **** //#define F_CPU 14.7456E6
43:C:/WinAVR/avr/include/util/delay.h **** #include <util/delay.h>
44:C:/WinAVR/avr/include/util/delay.h **** \endcode
45:C:/WinAVR/avr/include/util/delay.h ****
46:C:/WinAVR/avr/include/util/delay.h **** \note As an alternative method, it is possible to pass the
47:C:/WinAVR/avr/include/util/delay.h **** F_CPU macro down to the compiler from the Makefile.
48:C:/WinAVR/avr/include/util/delay.h **** Obviously, in that case, no \c \#define statement should be
49:C:/WinAVR/avr/include/util/delay.h **** used.
50:C:/WinAVR/avr/include/util/delay.h ****
51:C:/WinAVR/avr/include/util/delay.h **** The functions in this header file implement simple delay loops
52:C:/WinAVR/avr/include/util/delay.h **** that perform a busy-waiting. They are typically used to
53:C:/WinAVR/avr/include/util/delay.h **** facilitate short delays in the program execution. They are
54:C:/WinAVR/avr/include/util/delay.h **** implemented as count-down loops with a well-known CPU cycle
55:C:/WinAVR/avr/include/util/delay.h **** count per loop iteration. As such, no other processing can
56:C:/WinAVR/avr/include/util/delay.h **** occur simultaneously. It should be kept in mind that the
57:C:/WinAVR/avr/include/util/delay.h **** functions described here do not disable interrupts.
58:C:/WinAVR/avr/include/util/delay.h ****
59:C:/WinAVR/avr/include/util/delay.h **** In general, for long delays, the use of hardware timers is
60:C:/WinAVR/avr/include/util/delay.h **** much preferrable, as they free the CPU, and allow for
61:C:/WinAVR/avr/include/util/delay.h **** concurrent processing of other events while the timer is
62:C:/WinAVR/avr/include/util/delay.h **** running. However, in particular for very short delays, the
63:C:/WinAVR/avr/include/util/delay.h **** overhead of setting up a hardware timer is too much compared
64:C:/WinAVR/avr/include/util/delay.h **** to the overall delay time.
65:C:/WinAVR/avr/include/util/delay.h ****
66:C:/WinAVR/avr/include/util/delay.h **** Two inline functions are provided for the actual delay algorithms.
67:C:/WinAVR/avr/include/util/delay.h ****
68:C:/WinAVR/avr/include/util/delay.h **** Two wrapper functions allow the specification of microsecond, and
69:C:/WinAVR/avr/include/util/delay.h **** millisecond delays directly, using the application-supplied macro
70:C:/WinAVR/avr/include/util/delay.h **** F_CPU as the CPU clock frequency (in Hertz). These functions
71:C:/WinAVR/avr/include/util/delay.h **** operate on double typed arguments, however when optimization is
72:C:/WinAVR/avr/include/util/delay.h **** turned on, the entire floating-point calculation will be done at
73:C:/WinAVR/avr/include/util/delay.h **** compile-time.
74:C:/WinAVR/avr/include/util/delay.h ****
75:C:/WinAVR/avr/include/util/delay.h **** \note When using _delay_us() and _delay_ms(), the expressions
76:C:/WinAVR/avr/include/util/delay.h **** passed as arguments to these functions shall be compile-time
77:C:/WinAVR/avr/include/util/delay.h **** constants, otherwise the floating-point calculations to setup the
78:C:/WinAVR/avr/include/util/delay.h **** loops will be done at run-time, thereby drastically increasing
79:C:/WinAVR/avr/include/util/delay.h **** both the resulting code size, as well as the time required to
80:C:/WinAVR/avr/include/util/delay.h **** setup the loops.
81:C:/WinAVR/avr/include/util/delay.h **** */
82:C:/WinAVR/avr/include/util/delay.h ****
83:C:/WinAVR/avr/include/util/delay.h **** #if !defined(__DOXYGEN__)
84:C:/WinAVR/avr/include/util/delay.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
85:C:/WinAVR/avr/include/util/delay.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
86:C:/WinAVR/avr/include/util/delay.h **** static inline void _delay_us(double __us) __attribute__((always_inline));
87:C:/WinAVR/avr/include/util/delay.h **** static inline void _delay_ms(double __ms) __attribute__((always_inline));
88:C:/WinAVR/avr/include/util/delay.h **** #endif
89:C:/WinAVR/avr/include/util/delay.h ****
90:C:/WinAVR/avr/include/util/delay.h **** /** \ingroup util_delay
91:C:/WinAVR/avr/include/util/delay.h ****
92:C:/WinAVR/avr/include/util/delay.h **** Delay loop using an 8-bit counter \c __count, so up to 256
93:C:/WinAVR/avr/include/util/delay.h **** iterations are possible. (The value 256 would have to be passed
94:C:/WinAVR/avr/include/util/delay.h **** as 0.) The loop executes three CPU cycles per iteration, not
95:C:/WinAVR/avr/include/util/delay.h **** including the overhead the compiler needs to setup the counter
96:C:/WinAVR/avr/include/util/delay.h **** register.
97:C:/WinAVR/avr/include/util/delay.h ****
98:C:/WinAVR/avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
99:C:/WinAVR/avr/include/util/delay.h **** can be achieved.
100:C:/WinAVR/avr/include/util/delay.h **** */
101:C:/WinAVR/avr/include/util/delay.h **** void
102:C:/WinAVR/avr/include/util/delay.h **** _delay_loop_1(uint8_t __count)
103:C:/WinAVR/avr/include/util/delay.h **** {
104:C:/WinAVR/avr/include/util/delay.h **** __asm__ volatile (
105:C:/WinAVR/avr/include/util/delay.h **** "1: dec %0" "\n\t"
106:C:/WinAVR/avr/include/util/delay.h **** "brne 1b"
107:C:/WinAVR/avr/include/util/delay.h **** : "=r" (__count)
108:C:/WinAVR/avr/include/util/delay.h **** : "0" (__count)
109:C:/WinAVR/avr/include/util/delay.h **** );
110:C:/WinAVR/avr/include/util/delay.h **** }
111:C:/WinAVR/avr/include/util/delay.h ****
112:C:/WinAVR/avr/include/util/delay.h **** /** \ingroup util_delay
113:C:/WinAVR/avr/include/util/delay.h ****
114:C:/WinAVR/avr/include/util/delay.h **** Delay loop using a 16-bit counter \c __count, so up to 65536
115:C:/WinAVR/avr/include/util/delay.h **** iterations are possible. (The value 65536 would have to be
116:C:/WinAVR/avr/include/util/delay.h **** passed as 0.) The loop executes four CPU cycles per iteration,
117:C:/WinAVR/avr/include/util/delay.h **** not including the overhead the compiler requires to setup the
118:C:/WinAVR/avr/include/util/delay.h **** counter register pair.
119:C:/WinAVR/avr/include/util/delay.h ****
120:C:/WinAVR/avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
121:C:/WinAVR/avr/include/util/delay.h **** milliseconds can be achieved.
122:C:/WinAVR/avr/include/util/delay.h **** */
123:C:/WinAVR/avr/include/util/delay.h **** void
124:C:/WinAVR/avr/include/util/delay.h **** _delay_loop_2(uint16_t __count)
125:C:/WinAVR/avr/include/util/delay.h **** {
126:C:/WinAVR/avr/include/util/delay.h **** __asm__ volatile (
127:C:/WinAVR/avr/include/util/delay.h **** "1: sbiw %0,1" "\n\t"
128:C:/WinAVR/avr/include/util/delay.h **** "brne 1b"
129:C:/WinAVR/avr/include/util/delay.h **** : "=w" (__count)
130:C:/WinAVR/avr/include/util/delay.h **** : "0" (__count)
131:C:/WinAVR/avr/include/util/delay.h **** );
132:C:/WinAVR/avr/include/util/delay.h **** }
133:C:/WinAVR/avr/include/util/delay.h ****
134:C:/WinAVR/avr/include/util/delay.h **** #ifndef F_CPU
135:C:/WinAVR/avr/include/util/delay.h **** /* prevent compiler error by supplying a default */
136:C:/WinAVR/avr/include/util/delay.h **** # warning "F_CPU not defined for <util/delay.h>"
137:C:/WinAVR/avr/include/util/delay.h **** # define F_CPU 1000000UL
138:C:/WinAVR/avr/include/util/delay.h **** #endif
139:C:/WinAVR/avr/include/util/delay.h ****
140:C:/WinAVR/avr/include/util/delay.h **** /**
141:C:/WinAVR/avr/include/util/delay.h **** \ingroup util_delay
142:C:/WinAVR/avr/include/util/delay.h ****
143:C:/WinAVR/avr/include/util/delay.h **** Perform a delay of \c __us microseconds, using _delay_loop_1().
144:C:/WinAVR/avr/include/util/delay.h ****
145:C:/WinAVR/avr/include/util/delay.h **** The macro F_CPU is supposed to be defined to a
146:C:/WinAVR/avr/include/util/delay.h **** constant defining the CPU clock frequency (in Hertz).
147:C:/WinAVR/avr/include/util/delay.h ****
148:C:/WinAVR/avr/include/util/delay.h **** The maximal possible delay is 768 us / F_CPU in MHz.
149:C:/WinAVR/avr/include/util/delay.h **** */
150:C:/WinAVR/avr/include/util/delay.h **** void
151:C:/WinAVR/avr/include/util/delay.h **** _delay_us(double __us)
152:C:/WinAVR/avr/include/util/delay.h **** {
153:C:/WinAVR/avr/include/util/delay.h **** uint8_t __ticks;
154:C:/WinAVR/avr/include/util/delay.h **** double __tmp = ((F_CPU) / 3e6) * __us;
155:C:/WinAVR/avr/include/util/delay.h **** if (__tmp < 1.0)
156:C:/WinAVR/avr/include/util/delay.h **** __ticks = 1;
157:C:/WinAVR/avr/include/util/delay.h **** else if (__tmp > 255)
158:C:/WinAVR/avr/include/util/delay.h **** __ticks = 0; /* i.e. 256 */
159:C:/WinAVR/avr/include/util/delay.h **** else
160:C:/WinAVR/avr/include/util/delay.h **** __ticks = (uint8_t)__tmp;
161:C:/WinAVR/avr/include/util/delay.h **** _delay_loop_1(__ticks);
162:C:/WinAVR/avr/include/util/delay.h **** }
163:C:/WinAVR/avr/include/util/delay.h ****
164:C:/WinAVR/avr/include/util/delay.h ****
165:C:/WinAVR/avr/include/util/delay.h **** /**
166:C:/WinAVR/avr/include/util/delay.h **** \ingroup util_delay
167:C:/WinAVR/avr/include/util/delay.h ****
168:C:/WinAVR/avr/include/util/delay.h **** Perform a delay of \c __ms milliseconds, using _delay_loop_2().
169:C:/WinAVR/avr/include/util/delay.h ****
170:C:/WinAVR/avr/include/util/delay.h **** The macro F_CPU is supposed to be defined to a
171:C:/WinAVR/avr/include/util/delay.h **** constant defining the CPU clock frequency (in Hertz).
172:C:/WinAVR/avr/include/util/delay.h ****
173:C:/WinAVR/avr/include/util/delay.h **** The maximal possible delay is 262.14 ms / F_CPU in MHz.
174:C:/WinAVR/avr/include/util/delay.h **** */
175:C:/WinAVR/avr/include/util/delay.h **** void
176:C:/WinAVR/avr/include/util/delay.h **** _delay_ms(double __ms)
177:C:/WinAVR/avr/include/util/delay.h **** {
307 .LM25:
308 0116 80E0 ldi r24,lo8(0x3f800000)
309 0118 90E0 ldi r25,hi8(0x3f800000)
310 011a A0E8 ldi r26,hlo8(0x3f800000)
311 011c BFE3 ldi r27,hhi8(0x3f800000)
312 011e 8C83 std Y+4,r24
313 0120 9D83 std Y+5,r25
314 0122 AE83 std Y+6,r26
315 0124 BF83 std Y+7,r27
316 .LBB3:
178:C:/WinAVR/avr/include/util/delay.h **** uint16_t __ticks;
179:C:/WinAVR/avr/include/util/delay.h **** double __tmp = ((F_CPU) / 4e3) * __ms;
318 .LM26:
319 0126 26E6 ldi r18,lo8(0x44e66666)
320 0128 36E6 ldi r19,hi8(0x44e66666)
321 012a 46EE ldi r20,hlo8(0x44e66666)
322 012c 54E4 ldi r21,hhi8(0x44e66666)
323 012e 6C81 ldd r22,Y+4
324 0130 7D81 ldd r23,Y+5
325 0132 8E81 ldd r24,Y+6
326 0134 9F81 ldd r25,Y+7
327 0136 0E94 0000 call __mulsf3
328 013a DC01 movw r26,r24
329 013c CB01 movw r24,r22
330 013e 8A87 std Y+10,r24
331 0140 9B87 std Y+11,r25
332 0142 AC87 std Y+12,r26
333 0144 BD87 std Y+13,r27
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -