⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.lst

📁 一款电力行业使用的温湿度控制器源代码 湿度传感器采用HF3223 温度采用DS18B20 单片机采用mega8 编程采用winavr2007
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -