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

📄 main.lst

📁 avr单片机操作温度传感器18B20的软件含仿真。
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -