📄 ad7714.lst
字号:
94:d:/WinAVR/avr/include/util/delay.h **** as 0.) The loop executes three CPU cycles per iteration, not
95:d:/WinAVR/avr/include/util/delay.h **** including the overhead the compiler needs to setup the counter
96:d:/WinAVR/avr/include/util/delay.h **** register.
97:d:/WinAVR/avr/include/util/delay.h ****
98:d:/WinAVR/avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
99:d:/WinAVR/avr/include/util/delay.h **** can be achieved.
100:d:/WinAVR/avr/include/util/delay.h **** */
101:d:/WinAVR/avr/include/util/delay.h **** void
102:d:/WinAVR/avr/include/util/delay.h **** _delay_loop_1(uint8_t __count)
103:d:/WinAVR/avr/include/util/delay.h **** {
104:d:/WinAVR/avr/include/util/delay.h **** __asm__ volatile (
105:d:/WinAVR/avr/include/util/delay.h **** "1: dec %0" "\n\t"
106:d:/WinAVR/avr/include/util/delay.h **** "brne 1b"
107:d:/WinAVR/avr/include/util/delay.h **** : "=r" (__count)
108:d:/WinAVR/avr/include/util/delay.h **** : "0" (__count)
109:d:/WinAVR/avr/include/util/delay.h **** );
110:d:/WinAVR/avr/include/util/delay.h **** }
111:d:/WinAVR/avr/include/util/delay.h ****
112:d:/WinAVR/avr/include/util/delay.h **** /** \ingroup util_delay
113:d:/WinAVR/avr/include/util/delay.h ****
114:d:/WinAVR/avr/include/util/delay.h **** Delay loop using a 16-bit counter \c __count, so up to 65536
115:d:/WinAVR/avr/include/util/delay.h **** iterations are possible. (The value 65536 would have to be
116:d:/WinAVR/avr/include/util/delay.h **** passed as 0.) The loop executes four CPU cycles per iteration,
117:d:/WinAVR/avr/include/util/delay.h **** not including the overhead the compiler requires to setup the
118:d:/WinAVR/avr/include/util/delay.h **** counter register pair.
119:d:/WinAVR/avr/include/util/delay.h ****
120:d:/WinAVR/avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
121:d:/WinAVR/avr/include/util/delay.h **** milliseconds can be achieved.
122:d:/WinAVR/avr/include/util/delay.h **** */
123:d:/WinAVR/avr/include/util/delay.h **** void
124:d:/WinAVR/avr/include/util/delay.h **** _delay_loop_2(uint16_t __count)
125:d:/WinAVR/avr/include/util/delay.h **** {
126:d:/WinAVR/avr/include/util/delay.h **** __asm__ volatile (
127:d:/WinAVR/avr/include/util/delay.h **** "1: sbiw %0,1" "\n\t"
128:d:/WinAVR/avr/include/util/delay.h **** "brne 1b"
129:d:/WinAVR/avr/include/util/delay.h **** : "=w" (__count)
130:d:/WinAVR/avr/include/util/delay.h **** : "0" (__count)
131:d:/WinAVR/avr/include/util/delay.h **** );
132:d:/WinAVR/avr/include/util/delay.h **** }
133:d:/WinAVR/avr/include/util/delay.h ****
134:d:/WinAVR/avr/include/util/delay.h **** #ifndef F_CPU
135:d:/WinAVR/avr/include/util/delay.h **** /* prevent compiler error by supplying a default */
136:d:/WinAVR/avr/include/util/delay.h **** # warning "F_CPU not defined for <util/delay.h>"
137:d:/WinAVR/avr/include/util/delay.h **** # define F_CPU 1000000UL
138:d:/WinAVR/avr/include/util/delay.h **** #endif
139:d:/WinAVR/avr/include/util/delay.h ****
140:d:/WinAVR/avr/include/util/delay.h **** /**
141:d:/WinAVR/avr/include/util/delay.h **** \ingroup util_delay
142:d:/WinAVR/avr/include/util/delay.h ****
143:d:/WinAVR/avr/include/util/delay.h **** Perform a delay of \c __us microseconds, using _delay_loop_1().
144:d:/WinAVR/avr/include/util/delay.h ****
145:d:/WinAVR/avr/include/util/delay.h **** The macro F_CPU is supposed to be defined to a
146:d:/WinAVR/avr/include/util/delay.h **** constant defining the CPU clock frequency (in Hertz).
147:d:/WinAVR/avr/include/util/delay.h ****
148:d:/WinAVR/avr/include/util/delay.h **** The maximal possible delay is 768 us / F_CPU in MHz.
149:d:/WinAVR/avr/include/util/delay.h **** */
150:d:/WinAVR/avr/include/util/delay.h **** void
151:d:/WinAVR/avr/include/util/delay.h **** _delay_us(double __us)
152:d:/WinAVR/avr/include/util/delay.h **** {
153:d:/WinAVR/avr/include/util/delay.h **** uint8_t __ticks;
154:d:/WinAVR/avr/include/util/delay.h **** double __tmp = ((F_CPU) / 3e6) * __us;
155:d:/WinAVR/avr/include/util/delay.h **** if (__tmp < 1.0)
156:d:/WinAVR/avr/include/util/delay.h **** __ticks = 1;
157:d:/WinAVR/avr/include/util/delay.h **** else if (__tmp > 255)
158:d:/WinAVR/avr/include/util/delay.h **** __ticks = 0; /* i.e. 256 */
159:d:/WinAVR/avr/include/util/delay.h **** else
160:d:/WinAVR/avr/include/util/delay.h **** __ticks = (uint8_t)__tmp;
161:d:/WinAVR/avr/include/util/delay.h **** _delay_loop_1(__ticks);
162:d:/WinAVR/avr/include/util/delay.h **** }
163:d:/WinAVR/avr/include/util/delay.h ****
164:d:/WinAVR/avr/include/util/delay.h ****
165:d:/WinAVR/avr/include/util/delay.h **** /**
166:d:/WinAVR/avr/include/util/delay.h **** \ingroup util_delay
167:d:/WinAVR/avr/include/util/delay.h ****
168:d:/WinAVR/avr/include/util/delay.h **** Perform a delay of \c __ms milliseconds, using _delay_loop_2().
169:d:/WinAVR/avr/include/util/delay.h ****
170:d:/WinAVR/avr/include/util/delay.h **** The macro F_CPU is supposed to be defined to a
171:d:/WinAVR/avr/include/util/delay.h **** constant defining the CPU clock frequency (in Hertz).
172:d:/WinAVR/avr/include/util/delay.h ****
173:d:/WinAVR/avr/include/util/delay.h **** The maximal possible delay is 262.14 ms / F_CPU in MHz.
174:d:/WinAVR/avr/include/util/delay.h **** */
175:d:/WinAVR/avr/include/util/delay.h **** void
176:d:/WinAVR/avr/include/util/delay.h **** _delay_ms(double __ms)
177:d:/WinAVR/avr/include/util/delay.h **** {
178:d:/WinAVR/avr/include/util/delay.h **** uint16_t __ticks;
179:d:/WinAVR/avr/include/util/delay.h **** double __tmp = ((F_CPU) / 4e3) * __ms;
180:d:/WinAVR/avr/include/util/delay.h **** if (__tmp < 1.0)
181:d:/WinAVR/avr/include/util/delay.h **** __ticks = 1;
182:d:/WinAVR/avr/include/util/delay.h **** else if (__tmp > 65535)
183:d:/WinAVR/avr/include/util/delay.h **** __ticks = 0; /* i.e. 65536 */
184:d:/WinAVR/avr/include/util/delay.h **** else
185:d:/WinAVR/avr/include/util/delay.h **** __ticks = (uint16_t)__tmp;
174 .LM22:
175 0040 80E5 ldi r24,lo8(-15536)
176 0042 93EC ldi r25,hi8(-15536)
177 .LBB4:
178 .LBB5:
180 .LM23:
181 0044 FC01 movw r30,r24
182 /* #APP */
183 0046 3197 1: sbiw r30,1
184 0048 F1F7 brne 1b
185 /* #NOAPP */
186 .LBE5:
187 .LBE4:
188 .LBE3:
189 .LBE2:
190 .LBB6:
191 .LBB7:
192 .LBB8:
193 .LBB9:
194 /* #APP */
195 004a 0197 1: sbiw r24,1
196 004c F1F7 brne 1b
197 /* #NOAPP */
198 .LBE9:
199 .LBE8:
200 .LBE7:
201 .LBE6:
202 .LBB10:
203 .LBB11:
205 .LM24:
206 004e 88EA ldi r24,lo8(25000)
207 0050 91E6 ldi r25,hi8(25000)
208 .LBB12:
209 .LBB13:
211 .LM25:
212 /* #APP */
213 0052 0197 1: sbiw r24,1
214 0054 F1F7 brne 1b
215 /* #NOAPP */
216 .LBE13:
217 .LBE12:
218 .LBE11:
219 .LBE10:
220 /* epilogue: frame size=0 */
221 0056 0895 ret
222 /* epilogue end (size=1) */
223 /* function spiSend size 29 (28) */
237 .Lscope1:
239 .global waitReady
241 waitReady:
243 .Ltext2:
79:ad7714.c **** _delay_ms(200);
80:ad7714.c **** _delay_ms(200);
81:ad7714.c **** _delay_ms(100);
82:ad7714.c **** }
83:ad7714.c ****
84:ad7714.c **** void spiRead()
85:ad7714.c **** {
86:ad7714.c **** //while(PINB&(1<<DRDY)); //等待转换好
87:ad7714.c **** spiStart();
88:ad7714.c **** clrb(PORTB,CS);
89:ad7714.c **** //start
90:ad7714.c **** SPDR=0; //1
91:ad7714.c **** while(!(SPSR&(1<<SPIF)));
92:ad7714.c **** buff[0]=SPDR;
93:ad7714.c **** SPDR=0; //2
94:ad7714.c **** while(!(SPSR&(1<<SPIF)));
95:ad7714.c **** buff[1]=SPDR;
96:ad7714.c **** SPDR=0; //3
97:ad7714.c **** while(!(SPSR&(1<<SPIF)));
98:ad7714.c **** buff[2]=SPDR;
99:ad7714.c **** setb(PORTB,CS);
100:ad7714.c **** spiStop();
101:ad7714.c **** }
102:ad7714.c ****
103:ad7714.c **** void waitReady()
104:ad7714.c **** {
245 .LM26:
246 /* prologue: frame size=0 */
247 /* prologue end (size=0) */
105:ad7714.c **** uchar n=0xff;
106:ad7714.c **** clrb(PORTB,CS);
249 .LM27:
250 0058 C098 cbi 56-0x20,0
107:ad7714.c **** while(!tstb(n,DRDY))
108:ad7714.c **** {
109:ad7714.c **** spiSend(0x08); //下一次操作通信寄存器
110:ad7714.c ****
111:ad7714.c **** //tst DRDY is ok
112:ad7714.c **** spiStart();
113:ad7714.c **** SPDR=0xaa; //无用的数据,保持最高位为1
114:ad7714.c **** while(!(SPSR&(1<<SPIF)));
115:ad7714.c **** n=SPDR;
116:ad7714.c **** spiStop();
117:ad7714.c **** }
118:ad7714.c **** setb(PORTB,CS);
252 .LM28:
253 005a C09A sbi 56-0x20,0
254 /* epilogue: frame size=0 */
255 005c 0895 ret
256 /* epilogue end (size=1) */
257 /* function waitReady size 3 (2) */
259 .Lscope2:
261 .global spiRead
263 spiRead:
265 .LM29:
266 /* prologue: frame size=0 */
267 /* prologue end (size=0) */
269 .LM30:
270 005e 6E9A sbi 45-0x20,6
272 .LM31:
273 0060 C098 cbi 56-0x20,0
275 .LM32:
276 0062 1FB8 out 47-0x20,__zero_reg__
277 .L40:
279 .LM33:
280 0064 779B sbis 46-0x20,7
281 0066 FECF rjmp .L40
283 .LM34:
284 0068 8FB1 in r24,47-0x20
285 006a 8093 0000 sts buff,r24
287 .LM35:
288 006e 1FB8 out 47-0x20,__zero_reg__
289 .L43:
291 .LM36:
292 0070 779B sbis 46-0x20,7
293 0072 FECF rjmp .L43
295 .LM37:
296 0074 8FB1 in r24,47-0x20
297 0076 8093 0000 sts buff+1,r24
299 .LM38:
300 007a 1FB8 out 47-0x20,__zero_reg__
301 .L46:
303 .LM39:
304 007c 779B sbis 46-0x20,7
305 007e FECF rjmp .L46
307 .LM40:
308 0080 8FB1 in r24,47-0x20
309 0082 8093 0000 sts buff+2,r24
311 .LM41:
312 0086 C09A sbi 56-0x20,0
314 .LM42:
315 0088 6E98 cbi 45-0x20,6
316 /* epilogue: frame size=0 */
317 008a 0895 ret
318 /* epilogue end (size=1) */
319 /* function spiRead size 23 (22) */
321 .Lscope3:
324 .global usartPutchar
326 usartPutchar:
119:ad7714.c **** }
120:ad7714.c ****
121:ad7714.c **** void usartPutchar(uchar data)
122:ad7714.c **** {
328 .LM43:
329 /* prologue: frame size=0 */
330 /* prologue end (size=0) */
331 .L50:
123:ad7714.c **** while(!tstb(UCSRA,UDRE)); //等待发送标致完成
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -