📄 ds18b20.lst
字号:
1 .file "ds18b20.c"
2 .arch atmega8
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:
92 .global reset_ds18b20
94 reset_ds18b20:
1:ds18b20.c **** #define ds18b20_c
2:ds18b20.c **** #include "main.h"
3:ds18b20.c **** void reset_ds18b20(void)
4:ds18b20.c **** {
96 .LM1:
97 /* prologue: frame size=0 */
98 /* prologue end (size=0) */
5:ds18b20.c **** clr_ds18b20_dq();
100 .LM2:
101 0000 AD98 cbi 53-0x20,5
102 .LBB2:
103 .LBB3:
105 .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 */
107 .LM3:
108 0002 80E0 ldi r24,lo8(0)
109 .LBB4:
110 .LBB5:
112 .LM4:
113 0004 982F mov r25,r24
114 /* #APP */
115 0006 9A95 1: dec r25
116 0008 F1F7 brne 1b
117 /* #NOAPP */
118 .LBE5:
119 .LBE4:
120 .LBE3:
121 .LBE2:
122 .LBB6:
123 .LBB7:
124 .LBB8:
125 .LBB9:
126 000a 982F mov r25,r24
127 /* #APP */
128 000c 9A95 1: dec r25
129 000e F1F7 brne 1b
130 /* #NOAPP */
131 .LBE9:
132 .LBE8:
133 .LBE7:
134 .LBE6:
135 .LBB10:
136 .LBB11:
137 .LBB12:
138 .LBB13:
139 0010 982F mov r25,r24
140 /* #APP */
141 0012 9A95 1: dec r25
142 0014 F1F7 brne 1b
143 /* #NOAPP */
144 .LBE13:
145 .LBE12:
146 .LBE11:
147 .LBE10:
148 .LBB14:
149 .LBB15:
150 .LBB16:
151 .LBB17:
152 /* #APP */
153 0016 8A95 1: dec r24
154 0018 F1F7 brne 1b
155 /* #NOAPP */
156 .LBE17:
157 .LBE16:
158 .LBE15:
159 .LBE14:
161 .Ltext2:
6:ds18b20.c **** _delay_us(198);//100us
7:ds18b20.c **** _delay_us(198);//100us
8:ds18b20.c **** _delay_us(198);//100us
9:ds18b20.c **** _delay_us(198);//100us
10:ds18b20.c **** set_ds18b20_dq();
163 .LM5:
164 001a AD9A sbi 53-0x20,5
165 .LBB18:
166 .LBB19:
168 .Ltext3:
159:C:/WinAVR/avr/include/util/delay.h **** else
160:C:/WinAVR/avr/include/util/delay.h **** __ticks = (uint8_t)__tmp;
170 .LM6:
171 001c 8DE5 ldi r24,lo8(93)
172 .LBB20:
173 .LBB21:
175 .LM7:
176 /* #APP */
177 001e 8A95 1: dec r24
178 0020 F1F7 brne 1b
179 /* #NOAPP */
180 .LBE21:
181 .LBE20:
182 .LBE19:
183 .LBE18:
184 /* epilogue: frame size=0 */
185 0022 0895 ret
186 /* epilogue end (size=1) */
187 /* function reset_ds18b20 size 28 (27) */
207 .Lscope0:
209 .global ack_ds18b20
211 ack_ds18b20:
213 .Ltext4:
11:ds18b20.c **** _delay_us(38);//20us
12:ds18b20.c **** }
13:ds18b20.c **** void ack_ds18b20(void)
14:ds18b20.c **** {
215 .LM8:
216 /* prologue: frame size=0 */
217 /* prologue end (size=0) */
218 .L43:
15:ds18b20.c **** while(in_ds18b20_dq());
220 .LM9:
221 0024 9D99 sbic 51-0x20,5
222 0026 FECF rjmp .L43
223 .L46:
16:ds18b20.c **** while(!(in_ds18b20_dq()));
225 .LM10:
226 0028 9D9B sbis 51-0x20,5
227 002a FECF rjmp .L46
228 .LBB22:
229 .LBB23:
231 .Ltext5:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -