字號:
287 .LM19:
288 0178 E981 ldd r30,Y+1
289 017a FA81 ldd r31,Y+2
290 017c 8081 ld r24,Z
291 017e 8823 tst r24
292 0180 59F0 breq .L10
102:UART.c **** PutByte(*puts);
294 .LM20:
295 0182 E981 ldd r30,Y+1
296 0184 FA81 ldd r31,Y+2
297 0186 8081 ld r24,Z
298 0188 0E94 0000 call PutByte
300 .LM21:
301 018c 8981 ldd r24,Y+1
302 018e 9A81 ldd r25,Y+2
303 0190 0196 adiw r24,1
304 0192 8983 std Y+1,r24
305 0194 9A83 std Y+2,r25
306 0196 F0CF rjmp .L11
307 .L10:
308 /* epilogue: frame size=2 */
309 0198 2296 adiw r28,2
310 019a 0FB6 in __tmp_reg__,__SREG__
311 019c F894 cli
312 019e DEBF out __SP_H__,r29
313 01a0 0FBE out __SREG__,__tmp_reg__
314 01a2 CDBF out __SP_L__,r28
315 01a4 DF91 pop r29
316 01a6 CF91 pop r28
317 01a8 0895 ret
318 /* epilogue end (size=9) */
319 /* function PutString size 37 (18) */
324 .global PutBytes
326 PutBytes:
103:UART.c **** }
104:UART.c ****
105:UART.c **** //**********************************************************************
106:UART.c **** //函 數(shù) 名: void PutBytes(U8 *outplace,U8 j)
107:UART.c **** //功 能: 放一串?dāng)?shù)據(jù)到發(fā)送緩沖區(qū),需要定義發(fā)送的字節(jié)數(shù)
108:UART.c **** //說 明:
109:UART.c **** //參 數(shù): *outplace:發(fā)送的字節(jié)數(shù)據(jù)首地址指針 j:發(fā)送的字節(jié)數(shù)量
110:UART.c **** //返 回 值:
111:UART.c **** //***********************************************************************
112:UART.c **** void PutBytes(U8 *outplace,U8 j)
113:UART.c **** { int i;
328 .LM22:
329 /* prologue: frame size=5 */
330 01aa CF93 push r28
331 01ac DF93 push r29
332 01ae CDB7 in r28,__SP_L__
333 01b0 DEB7 in r29,__SP_H__
334 01b2 2597 sbiw r28,5
335 01b4 0FB6 in __tmp_reg__,__SREG__
336 01b6 F894 cli
337 01b8 DEBF out __SP_H__,r29
338 01ba 0FBE out __SREG__,__tmp_reg__
339 01bc CDBF out __SP_L__,r28
340 /* prologue end (size=10) */
341 01be 8983 std Y+1,r24
342 01c0 9A83 std Y+2,r25
343 01c2 6B83 std Y+3,r22
114:UART.c **** for(i=0;i<j;i++)
345 .LM23:
346 01c4 1C82 std Y+4,__zero_reg__
347 01c6 1D82 std Y+5,__zero_reg__
348 .L15:
350 .LM24:
351 01c8 8B81 ldd r24,Y+3
352 01ca 282F mov r18,r24
353 01cc 3327 clr r19
354 01ce 8C81 ldd r24,Y+4
355 01d0 9D81 ldd r25,Y+5
356 01d2 8217 cp r24,r18
357 01d4 9307 cpc r25,r19
358 01d6 84F4 brge .L14
115:UART.c **** {
116:UART.c **** PutByte(*outplace);
360 .LM25:
361 01d8 E981 ldd r30,Y+1
362 01da FA81 ldd r31,Y+2
363 01dc 8081 ld r24,Z
364 01de 0E94 0000 call PutByte
117:UART.c **** outplace++;
366 .LM26:
367 01e2 8981 ldd r24,Y+1
368 01e4 9A81 ldd r25,Y+2
369 01e6 0196 adiw r24,1
370 01e8 8983 std Y+1,r24
371 01ea 9A83 std Y+2,r25
373 .LM27:
374 01ec 8C81 ldd r24,Y+4
375 01ee 9D81 ldd r25,Y+5
376 01f0 0196 adiw r24,1
377 01f2 8C83 std Y+4,r24
378 01f4 9D83 std Y+5,r25
379 01f6 E8CF rjmp .L15
380 .L14:
381 /* epilogue: frame size=5 */
382 01f8 2596 adiw r28,5
383 01fa 0FB6 in __tmp_reg__,__SREG__
384 01fc F894 cli
385 01fe DEBF out __SP_H__,r29
386 0200 0FBE out __SREG__,__tmp_reg__
387 0202 CDBF out __SP_L__,r28
388 0204 DF91 pop r29
389 0206 CF91 pop r28
390 0208 0895 ret
391 /* epilogue end (size=9) */
392 /* function PutBytes size 48 (29) */
395 .global hex_
396 .data
399 hex_:
400 0008 3031 3233 .string "0123456789ABCDEF"
400 3435 3637
400 3839 4142
400 4344 4546
400 00
401 .text
404 .global PutHEX
406 PutHEX:
118:UART.c **** }
119:UART.c **** }
120:UART.c ****
121:UART.c **** //**********************************************************************
122:UART.c **** //函 數(shù) 名: PutHEX(unsigned char c)
123:UART.c **** //功 能: 發(fā)送一個字節(jié)的hex碼,分成兩個字節(jié)發(fā)。
124:UART.c **** //說 明: 發(fā)送ASSIC碼
125:UART.c **** //參 數(shù): 發(fā)送的數(shù)據(jù)
126:UART.c **** //返 回 值: 無
127:UART.c **** //示 范: PutHEX(i);
128:UART.c **** //***********************************************************************
129:UART.c **** const U8 hex_[]={"0123456789ABCDEF"};
130:UART.c **** void PutHEX(U8 c)
131:UART.c **** {
408 .LM28:
409 /* prologue: frame size=3 */
410 020a CF93 push r28
411 020c DF93 push r29
412 020e CDB7 in r28,__SP_L__
413 0210 DEB7 in r29,__SP_H__
414 0212 2397 sbiw r28,3
415 0214 0FB6 in __tmp_reg__,__SREG__
416 0216 F894 cli
417 0218 DEBF out __SP_H__,r29
418 021a 0FBE out __SREG__,__tmp_reg__
419 021c CDBF out __SP_L__,r28
420 /* prologue end (size=10) */
421 021e 8983 std Y+1,r24
132:UART.c **** U16 ch;
133:UART.c **** ch=(c>>4)&0x0f;
423 .LM29:
424 0220 8981 ldd r24,Y+1
425 0222 8295 swap r24
426 0224 8F70 andi r24,0x0f
427 0226 9927 clr r25
428 0228 8F70 andi r24,lo8(15)
429 022a 9070 andi r25,hi8(15)
430 022c 8A83 std Y+2,r24
431 022e 9B83 std Y+3,r25
134:UART.c **** PutByte(hex_[ch]);
433 .LM30:
434 0230 8A81 ldd r24,Y+2
435 0232 9B81 ldd r25,Y+3
436 0234 FC01 movw r30,r24
437 0236 E050 subi r30,lo8(-(hex_))
438 0238 F040 sbci r31,hi8(-(hex_))
439 023a 8081 ld r24,Z
440 023c 0E94 0000 call PutByte
135:UART.c **** ch=c&0x0f;
442 .LM31:
443 0240 8981 ldd r24,Y+1
444 0242 9927 clr r25
445 0244 8F70 andi r24,lo8(15)
446 0246 9070 andi r25,hi8(15)
447 0248 8A83 std Y+2,r24
448 024a 9B83 std Y+3,r25
136:UART.c **** PutByte(hex_[ch]);
450 .LM32:
451 024c 8A81 ldd r24,Y+2
452 024e 9B81 ldd r25,Y+3
453 0250 FC01 movw r30,r24
454 0252 E050 subi r30,lo8(-(hex_))
455 0254 F040 sbci r31,hi8(-(hex_))
456 0256 8081 ld r24,Z
457 0258 0E94 0000 call PutByte
458 /* epilogue: frame size=3 */
459 025c 2396 adiw r28,3
460 025e 0FB6 in __tmp_reg__,__SREG__
461 0260 F894 cli
462 0262 DEBF out __SP_H__,r29
463 0264 0FBE out __SREG__,__tmp_reg__
464 0266 CDBF out __SP_L__,r28
465 0268 DF91 pop r29
466 026a CF91 pop r28
467 026c 0895 ret
468 /* epilogue end (size=9) */
469 /* function PutHEX size 50 (31) */
473 .global GetByte
475 GetByte:
137:UART.c **** // SPACE;
138:UART.c **** }
139:UART.c ****
140:UART.c **** //**********************************************************************
141:UART.c **** //函 數(shù) 名: U8 GetByte (void)
142:UART.c **** //功 能: 從接收緩沖區(qū)取一個U8
143:UART.c **** //說 明: 如不想等待則在調(diào)用前檢測inbufsign是否為1
144:UART.c **** //參 數(shù): 無
145:UART.c **** //返 回 值: 接收到的數(shù)據(jù)
146:UART.c **** //示 范: i=GetByte();
147:UART.c **** //***********************************************************************
148:UART.c **** U8 GetByte (void)
149:UART.c **** {
477 .LM33:
478 /* prologue: frame size=1 */
479 026e CF93 push r28
480 0270 DF93 push r29
481 0272 CDB7 in r28,__SP_L__
482 0274 DEB7 in r29,__SP_H__
483 0276 2197 sbiw r28,1
484 0278 0FB6 in __tmp_reg__,__SREG__
485 027a F894 cli
486 027c DEBF out __SP_H__,r29
487 027e 0FBE out __SREG__,__tmp_reg__
488 0280 CDBF out __SP_L__,r28
489 /* prologue end (size=10) */
490 .L20:
150:UART.c **** char c ;
151:UART.c **** while (!inbufsign); //緩沖區(qū)空等待
492 .LM34:
493 0282 8091 0000 lds r24,inbufsign
494 0286 8823 tst r24
495 0288 09F4 brne .L21
497 .LM35:
498 028a FBCF rjmp .L20
499 .L21:
152:UART.c **** cli();
501 .LM36:
502 /* #APP */
503 028c F894 cli
153:UART.c **** c=*getlast; //取數(shù)據(jù)
505 .LM37:
506 /* #NOAPP */
507 028e E091 0000 lds r30,getlast
508 0292 F091 0000 lds r31,(getlast)+1
509 0296 8081 ld r24,Z
510 0298 8983 std Y+1,r24
154:UART.c **** getlast++; //最后取走的數(shù)據(jù)位置加1
512 .LM38:
513 029a 8091 0000 lds r24,getlast
514 029e 9091 0000 lds r25,(getlast)+1
515 02a2 0196 adiw r24,1
516 02a4 9093 0000 sts (getlast)+1,r25
517 02a8 8093 0000 sts getlast,r24
155:UART.c **** inbufful=0; //輸入緩沖區(qū)的滿標(biāo)志清零
519 .LM39:
520 02ac 8091 0000 lds r24,bit_flag
521 02b0 8B7F andi r24,lo8(-5)
522 02b2 8093 0000 sts bit_flag,r24
156:UART.c **** if (getlast==inbuf+ILEN) getlast=inbuf; //地址到頂部回到底部
524 .LM40:
525 02b6 8091 0000 lds r24,getlast
526 02ba 9091 0000 lds r25,(getlast)+1
527 02be 20E0 ldi r18,hi8(inbuf+12)
528 02c0 8030 cpi r24,lo8(inbuf+12)
529 02c2 9207 cpc r25,r18
530 02c4 31F4 brne .L22
531 02c6 80E0 ldi r24,lo8(inbuf)
532 02c8 90E0 ldi r25,hi8(inbuf)
533 02ca 9093 0000 sts (getlast)+1,r25
534 02ce 8093 0000 sts getlast,r24
535 .L22:
157:UART.c **** if (getlast==inlast) inbufsign=0; //地址相等置接收緩沖區(qū)空空標(biāo)志,再取數(shù)前要檢該標(biāo)志
537 .LM41:
538 02d2 2091 0000 lds r18,getlast
539 02d6 3091 0000 lds r19,(getlast)+1
540 02da 8091 0000 lds r24,inlast
541 02de 9091 0000 lds r25,(inlast)+1
542 02e2 2817 cp r18,r24
543 02e4 3907 cpc r19,r25
544 02e6 11F4 brne .L23
545 02e8 1092 0000 sts inbufsign,__zero_reg__
546 .L23:
158:UART.c **** sei();
548 .LM42:
549 /* #APP */
550 02ec 7894 sei
159:UART.c **** return (c); //取回數(shù)據(jù)
552 .LM43:
553 /* #NOAPP */
554 02ee 8981 ldd r24,Y+1
555 02f0 9927 clr r25
556 /* epilogue: frame size=1 */
557 02f2 2196 adiw r28,1
558 02f4 0FB6 in __tmp_reg__,__SREG__
559 02f6 F894 cli
560 02f8 DEBF out __SP_H__,r29
561 02fa 0FBE out __SREG__,__tmp_reg__
562 02fc CDBF out __SP_L__,r28
563 02fe DF91 pop r29
564 0300 CF91 pop r28
565 0302 0895 ret
566 /* epilogue end (size=9) */
567 /* function GetByte size 77 (58) */
571 .global __vector_13
573 __vector_13:
160:UART.c **** }
161:UART.c ****
162:UART.c **** //**********************************************************************
163:UART.c **** //函 數(shù) 名: void SerialSend_handler (void)
164:UART.c **** //功 能: 串口發(fā)送中斷處理
165:UART.c **** //說 明:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -