?? main.lst
字號:
525 00d0 8CEC ldi r24,lo8(-52)
526 00d2 0E94 0000 call ds18b20_write
211:ds18b20.h **** ds18b20_write(0x44); // 啟動溫度轉換
528 .LM60:
529 00d6 84E4 ldi r24,lo8(68)
530 00d8 0E94 0000 call ds18b20_write
531 .L64:
532 00dc 0895 ret
533 /* epilogue: frame size=0 */
534 00de 0895 ret
535 /* epilogue end (size=1) */
536 /* function convert_T size 12 (11) */
538 .Lscope6:
540 .global read_T
542 read_T:
212:ds18b20.h **** }
213:ds18b20.h **** }
214:ds18b20.h ****
215:ds18b20.h **** /*-------------------------------------------------------
216:ds18b20.h **** * 讀取轉換后的溫度值
217:ds18b20.h **** * 我假定DS18B20一定是正確的,所以沒有返回有關狀態。當你故意
218:ds18b20.h **** * 把DS18B20從電路中拔下而能讓程序告訴你出錯時,你可以自己修
219:ds18b20.h **** * 改這段代碼!
220:ds18b20.h **** */
221:ds18b20.h **** unsigned int read_T(void)
222:ds18b20.h **** {
544 .LM61:
545 /* prologue: frame size=0 */
546 00e0 CF93 push r28
547 00e2 DF93 push r29
548 /* prologue end (size=2) */
223:ds18b20.h **** unsigned int value=0;
550 .LM62:
551 00e4 C0E0 ldi r28,lo8(0)
552 00e6 D0E0 ldi r29,hi8(0)
224:ds18b20.h ****
225:ds18b20.h **** if(ds18b20_reset()==SUCC) { // 如果復位成功
554 .LM63:
555 00e8 0E94 0000 call ds18b20_reset
556 00ec 8130 cpi r24,lo8(1)
557 00ee 89F4 brne .L67
226:ds18b20.h **** ds18b20_write(0xcc); // 跳過多器件識別
559 .LM64:
560 00f0 8CEC ldi r24,lo8(-52)
561 00f2 0E94 0000 call ds18b20_write
227:ds18b20.h **** ds18b20_write(0xbe); // 讀暫存器
563 .LM65:
564 00f6 8EEB ldi r24,lo8(-66)
565 00f8 0E94 0000 call ds18b20_write
228:ds18b20.h **** value = (unsigned int)ds18b20_read(); // 低字節
567 .LM66:
568 00fc 0E94 0000 call ds18b20_read
569 0100 C82F mov r28,r24
570 0102 DD27 clr r29
229:ds18b20.h **** value += (unsigned int)(ds18b20_read())<<8; // 高字節
572 .LM67:
573 0104 0E94 0000 call ds18b20_read
574 0108 9927 clr r25
575 010a 982F mov r25,r24
576 010c 8827 clr r24
577 010e C80F add r28,r24
578 0110 D91F adc r29,r25
579 .L67:
230:ds18b20.h **** }
231:ds18b20.h **** return(value);
232:ds18b20.h **** }
581 .LM68:
582 0112 CE01 movw r24,r28
583 /* epilogue: frame size=0 */
584 0114 DF91 pop r29
585 0116 CF91 pop r28
586 0118 0895 ret
587 /* epilogue end (size=3) */
588 /* function read_T size 29 (24) */
593 .Lscope7:
597 .global DS18B20_HEX_to_LCD
599 DS18B20_HEX_to_LCD:
233:ds18b20.h **** void DS18B20_HEX_to_LCD(unsigned int x,char *p)
234:ds18b20.h **** {
601 .LM69:
602 /* prologue: frame size=0 */
603 /* prologue end (size=0) */
604 011a FB01 movw r30,r22
235:ds18b20.h **** char temp;
236:ds18b20.h **** char symbol='+';
606 .LM70:
607 011c 2BE2 ldi r18,lo8(43)
237:ds18b20.h **** temp=(unsigned char)((x&0x07ff)>>4);
609 .LM71:
610 011e AC01 movw r20,r24
611 0120 5770 andi r21,hi8(2047)
612 0122 64E0 ldi r22,4
613 0124 5695 1: lsr r21
614 0126 4795 ror r20
615 0128 6A95 dec r22
616 012a E1F7 brne 1b
238:ds18b20.h **** if (x&0x800) symbol='-';
618 .LM72:
619 012c 892F mov r24,r25
620 012e 9927 clr r25
621 0130 8695 lsr r24
622 0132 8695 lsr r24
623 0134 8695 lsr r24
624 0136 80FD sbrc r24,0
626 .LM73:
627 0138 2DE2 ldi r18,lo8(45)
628 .L69:
239:ds18b20.h **** p[0]=symbol;
630 .LM74:
631 013a 2083 st Z,r18
240:ds18b20.h **** p[1]=temp/100+'0';
633 .LM75:
634 013c 842F mov r24,r20
635 013e 64E6 ldi r22,lo8(100)
636 0140 0E94 0000 call __udivmodqi4
637 0144 382F mov r19,r24
638 0146 305D subi r19,lo8(-(48))
639 0148 3183 std Z+1,r19
241:ds18b20.h ****
242:ds18b20.h **** p[2]=temp%100/10+'0';
641 .LM76:
642 014a 842F mov r24,r20
643 014c 0E94 0000 call __udivmodqi4
644 0150 292F mov r18,r25
645 0152 892F mov r24,r25
646 0154 6AE0 ldi r22,lo8(10)
647 0156 0E94 0000 call __udivmodqi4
648 015a 482F mov r20,r24
649 015c 405D subi r20,lo8(-(48))
650 015e 4283 std Z+2,r20
243:ds18b20.h ****
244:ds18b20.h **** p[3]=temp%100%10+'0';
652 .LM77:
653 0160 822F mov r24,r18
654 0162 0E94 0000 call __udivmodqi4
655 0166 892F mov r24,r25
656 0168 805D subi r24,lo8(-(48))
657 016a 8383 std Z+3,r24
245:ds18b20.h **** if (p[1]=='0') {
659 .LM78:
660 016c 3033 cpi r19,lo8(48)
661 016e 31F4 brne .L68
246:ds18b20.h **** if (p[2]=='0') {p[2]=' ';}
663 .LM79:
664 0170 4033 cpi r20,lo8(48)
665 0172 11F4 brne .L71
666 0174 80E2 ldi r24,lo8(32)
667 0176 8283 std Z+2,r24
668 .L71:
247:ds18b20.h **** p[1]=' ';
670 .LM80:
671 0178 80E2 ldi r24,lo8(32)
672 017a 8183 std Z+1,r24
673 .L68:
674 017c 0895 ret
675 /* epilogue: frame size=0 */
676 017e 0895 ret
677 /* epilogue end (size=1) */
678 /* function DS18B20_HEX_to_LCD size 53 (52) */
683 .Lscope8:
685 .global USART_init
687 USART_init:
689 .Ltext21:
1:usart.h **** /*******************標準I/O功能****************開始********/
2:usart.h **** void USART_init(void)
3:usart.h **** {
691 .LM81:
692 /* prologue: frame size=0 */
693 /* prologue end (size=0) */
4:usart.h **** // 晶振頻率 : 4.0MHz
5:usart.h **** // 通信參數: 8 Data, 1 Stop, No Parity
6:usart.h **** // 波特率:
7:usart.h **** // UBRRL= 0x0C 19200;
8:usart.h **** // UBRRL= 0x19 9600;
9:usart.h **** // UBRRL= 0x33 4800;
10:usart.h **** // UBRRL= 0x67 2400
11:usart.h **** UCSRB |= (1<<RXEN)|(1<<TXEN); //允許發送和接收,|(1<<RXCIE)
695 .LM82:
696 0180 8AB1 in r24,42-0x20
697 0182 8861 ori r24,lo8(24)
698 0184 8AB9 out 42-0x20,r24
12:usart.h **** UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位數據位+1位停止位
700 .LM83:
701 0186 80B5 in r24,64-0x20
702 0188 8668 ori r24,lo8(-122)
703 018a 80BD out 64-0x20,r24
13:usart.h **** UBRRH = 0x00;
705 .LM84:
706 018c 10BC out 64-0x20,__zero_reg__
14:usart.h **** UBRRL = 71;//9600 baud 6MHz:38 4MHz:25:71:11.0592
708 .LM85:
709 018e 87E4 ldi r24,lo8(71)
710 0190 89B9 out 41-0x20,r24
711 /* epilogue: frame size=0 */
712 0192 0895 ret
713 /* epilogue end (size=1) */
714 /* function USART_init size 10 (9) */
716 .Lscope9:
719 .global put_char
721 put_char:
15:usart.h **** //sei();
16:usart.h **** }
17:usart.h ****
18:usart.h ****
19:usart.h **** //標準I/O輸出函數
20:usart.h **** int put_char(char c)
21:usart.h **** {
723 .LM86:
724 /* prologue: frame size=0 */
725 0194 CF93 push r28
726 /* prologue end (size=1) */
727 0196 C82F mov r28,r24
22:usart.h **** if(c == '\n')
729 .LM87:
730 0198 8A30 cpi r24,lo8(10)
731 019a 19F4 brne .L74
23:usart.h **** {
24:usart.h **** put_char('\r');
733 .LM88:
734 019c 8DE0 ldi r24,lo8(13)
735 019e 0E94 0000 call put_char
736 .L74:
25:usart.h **** }
26:usart.h **** UDR = c;
738 .LM89:
739 01a2 CCB9 out 44-0x20,r28
740 .L76:
27:usart.h **** while(!(UCSRA &(1<<UDRE)));
742 .LM90:
743 01a4 5D9B sbis 43-0x20,5
744 01a6 FECF rjmp .L76
28:usart.h **** UCSRA |= (1<<UDRE);
746 .LM91:
747 01a8 5D9A sbi 43-0x20,5
29:usart.h **** return 0;
30:usart.h **** }
749 .LM92:
750 01aa 80E0 ldi r24,lo8(0)
751 01ac 90E0 ldi r25,hi8(0)
752 /* epilogue: frame size=0 */
753 01ae CF91 pop r28
754 01b0 0895 ret
755 /* epilogue end (size=2) */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -