?? ds18b20.lst
字號:
168:drive/ds18b20.c **** else
169:drive/ds18b20.c **** {
170:drive/ds18b20.c **** convert_is_succ = FALSE;
603 .LM67:
604 00ec 1092 0000 sts convert_is_succ,__zero_reg__
171:drive/ds18b20.c **** return FALSE ;
606 .LM68:
607 00f0 80E0 ldi r24,lo8(0)
608 00f2 90E0 ldi r25,hi8(0)
609 .L36:
610 /* epilogue: frame size=0 */
611 00f4 1F91 pop r17
612 00f6 0F91 pop r16
613 00f8 0895 ret
614 /* epilogue end (size=3) */
615 /* function convert_T size 27 (22) */
623 .Lscope5:
627 .global CRC8_Dallas
629 CRC8_Dallas:
172:drive/ds18b20.c **** }
173:drive/ds18b20.c **** }
174:drive/ds18b20.c ****
175:drive/ds18b20.c **** /**************************************************************************************************
176:drive/ds18b20.c **** ** 函數名稱: CRC8_Dallas
177:drive/ds18b20.c **** ** 功能描述: DS18B20的CRC8校驗
178:drive/ds18b20.c **** ** 輸 入: 需校驗的值
179:drive/ds18b20.c **** ** 輸 出: 單字節CRC結果
180:drive/ds18b20.c **** ** 全局變量: 無
181:drive/ds18b20.c **** ** 調用模塊:
182:drive/ds18b20.c **** ***************************************************************************************************
183:drive/ds18b20.c **** u08 CRC8_Dallas(u08 Data,u08 CRC_Dallas)
184:drive/ds18b20.c **** {
631 .LM69:
632 /* prologue: frame size=0 */
633 /* prologue end (size=0) */
185:drive/ds18b20.c **** u08 i;
186:drive/ds18b20.c **** u08 flag ;
187:drive/ds18b20.c **** CRC_Dallas^=Data;
635 .LM70:
636 00fa 6827 eor r22,r24
637 00fc 2CE8 ldi r18,lo8(-116)
638 00fe 97E0 ldi r25,lo8(7)
639 .L51:
188:drive/ds18b20.c **** for (i = 0; i < 8; i++)
189:drive/ds18b20.c **** {
190:drive/ds18b20.c **** flag = ( CRC_Dallas & (1<<0) );
641 .LM71:
642 0100 862F mov r24,r22
643 0102 8170 andi r24,lo8(1)
191:drive/ds18b20.c **** CRC_Dallas >>= 1;
645 .LM72:
646 0104 6695 lsr r22
192:drive/ds18b20.c **** if (flag) CRC_Dallas ^= 0x8c; // b10001100 es la palabra del CRC (x8 + x5 + x4 + 1)
648 .LM73:
649 0106 8111 cpse r24,__zero_reg__
650 0108 6227 eor r22,r18
651 .L49:
653 .LM74:
654 010a 9150 subi r25,lo8(-(-1))
655 010c 97FF sbrs r25,7
656 010e F8CF rjmp .L51
193:drive/ds18b20.c **** // 7..43..0 junto con el 1 aplicado a f.
194:drive/ds18b20.c **** }
195:drive/ds18b20.c **** return CRC_Dallas;
196:drive/ds18b20.c **** }
658 .LM75:
659 0110 862F mov r24,r22
660 0112 9927 clr r25
661 /* epilogue: frame size=0 */
662 0114 0895 ret
663 /* epilogue end (size=1) */
664 /* function CRC8_Dallas size 15 (14) */
670 .Lscope6:
672 .global read_T
674 read_T:
197:drive/ds18b20.c ****
198:drive/ds18b20.c **** /*-------------------------------------------------------
199:drive/ds18b20.c **** * 讀取轉換后的溫度值
200:drive/ds18b20.c **** * 我假定DS18B20一定是正確的,所以沒有返回有關狀態。當你故意
201:drive/ds18b20.c **** * 把DS18B20從電路中拔下而能讓程序告訴你出錯時,你可以自己修
202:drive/ds18b20.c **** * 改這段代碼!
203:drive/ds18b20.c **** */
204:drive/ds18b20.c **** u08 read_T(void)
205:drive/ds18b20.c **** {
676 .LM76:
677 /* prologue: frame size=0 */
678 0116 FF92 push r15
679 0118 0F93 push r16
680 011a 1F93 push r17
681 011c CF93 push r28
682 011e DF93 push r29
683 /* prologue end (size=5) */
206:drive/ds18b20.c **** u16 value = 0xee01;
685 .LM77:
686 0120 C1E0 ldi r28,lo8(-4607)
687 0122 DEEE ldi r29,hi8(-4607)
207:drive/ds18b20.c **** u08 valueL;
208:drive/ds18b20.c **** u08 valueH;
209:drive/ds18b20.c **** u08 crc8;
210:drive/ds18b20.c **** u08 Cnt = 0;
689 .LM78:
690 0124 FF24 clr r15
211:drive/ds18b20.c ****
212:drive/ds18b20.c **** if(convert_is_succ == FALSE)
692 .LM79:
693 0126 8091 0000 lds r24,convert_is_succ
694 012a 8823 tst r24
695 012c 09F4 brne .+2
696 012e 56C0 rjmp .L69
697 .L56:
698 .LBB22:
699 .LBB23:
701 .LM80:
702 0130 10E0 ldi r17,lo8(0)
704 .LM81:
705 0132 03C0 rjmp .L58
706 .L62:
708 .LM82:
709 0134 1F5F subi r17,lo8(-(1))
711 .LM83:
712 0136 1430 cpi r17,lo8(4)
713 0138 D0F5 brsh .L57
714 .L58:
715 013a 65DF rcall _ds18b20_reset
716 013c 8130 cpi r24,lo8(1)
717 013e D1F7 brne .L62
718 .LBE23:
719 .LBE22:
213:drive/ds18b20.c **** {
214:drive/ds18b20.c **** return FALSE;
215:drive/ds18b20.c **** }
216:drive/ds18b20.c ****
217:drive/ds18b20.c **** while(ds18b20_reset()==SUCC)
218:drive/ds18b20.c **** { // 如果復位成功
219:drive/ds18b20.c **** ds18b20_write(0xcc); // 跳過多器件識別
721 .LM84:
722 0140 8CEC ldi r24,lo8(-52)
723 0142 89DF rcall ds18b20_write
220:drive/ds18b20.c **** ds18b20_write(0xbe); // 讀暫存器
725 .LM85:
726 0144 8EEB ldi r24,lo8(-66)
727 0146 87DF rcall ds18b20_write
221:drive/ds18b20.c **** valueL = ds18b20_read(); // 低字節
729 .LM86:
730 0148 A2DF rcall ds18b20_read
731 014a 182F mov r17,r24
222:drive/ds18b20.c **** valueH = ds18b20_read(); // 高字節
733 .LM87:
734 014c A0DF rcall ds18b20_read
735 014e 082F mov r16,r24
223:drive/ds18b20.c **** value = ((uint16)valueH<<8) + valueL ;
737 .LM88:
738 0150 9927 clr r25
739 0152 D82F mov r29,r24
740 0154 CC27 clr r28
741 0156 C10F add r28,r17
742 0158 D11D adc r29,__zero_reg__
224:drive/ds18b20.c **** crc8=CRC8_Dallas( valueL,0 );
744 .LM89:
745 015a 60E0 ldi r22,lo8(0)
746 015c 812F mov r24,r17
747 015e CDDF rcall CRC8_Dallas
225:drive/ds18b20.c **** crc8=CRC8_Dallas( valueH,crc8 );
749 .LM90:
750 0160 682F mov r22,r24
751 0162 802F mov r24,r16
752 0164 CADF rcall CRC8_Dallas
753 0166 182F mov r17,r24
226:drive/ds18b20.c **** crc8=CRC8_Dallas( ds18b20_read(),crc8 );
755 .LM91:
756 0168 92DF rcall ds18b20_read
757 016a 612F mov r22,r17
758 016c C6DF rcall CRC8_Dallas
759 016e 182F mov r17,r24
227:drive/ds18b20.c **** crc8=CRC8_Dallas( ds18b20_read(),crc8 );
761 .LM92:
762 0170 8EDF rcall ds18b20_read
763 0172 612F mov r22,r17
764 0174 C2DF rcall CRC8_Dallas
765 0176 182F mov r17,r24
228:drive/ds18b20.c **** crc8=CRC8_Dallas( ds18b20_read(),crc8 );
767 .LM93:
768 0178 8ADF rcall ds18b20_read
769 017a 612F mov r22,r17
770 017c BEDF rcall CRC8_Dallas
771 017e 182F mov r17,r24
229:drive/ds18b20.c **** crc8=CRC8_Dallas( ds18b20_read(),crc8 );
773 .LM94:
774 0180 86DF rcall ds18b20_read
775 0182 612F mov r22,r17
776 0184 BADF rcall CRC8_Dallas
777 0186 182F mov r17,r24
230:drive/ds18b20.c **** crc8=CRC8_Dallas( ds18b20_read(),crc8 );
779 .LM95:
780 0188 82DF rcall ds18b20_read
781 018a 612F mov r22,r17
782 018c B6DF rcall CRC8_Dallas
783 018e 182F mov r17,r24
231:drive/ds18b20.c **** crc8=CRC8_Dallas( ds18b20_read(),crc8 );
785 .LM96:
786 0190 7EDF rcall ds18b20_read
787 0192 612F mov r22,r17
788 0194 B2DF rcall CRC8_Dallas
789 0196 182F mov r17,r24
232:drive/ds18b20.c **** crc8=CRC8_Dallas( ds18b20_read(),crc8 );
791 .LM97:
792 0198 7ADF rcall ds18b20_read
793 019a 612F mov r22,r17
794 019c AEDF rcall CRC8_Dallas
233:drive/ds18b20.c ****
234:drive/ds18b20.c **** if(crc8 == 0)
796 .LM98:
797 019e 8823 tst r24
798 01a0 31F0 breq .L57
235:drive/ds18b20.c **** {
236:drive/ds18b20.c **** break;
237:drive/ds18b20.c **** }
238:drive/ds18b20.c **** else
239:drive/ds18b20.c **** {
240:drive/ds18b20.c **** Cnt++ ;
800 .LM99:
801 01a2 F394 inc r15
241:drive/ds18b20.c **** if(Cnt > 3)
803 .LM100:
804 01a4 83E0 ldi r24,lo8(3)
805 01a6 8F15 cp r24,r15
806 01a8 18F6 brsh .L56
242:drive/ds18b20.c **** {
243:drive/ds18b20.c **** value = 0xee02 ;
808 .LM101:
809 01aa C2E0 ldi r28,lo8(-4606)
810 01ac DEEE ldi r29,hi8(-4606)
811 .L57:
244:drive/ds18b20.c **** break;
245:drive/ds18b20.c **** }
246:drive/ds18b20.c **** }
247:drive/ds18b20.c **** }
248:drive/ds18b20.c ****
249:drive/ds18b20.c ****
250:drive/ds18b20.c **** Temperature = value *10/16;
813 .LM102:
814 01ae CE01 movw r24,r28
815 01b0 33E0 ldi r19,3
816 01b2 880F 1: lsl r24
817 01b4 991F rol r25
818 01b6 3A95 dec r19
819 01b8 E1F7 brne 1b
820 01ba 8C0F add r24,r28
821 01bc 9D1F adc r25,r29
822 01be 8C0F add r24,r28
823 01c0 9D1F adc r25,r29
824 01c2 24E0 ldi r18,4
825 01c4 9695 1: lsr r25
826 01c6 8795 ror r24
827 01c8 2A95 dec r18
828 01ca E1F7 brne 1b
829 01cc 9093 0000 sts (Temperature)+1,r25
830 01d0 8093 0000 sts Temperature,r24
251:drive/ds18b20.c ****
252:drive/ds18b20.c **** if( (value & 0xff00) == 0xee00 )
832 .LM103:
833 01d4 C070 andi r28,lo8(-256)
834 01d6 C050 subi r28,lo8(-4608)
835 01d8 DE4E sbci r29,hi8(-4608)
836 01da 19F4 brne .L66
837 .L69:
253:drive/ds18b20.c **** {
254:drive/ds18b20.c **** return FALSE ;
839 .LM104:
840 01dc 80E0 ldi r24,lo8(0)
841 01de 90E0 ldi r25,hi8(0)
842 01e0 02C0 rjmp .L54
843 .L66:
255:drive/ds18b20.c **** }
256:drive/ds18b20.c **** else
257:drive/ds18b20.c **** {
258:drive/ds18b20.c **** return TRUE ;
845 .LM105:
846 01e2 81E0 ldi r24,lo8(1)
847 01e4 90E0 ldi r25,hi8(1)
848 .L54:
849 /* epilogue: frame size=0 */
850 01e6 DF91 pop r29
851 01e8 CF91 pop r28
852 01ea 1F91 pop r17
853 01ec 0F91 pop r16
854 01ee FF90 pop r15
855 01f0 0895 ret
856 /* epilogue end (size=6) */
857 /* function read_T size 112 (101) */
872 .Lscope7:
874 .text
876 Letext:
877 /* File "drive/ds18b20.c": code 277 = 0x0115 ( 253), prologues 8, epilogues 16 */
DEFINED SYMBOLS
*ABS*:00000000 ds18b20.c
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:3 *ABS*:0000003f __SREG__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:4 *ABS*:0000003e __SP_H__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:5 *ABS*:0000003d __SP_L__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:6 *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:7 *ABS*:00000001 __zero_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:129 .bss:00000000 convert_is_succ
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:135 .text:00000000 ds18b20_config
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:155 .text:00000006 _ds18b20_reset
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:268 .text:00000036 ds18b20_reset
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:316 .text:00000056 ds18b20_write
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:434 .text:0000008e ds18b20_read
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:553 .text:000000c4 convert_T
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:629 .text:000000fa CRC8_Dallas
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:674 .text:00000116 read_T
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccoxaaaa.s:876 .text:000001f2 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
Temperature
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -