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

📄 main.lss

📁 AVR source code of some projects
💻 LSS
📖 第 1 页 / 共 2 页
字号:
0000011c <WriteOneChar>:

/**********************************************************/
/*                                                        */
/* 写一个字节                                             */
/*                                                        */
/**********************************************************/
void WriteOneChar(unsigned char dat)
{
 11c:	1f 93       	push	r17
 11e:	cf 93       	push	r28
 120:	c8 2f       	mov	r28, r24
  unsigned char i = 0;
  
  for (i = 8; i > 0; i--)
 122:	18 e0       	ldi	r17, 0x08	; 8
  {
    PORTD&=~_BV(DQ);
 124:	93 98       	cbi	0x12, 3	; 18
 
    if(dat&0x01)
 126:	c0 ff       	sbrs	r28, 0
 128:	02 c0       	rjmp	.+4      	; 0x12e
     PORTD|=_BV(DQ);      //写"1" 
 12a:	93 9a       	sbi	0x12, 3	; 18
 12c:	01 c0       	rjmp	.+2      	; 0x130
	else     
	 PORTD&=~_BV(DQ);     //写"0"
 12e:	93 98       	cbi	0x12, 3	; 18

    Delay(70);
 130:	86 e4       	ldi	r24, 0x46	; 70
 132:	90 e0       	ldi	r25, 0x00	; 0
 134:	9c df       	rcall	.-200    	; 0x6e
    PORTD|=_BV(DQ);        
 136:	93 9a       	sbi	0x12, 3	; 18
    dat>>=1;
 138:	c6 95       	lsr	r28
 13a:	11 50       	subi	r17, 0x01	; 1
 13c:	99 f7       	brne	.-26     	; 0x124
 13e:	cf 91       	pop	r28
 140:	1f 91       	pop	r17
 142:	08 95       	ret

00000144 <Read_Temperature>:
  }
}

/*********************************************************/
/*                                                       */
/* 读取温度                                              */
/*                                                       */
/*********************************************************/
void Read_Temperature(void)
{
 144:	cf 93       	push	r28
   Init_DS18B20();
 146:	b6 df       	rcall	.-148    	; 0xb4
   if(presence==1)
 148:	c0 91 84 00 	lds	r28, 0x0084
 14c:	c1 30       	cpi	r28, 0x01	; 1
 14e:	21 f4       	brne	.+8      	; 0x158
   { beep();flash=1;}
 150:	93 df       	rcall	.-218    	; 0x78
 152:	c0 93 83 00 	sts	0x0083, r28
 156:	11 c0       	rjmp	.+34     	; 0x17a
   else        
   {
     flash=0;
 158:	10 92 83 00 	sts	0x0083, r1
     WriteOneChar(0xCC);  // 跳过读序号列号的操作
 15c:	8c ec       	ldi	r24, 0xCC	; 204
 15e:	de df       	rcall	.-68     	; 0x11c
     WriteOneChar(0x44);  // 启动温度转换
 160:	84 e4       	ldi	r24, 0x44	; 68
 162:	dc df       	rcall	.-72     	; 0x11c

     Init_DS18B20();
 164:	a7 df       	rcall	.-178    	; 0xb4
     WriteOneChar(0xCC);  //跳过读序号列号的操作
 166:	8c ec       	ldi	r24, 0xCC	; 204
 168:	d9 df       	rcall	.-78     	; 0x11c
     WriteOneChar(0xBE);  //读取温度寄存器
 16a:	8e eb       	ldi	r24, 0xBE	; 190
 16c:	d7 df       	rcall	.-82     	; 0x11c
     
     temp_data[0] = ReadOneChar();   //温度低8位
 16e:	c0 df       	rcall	.-128    	; 0xf0
 170:	80 93 81 00 	sts	0x0081, r24
     temp_data[1] = ReadOneChar();   //温度高8位
 174:	bd df       	rcall	.-134    	; 0xf0
 176:	80 93 82 00 	sts	0x0082, r24
 17a:	cf 91       	pop	r28
 17c:	08 95       	ret

0000017e <Disp_Temperature>:
    }
}

/*********************************************************/
/*                                                       */
/* 数据处理与温度显示                                    */
/*                                                       */
/*********************************************************/
void Disp_Temperature(void)
{
  display[4]=temp_data[0]&0x0f;
 17e:	90 91 81 00 	lds	r25, 0x0081
 182:	89 2f       	mov	r24, r25
 184:	8f 70       	andi	r24, 0x0F	; 15
  display[0]=ditab[display[4]];     //查表得小数位的值
 186:	e8 2f       	mov	r30, r24
 188:	ff 27       	eor	r31, r31
 18a:	e0 5a       	subi	r30, 0xA0	; 160
 18c:	ff 4f       	sbci	r31, 0xFF	; 255
 18e:	80 81       	ld	r24, Z
 190:	80 93 7c 00 	sts	0x007C, r24
  
  display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
 194:	29 2f       	mov	r18, r25
 196:	33 27       	eor	r19, r19
 198:	44 e0       	ldi	r20, 0x04	; 4
 19a:	36 95       	lsr	r19
 19c:	27 95       	ror	r18
 19e:	4a 95       	dec	r20
 1a0:	e1 f7       	brne	.-8      	; 0x19a
 1a2:	80 91 82 00 	lds	r24, 0x0082
 1a6:	99 27       	eor	r25, r25
 1a8:	8f 70       	andi	r24, 0x0F	; 15
 1aa:	90 70       	andi	r25, 0x00	; 0
 1ac:	34 e0       	ldi	r19, 0x04	; 4
 1ae:	88 0f       	add	r24, r24
 1b0:	99 1f       	adc	r25, r25
 1b2:	3a 95       	dec	r19
 1b4:	e1 f7       	brne	.-8      	; 0x1ae
 1b6:	28 2b       	or	r18, r24
 1b8:	20 93 80 00 	sts	0x0080, r18
  display[3]=display[4]/100;
 1bc:	82 2f       	mov	r24, r18
 1be:	64 e6       	ldi	r22, 0x64	; 100
 1c0:	6e d0       	rcall	.+220    	; 0x29e
 1c2:	38 2f       	mov	r19, r24
 1c4:	80 93 7f 00 	sts	0x007F, r24
  display[1]=display[4]%100;
 1c8:	82 2f       	mov	r24, r18
 1ca:	69 d0       	rcall	.+210    	; 0x29e
 1cc:	29 2f       	mov	r18, r25
  display[2]=display[1]/10;
 1ce:	4a e0       	ldi	r20, 0x0A	; 10
 1d0:	89 2f       	mov	r24, r25
 1d2:	64 2f       	mov	r22, r20
 1d4:	64 d0       	rcall	.+200    	; 0x29e
 1d6:	58 2f       	mov	r21, r24
 1d8:	80 93 7e 00 	sts	0x007E, r24
  display[1]=display[1]%10;
 1dc:	82 2f       	mov	r24, r18
 1de:	5f d0       	rcall	.+190    	; 0x29e
 1e0:	90 93 7d 00 	sts	0x007D, r25

  if(!display[3])        //高位为0,不显示
 1e4:	33 23       	and	r19, r19
 1e6:	31 f4       	brne	.+12     	; 0x1f4
  { 
    display[3]=0x0a;              
 1e8:	40 93 7f 00 	sts	0x007F, r20
    if(!display[2])      //次高位为0,不显示
 1ec:	55 23       	and	r21, r21
 1ee:	11 f4       	brne	.+4      	; 0x1f4
     display[2]=0x0a;
 1f0:	40 93 7e 00 	sts	0x007E, r20
  }

   PORTA = 0xc6;                 //显示 C
 1f4:	86 ec       	ldi	r24, 0xC6	; 198
 1f6:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0x7f;
 1f8:	8f e7       	ldi	r24, 0x7F	; 127
 1fa:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 1fc:	81 e0       	ldi	r24, 0x01	; 1
 1fe:	90 e0       	ldi	r25, 0x00	; 0
 200:	2b df       	rcall	.-426    	; 0x58

   PORTA = 0x9c;                 //显示 °  
 202:	8c e9       	ldi	r24, 0x9C	; 156
 204:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xbf;
 206:	8f eb       	ldi	r24, 0xBF	; 191
 208:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 20a:	81 e0       	ldi	r24, 0x01	; 1
 20c:	90 e0       	ldi	r25, 0x00	; 0
 20e:	24 df       	rcall	.-440    	; 0x58

   PORTA =LEDData[display[0]];  //显示小数位
 210:	80 91 7c 00 	lds	r24, 0x007C
 214:	e8 2f       	mov	r30, r24
 216:	ff 27       	eor	r31, r31
 218:	e0 59       	subi	r30, 0x90	; 144
 21a:	ff 4f       	sbci	r31, 0xFF	; 255
 21c:	80 81       	ld	r24, Z
 21e:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xdf;
 220:	8f ed       	ldi	r24, 0xDF	; 223
 222:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 224:	81 e0       	ldi	r24, 0x01	; 1
 226:	90 e0       	ldi	r25, 0x00	; 0
 228:	17 df       	rcall	.-466    	; 0x58

   PORTA =LEDData[display[1]];  //显示个位
 22a:	80 91 7d 00 	lds	r24, 0x007D
 22e:	e8 2f       	mov	r30, r24
 230:	ff 27       	eor	r31, r31
 232:	e0 59       	subi	r30, 0x90	; 144
 234:	ff 4f       	sbci	r31, 0xFF	; 255
 236:	80 81       	ld	r24, Z
 238:	8b bb       	out	0x1b, r24	; 27
   PORTA &=~_BV(PA7);           //显示小数点
 23a:	df 98       	cbi	0x1b, 7	; 27
   PORTC = 0xef;
 23c:	8f ee       	ldi	r24, 0xEF	; 239
 23e:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 240:	81 e0       	ldi	r24, 0x01	; 1
 242:	90 e0       	ldi	r25, 0x00	; 0
 244:	09 df       	rcall	.-494    	; 0x58

   PORTA =LEDData[display[2]];  //显示十位
 246:	80 91 7e 00 	lds	r24, 0x007E
 24a:	e8 2f       	mov	r30, r24
 24c:	ff 27       	eor	r31, r31
 24e:	e0 59       	subi	r30, 0x90	; 144
 250:	ff 4f       	sbci	r31, 0xFF	; 255
 252:	80 81       	ld	r24, Z
 254:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xf7;
 256:	87 ef       	ldi	r24, 0xF7	; 247
 258:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 25a:	81 e0       	ldi	r24, 0x01	; 1
 25c:	90 e0       	ldi	r25, 0x00	; 0
 25e:	fc de       	rcall	.-520    	; 0x58

   PORTA =LEDData[display[3]];  //显示十位
 260:	80 91 7f 00 	lds	r24, 0x007F
 264:	e8 2f       	mov	r30, r24
 266:	ff 27       	eor	r31, r31
 268:	e0 59       	subi	r30, 0x90	; 144
 26a:	ff 4f       	sbci	r31, 0xFF	; 255
 26c:	80 81       	ld	r24, Z
 26e:	8b bb       	out	0x1b, r24	; 27
   PORTC = 0xfb;
 270:	8b ef       	ldi	r24, 0xFB	; 251
 272:	85 bb       	out	0x15, r24	; 21
   delay_nms(1);
 274:	81 e0       	ldi	r24, 0x01	; 1
 276:	90 e0       	ldi	r25, 0x00	; 0
 278:	ef de       	rcall	.-546    	; 0x58

   PORTC = 0xff;                //关闭显示
 27a:	8f ef       	ldi	r24, 0xFF	; 255
 27c:	85 bb       	out	0x15, r24	; 21
 27e:	08 95       	ret

00000280 <main>:
}

/********************************************************/
/*                                                      */
/* 主函数                                               */
/*                                                      */
/********************************************************/

int main(void)
{      
 280:	cf e5       	ldi	r28, 0x5F	; 95
 282:	d2 e0       	ldi	r29, 0x02	; 2
 284:	de bf       	out	0x3e, r29	; 62
 286:	cd bf       	out	0x3d, r28	; 61
   init_io();                //初始化端口
 288:	0b df       	rcall	.-490    	; 0xa0
     
   while(1)
    {
       Read_Temperature();   //读取温度
 28a:	5c df       	rcall	.-328    	; 0x144
	   if(flash)
 28c:	80 91 83 00 	lds	r24, 0x0083
 290:	88 23       	and	r24, r24
 292:	19 f0       	breq	.+6      	; 0x29a
	   PORTC=0xff;           //DS18B20不正常关闭显示
 294:	8f ef       	ldi	r24, 0xFF	; 255
 296:	85 bb       	out	0x15, r24	; 21
 298:	f8 cf       	rjmp	.-16     	; 0x28a
	   else
       Disp_Temperature();   //显示温度      
 29a:	71 df       	rcall	.-286    	; 0x17e
 29c:	f6 cf       	rjmp	.-20     	; 0x28a

0000029e <__udivmodqi4>:
 29e:	99 1b       	sub	r25, r25
 2a0:	79 e0       	ldi	r23, 0x09	; 9
 2a2:	04 c0       	rjmp	.+8      	; 0x2ac

000002a4 <__udivmodqi4_loop>:
 2a4:	99 1f       	adc	r25, r25
 2a6:	96 17       	cp	r25, r22
 2a8:	08 f0       	brcs	.+2      	; 0x2ac
 2aa:	96 1b       	sub	r25, r22

000002ac <__udivmodqi4_ep>:
 2ac:	88 1f       	adc	r24, r24
 2ae:	7a 95       	dec	r23
 2b0:	c9 f7       	brne	.-14     	; 0x2a4
 2b2:	80 95       	com	r24
 2b4:	08 95       	ret

⌨️ 快捷键说明

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