📄 calibrate.lst
字号:
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 **** {
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;
180:C:/WinAVR/avr/include/util/delay.h **** if (__tmp < 1.0)
181:C:/WinAVR/avr/include/util/delay.h **** __ticks = 1;
182:C:/WinAVR/avr/include/util/delay.h **** else if (__tmp > 65535)
183:C:/WinAVR/avr/include/util/delay.h **** __ticks = 0; /* i.e. 65536 */
184:C:/WinAVR/avr/include/util/delay.h **** else
185:C:/WinAVR/avr/include/util/delay.h **** __ticks = (uint16_t)__tmp;
124 .LM4:
125 0006 80E0 ldi r24,lo8(18432)
126 0008 98E4 ldi r25,hi8(18432)
127 .LBB4:
128 .LBB5:
130 .LM5:
131 /* #APP */
132 000a 0197 1: sbiw r24,1
133 000c F1F7 brne 1b
134 /* #NOAPP */
135 .LBE5:
136 .LBE4:
137 .LBE3:
138 .LBE2:
140 .Ltext2:
242:driver/Calibrate.c **** {
243:driver/Calibrate.c **** _delay_ms(10);
244:driver/Calibrate.c **** if (!SET_KEY)
142 .LM6:
143 000e B599 sbic 54-0x20,5
144 0010 F7CF rjmp .L20
145 .L14:
245:driver/Calibrate.c **** {
246:driver/Calibrate.c **** while (1){
247:driver/Calibrate.c **** if (SET_KEY)
147 .LM7:
148 0012 B599 sbic 54-0x20,5
149 0014 02C0 rjmp .L1
248:driver/Calibrate.c **** return;
249:driver/Calibrate.c **** wdt_reset();
151 .LM8:
152 /* #APP */
153 0016 A895 wdr
154 /* #NOAPP */
155 0018 FCCF rjmp .L14
156 .L1:
157 001a 0895 ret
158 /* epilogue: frame size=0 */
159 /* epilogue: noreturn */
160 /* epilogue end (size=0) */
161 /* function SetKey size 18 (18) */
166 .Lscope0:
167 .data
168 .LC0:
169 0000 6164 6A20 .string "adj "
169 00
170 .LC1:
171 0005 696E 2D31 .string "in-1"
171 00
172 .LC2:
173 000a 7275 6E20 .string "run "
173 00
174 .LC3:
175 000f 696E 2D30 .string "in-0"
175 00
176 .LC4:
177 0014 2075 6120 .string " ua "
177 00
178 .LC5:
179 0019 2069 6120 .string " ia "
179 00
180 .LC6:
181 001e 2070 6120 .string " pa "
181 00
182 .LC7:
183 0023 2075 6320 .string " uc "
183 00
184 .LC8:
185 0028 2069 6320 .string " ic "
185 00
186 .LC9:
187 002d 2070 6320 .string " pc "
187 00
188 .LC10:
189 0032 656E 6420 .string "end "
189 00
190 .text
192 .global Calibrate
194 Calibrate:
196 .LM9:
197 /* prologue: frame size=4 */
198 001c 0F93 push r16
199 001e 1F93 push r17
200 0020 CF93 push r28
201 0022 DF93 push r29
202 0024 CDB7 in r28,__SP_L__
203 0026 DEB7 in r29,__SP_H__
204 0028 2497 sbiw r28,4
205 002a 0FB6 in __tmp_reg__,__SREG__
206 002c F894 cli
207 002e DEBF out __SP_H__,r29
208 0030 0FBE out __SREG__,__tmp_reg__
209 0032 CDBF out __SP_L__,r28
210 /* prologue end (size=12) */
212 .LM10:
213 0034 8FE2 ldi r24,lo8(47)
214 0036 8093 0000 sts DispBuf+4,r24
215 .L22:
217 .LM11:
218 003a 01E0 ldi r16,lo8(1)
219 003c 0093 0000 sts TaskID,r16
221 .LM12:
222 0040 939A sbi 50-0x20,3
224 .LM13:
225 0042 1092 0000 sts fH_Alarm,__zero_reg__
227 .LM14:
228 0046 929A sbi 50-0x20,2
230 .LM15:
231 0048 1092 0000 sts fL_Alarm,__zero_reg__
233 .LM16:
234 004c 00D0 rcall Rest5460A
236 .LM17:
237 004e 00D0 rcall Initi5460A
239 .LM18:
240 0050 AD98 cbi 53-0x20,5
241 .LBB6:
242 .LBB7:
244 .Ltext3:
246 .LM19:
247 0052 17E0 ldi r17,lo8(7)
248 .LBB8:
249 .LBB9:
251 .LM20:
252 0054 812F mov r24,r17
253 /* #APP */
254 0056 8A95 1: dec r24
255 0058 F1F7 brne 1b
256 /* #NOAPP */
257 .LBE9:
258 .LBE8:
259 .LBE7:
260 .LBE6:
262 .Ltext4:
264 .LM21:
265 005a A898 cbi 53-0x20,0
267 .LM22:
268 005c 80EA ldi r24,lo8(-96)
269 005e 00D0 rcall Wr_ADByte
270 .LBB10:
271 .LBB11:
272 .LBB12:
273 .LBB13:
275 .Ltext5:
277 .LM23:
278 0060 812F mov r24,r17
279 /* #APP */
280 0062 8A95 1: dec r24
281 0064 F1F7 brne 1b
282 /* #NOAPP */
283 .LBE13:
284 .LBE12:
285 .LBE11:
286 .LBE10:
288 .Ltext6:
290 .LM24:
291 0066 AD9A sbi 53-0x20,5
293 .LM25:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -