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

📄 avr_ds18b20.lss

📁 基于AVR单片机 MEGA16的温度采集源程序
💻 LSS
📖 第 1 页 / 共 3 页
字号:
/*******************************************************************/
void  Ok_Menu (void)
{ 
 2c6:	cf 93       	push	r28
    uchar  m;
    lcd_init();                //初始化LCD 
 2c8:	0e 94 00 01 	call	0x200
            
    lcd_pos(0);                //设置显示位置为第一行的第1个字符
 2cc:	80 e0       	ldi	r24, 0x00	; 0
 2ce:	0e 94 48 01 	call	0x290
     m = 0;
 2d2:	c0 e0       	ldi	r28, 0x00	; 0
    while(cdis1[m] != '\0')
     {                         //显示字符
       lcd_wdat(cdis1[m]);
       m++;
 2d4:	80 91 93 00 	lds	r24, 0x0093
 2d8:	88 23       	and	r24, r24
 2da:	71 f0       	breq	.+28     	; 0x2f8
 2dc:	ec 2f       	mov	r30, r28
 2de:	ff 27       	eor	r31, r31
 2e0:	ed 56       	subi	r30, 0x6D	; 109
 2e2:	ff 4f       	sbci	r31, 0xFF	; 255
 2e4:	80 81       	ld	r24, Z
 2e6:	0e 94 3a 01 	call	0x274
 2ea:	cf 5f       	subi	r28, 0xFF	; 255
 2ec:	ec 2f       	mov	r30, r28
 2ee:	ff 27       	eor	r31, r31
 2f0:	ed 56       	subi	r30, 0x6D	; 109
 2f2:	ff 4f       	sbci	r31, 0xFF	; 255
 2f4:	80 81       	ld	r24, Z
 2f6:	f0 cf       	rjmp	.-32     	; 0x2d8
     }

    lcd_pos(0x40);            //设置显示位置为第二行第1个字符
 2f8:	80 e4       	ldi	r24, 0x40	; 64
 2fa:	0e 94 48 01 	call	0x290
     m = 0;
 2fe:	c0 e0       	ldi	r28, 0x00	; 0
    while(cdis2[m] != '\0')
     {
       lcd_wdat(cdis2[m]);    //显示字符
       m++;
 300:	80 91 82 00 	lds	r24, 0x0082
 304:	88 23       	and	r24, r24
 306:	71 f0       	breq	.+28     	; 0x324
 308:	ec 2f       	mov	r30, r28
 30a:	ff 27       	eor	r31, r31
 30c:	ee 57       	subi	r30, 0x7E	; 126
 30e:	ff 4f       	sbci	r31, 0xFF	; 255
 310:	80 81       	ld	r24, Z
 312:	0e 94 3a 01 	call	0x274
 316:	cf 5f       	subi	r28, 0xFF	; 255
 318:	ec 2f       	mov	r30, r28
 31a:	ff 27       	eor	r31, r31
 31c:	ee 57       	subi	r30, 0x7E	; 126
 31e:	ff 4f       	sbci	r31, 0xFF	; 255
 320:	80 81       	ld	r24, Z
 322:	f0 cf       	rjmp	.-32     	; 0x304
     }

    writetab();               //自定义字符写入CGRAM
 324:	0e 94 4d 01 	call	0x29a
    delay_nms(5);
 328:	85 e0       	ldi	r24, 0x05	; 5
 32a:	90 e0       	ldi	r25, 0x00	; 0
 32c:	0e 94 47 00 	call	0x8e
    lcd_pos(0x4d);
 330:	8d e4       	ldi	r24, 0x4D	; 77
 332:	0e 94 48 01 	call	0x290
    lcd_wdat(0x00);           //显示自定义字符
 336:	80 e0       	ldi	r24, 0x00	; 0
 338:	0e 94 3a 01 	call	0x274
 33c:	cf 91       	pop	r28
 33e:	08 95       	ret

00000340 <Error_Menu>:
}

/*******************************************************************/
/*                                                                 */
/* DS18B20 ERROR 显示菜单                                          */
/*                                                                 */
/*******************************************************************/
void  Error_Menu (void)
{
 340:	cf 93       	push	r28
     uchar  m;
     lcd_init();                //初始化LCD 
 342:	0e 94 00 01 	call	0x200
	
  	 lcd_pos(0);                //设置显示位置为第一行的第1个字符
 346:	80 e0       	ldi	r24, 0x00	; 0
 348:	0e 94 48 01 	call	0x290
     m = 0;
 34c:	c0 e0       	ldi	r28, 0x00	; 0
     while(cdis3[m] != '\0')
     {                         //显示字符
       lcd_wdat(cdis3[m]);
       m++;
 34e:	80 91 71 00 	lds	r24, 0x0071
 352:	88 23       	and	r24, r24
 354:	71 f0       	breq	.+28     	; 0x372
 356:	ec 2f       	mov	r30, r28
 358:	ff 27       	eor	r31, r31
 35a:	ef 58       	subi	r30, 0x8F	; 143
 35c:	ff 4f       	sbci	r31, 0xFF	; 255
 35e:	80 81       	ld	r24, Z
 360:	0e 94 3a 01 	call	0x274
 364:	cf 5f       	subi	r28, 0xFF	; 255
 366:	ec 2f       	mov	r30, r28
 368:	ff 27       	eor	r31, r31
 36a:	ef 58       	subi	r30, 0x8F	; 143
 36c:	ff 4f       	sbci	r31, 0xFF	; 255
 36e:	80 81       	ld	r24, Z
 370:	f0 cf       	rjmp	.-32     	; 0x352
     }

     lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 372:	80 e4       	ldi	r24, 0x40	; 64
 374:	0e 94 48 01 	call	0x290
     m = 0;
 378:	c0 e0       	ldi	r28, 0x00	; 0
     while(cdis4[m] != '\0')
     {
       lcd_wdat(cdis4[m]);      //显示字符
       m++;
 37a:	80 91 60 00 	lds	r24, 0x0060
 37e:	88 23       	and	r24, r24
 380:	79 f0       	breq	.+30     	; 0x3a0
 382:	ec 2f       	mov	r30, r28
 384:	ff 27       	eor	r31, r31
 386:	e0 5a       	subi	r30, 0xA0	; 160
 388:	ff 4f       	sbci	r31, 0xFF	; 255
 38a:	80 81       	ld	r24, Z
 38c:	0e 94 3a 01 	call	0x274
 390:	cf 5f       	subi	r28, 0xFF	; 255
 392:	ec 2f       	mov	r30, r28
 394:	ff 27       	eor	r31, r31
 396:	e0 5a       	subi	r30, 0xA0	; 160
 398:	ff 4f       	sbci	r31, 0xFF	; 255
 39a:	80 81       	ld	r24, Z
 39c:	88 23       	and	r24, r24
 39e:	89 f7       	brne	.-30     	; 0x382
 3a0:	cf 91       	pop	r28
 3a2:	08 95       	ret

000003a4 <Disp_Temperature>:
     }
}

/*******************************************************************/
/*                                                                 */
/* 数据转换与温度显示                                              */
/*                                                                 */
/*******************************************************************/
void Disp_Temperature(void)
 {
    display[4]=temp_data[0]&0x0f;
 3a4:	90 91 c1 00 	lds	r25, 0x00C1
 3a8:	89 2f       	mov	r24, r25
 3aa:	8f 70       	andi	r24, 0x0F	; 15
    display[0]=ditab[display[4]]+0x30;     //查表得小数位的值
 3ac:	e8 2f       	mov	r30, r24
 3ae:	ff 27       	eor	r31, r31
 3b0:	e4 55       	subi	r30, 0x54	; 84
 3b2:	ff 4f       	sbci	r31, 0xFF	; 255
 3b4:	80 81       	ld	r24, Z
 3b6:	80 5d       	subi	r24, 0xD0	; 208
 3b8:	80 93 bc 00 	sts	0x00BC, r24
  
    display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
 3bc:	29 2f       	mov	r18, r25
 3be:	33 27       	eor	r19, r19
 3c0:	44 e0       	ldi	r20, 0x04	; 4
 3c2:	36 95       	lsr	r19
 3c4:	27 95       	ror	r18
 3c6:	4a 95       	dec	r20
 3c8:	e1 f7       	brne	.-8      	; 0x3c2
 3ca:	80 91 c2 00 	lds	r24, 0x00C2
 3ce:	99 27       	eor	r25, r25
 3d0:	8f 70       	andi	r24, 0x0F	; 15
 3d2:	90 70       	andi	r25, 0x00	; 0
 3d4:	34 e0       	ldi	r19, 0x04	; 4
 3d6:	88 0f       	add	r24, r24
 3d8:	99 1f       	adc	r25, r25
 3da:	3a 95       	dec	r19
 3dc:	e1 f7       	brne	.-8      	; 0x3d6
 3de:	28 2b       	or	r18, r24
 3e0:	20 93 c0 00 	sts	0x00C0, r18
    display[3]=display[4]/100+0x30;
 3e4:	82 2f       	mov	r24, r18
 3e6:	64 e6       	ldi	r22, 0x64	; 100
 3e8:	0e 94 4e 02 	call	0x49c
 3ec:	38 2f       	mov	r19, r24
 3ee:	30 5d       	subi	r19, 0xD0	; 208
 3f0:	30 93 bf 00 	sts	0x00BF, r19
    display[1]=display[4]%100;
 3f4:	82 2f       	mov	r24, r18
 3f6:	0e 94 4e 02 	call	0x49c
 3fa:	29 2f       	mov	r18, r25
    display[2]=display[1]/10+0x30;
 3fc:	89 2f       	mov	r24, r25
 3fe:	6a e0       	ldi	r22, 0x0A	; 10
 400:	0e 94 4e 02 	call	0x49c
 404:	48 2f       	mov	r20, r24
 406:	40 5d       	subi	r20, 0xD0	; 208
 408:	40 93 be 00 	sts	0x00BE, r20
    display[1]=display[1]%10+0x30;
 40c:	82 2f       	mov	r24, r18
 40e:	0e 94 4e 02 	call	0x49c
 412:	89 2f       	mov	r24, r25
 414:	80 5d       	subi	r24, 0xD0	; 208
 416:	80 93 bd 00 	sts	0x00BD, r24

    if(display[3]==0x30)        //高位为0,不显示
 41a:	30 33       	cpi	r19, 0x30	; 48
 41c:	39 f4       	brne	.+14     	; 0x42c
     { 
       display[3]=0x20;              
 41e:	80 e2       	ldi	r24, 0x20	; 32
 420:	80 93 bf 00 	sts	0x00BF, r24
       if(display[2]==0x30)      //次高位为0,不显示
 424:	40 33       	cpi	r20, 0x30	; 48
 426:	11 f4       	brne	.+4      	; 0x42c
       display[2]=0x20;
 428:	80 93 be 00 	sts	0x00BE, r24
     }

    lcd_pos(0x48);             
 42c:	88 e4       	ldi	r24, 0x48	; 72
 42e:	0e 94 48 01 	call	0x290
    lcd_wdat(display[3]);        //百位数显示 
 432:	80 91 bf 00 	lds	r24, 0x00BF
 436:	0e 94 3a 01 	call	0x274
    lcd_pos(0x49);             
 43a:	89 e4       	ldi	r24, 0x49	; 73
 43c:	0e 94 48 01 	call	0x290
    lcd_wdat(display[2]);        //十位数显示 
 440:	80 91 be 00 	lds	r24, 0x00BE
 444:	0e 94 3a 01 	call	0x274
	lcd_pos(0x4a);             
 448:	8a e4       	ldi	r24, 0x4A	; 74
 44a:	0e 94 48 01 	call	0x290
    lcd_wdat(display[1]);        //个位数显示 
 44e:	80 91 bd 00 	lds	r24, 0x00BD
 452:	0e 94 3a 01 	call	0x274
	lcd_pos(0x4c);             
 456:	8c e4       	ldi	r24, 0x4C	; 76
 458:	0e 94 48 01 	call	0x290
    lcd_wdat(display[0]);        //小数位数显示 
 45c:	80 91 bc 00 	lds	r24, 0x00BC
 460:	0e 94 3a 01 	call	0x274
 464:	08 95       	ret

00000466 <main>:
}	 

/********************************************************/
/*                                                      */
/* 主函数                                               */
/*                                                      */
/********************************************************/
int  main(void)
 {     
 466:	cf e5       	ldi	r28, 0x5F	; 95
 468:	d4 e0       	ldi	r29, 0x04	; 4
 46a:	de bf       	out	0x3e, r29	; 62
 46c:	cd bf       	out	0x3d, r28	; 61
	init_io();
 46e:	0e 94 6e 00 	call	0xdc
	
	while(1)
     {
	   Ok_Menu ();
 472:	0e 94 63 01 	call	0x2c6

	   do
	    {
          Read_Temperature();
 476:	0e 94 c6 00 	call	0x18c
	      Disp_Temperature();   
 47a:	0e 94 d2 01 	call	0x3a4
        }
 47e:	80 91 c3 00 	lds	r24, 0x00C3
 482:	88 23       	and	r24, r24
 484:	c1 f3       	breq	.-16     	; 0x476
       while(!presence) ;

       Error_Menu ();
 486:	0e 94 a0 01 	call	0x340

	   do
	   {  
	     Init_DS18B20();
 48a:	0e 94 78 00 	call	0xf0
	     beep();
 48e:	0e 94 57 00 	call	0xae
       }
 492:	80 91 c3 00 	lds	r24, 0x00C3
 496:	88 23       	and	r24, r24
 498:	c1 f7       	brne	.-16     	; 0x48a
 49a:	eb cf       	rjmp	.-42     	; 0x472

0000049c <__udivmodqi4>:
 49c:	99 1b       	sub	r25, r25
 49e:	79 e0       	ldi	r23, 0x09	; 9
 4a0:	04 c0       	rjmp	.+8      	; 0x4aa

000004a2 <__udivmodqi4_loop>:
 4a2:	99 1f       	adc	r25, r25
 4a4:	96 17       	cp	r25, r22
 4a6:	08 f0       	brcs	.+2      	; 0x4aa
 4a8:	96 1b       	sub	r25, r22

000004aa <__udivmodqi4_ep>:
 4aa:	88 1f       	adc	r24, r24
 4ac:	7a 95       	dec	r23
 4ae:	c9 f7       	brne	.-14     	; 0x4a2
 4b0:	80 95       	com	r24
 4b2:	08 95       	ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -