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

📄 main.lss

📁 我学习AVR的代码例子
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     1ee:	88 b9       	out	0x08, r24	; 8
   ADCSRA=(1<<ADEN) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS0);//32分频
     1f0:	8d e8       	ldi	r24, 0x8D	; 141
     1f2:	86 b9       	out	0x06, r24	; 6
     1f4:	08 95       	ret

000001f6 <WDT_init>:
 }
void WDT_init(void)
 {
   WDR();
     1f6:	a8 95       	wdr
   WDTCR=0x0e;
     1f8:	8e e0       	ldi	r24, 0x0E	; 14
     1fa:	81 bd       	out	0x21, r24	; 33
     1fc:	08 95       	ret

000001fe <WDT_off>:
 }/**/
void WDT_off(void)
 {
   WDTCR = (1<<WDTOE) | (1<<WDE);
     1fe:	88 e1       	ldi	r24, 0x18	; 24
     200:	81 bd       	out	0x21, r24	; 33
   WDTCR = 0x00;
     202:	11 bc       	out	0x21, r1	; 33
     204:	08 95       	ret

00000206 <I2C_init>:
 }
void I2C_init(void)
 {
   TWBR=2;
     206:	82 e0       	ldi	r24, 0x02	; 2
     208:	80 b9       	out	0x00, r24	; 0
   TWSR=00;
     20a:	11 b8       	out	0x01, r1	; 1
     20c:	08 95       	ret

0000020e <delay_us>:
 }
void delay_us(int time)//微秒级延时程序
 {     
   do
	 {
	   time--;
     20e:	01 97       	sbiw	r24, 0x01	; 1
	 }	
     210:	82 30       	cpi	r24, 0x02	; 2
     212:	91 05       	cpc	r25, r1
     214:	e4 f7       	brge	.-8      	; 0x20e
     216:	08 95       	ret

00000218 <delay_ms>:
   while (time>1);
 }	   
void delay_ms(unsigned int time)//毫秒级延时程序
 {
     218:	cf 93       	push	r28
     21a:	df 93       	push	r29
     21c:	ec 01       	movw	r28, r24
   while(time!=0)
	 {		
	   delay_us(1000);
	   time--;
     21e:	89 2b       	or	r24, r25
     220:	31 f0       	breq	.+12     	; 0x22e
     222:	88 ee       	ldi	r24, 0xE8	; 232
     224:	93 e0       	ldi	r25, 0x03	; 3
     226:	0e 94 07 01 	call	0x20e
     22a:	21 97       	sbiw	r28, 0x01	; 1
     22c:	d1 f7       	brne	.-12     	; 0x222
     22e:	df 91       	pop	r29
     230:	cf 91       	pop	r28
     232:	08 95       	ret

00000234 <i2c_Write>:
	 }
 }
unsigned char i2c_Write(unsigned char Wdata,unsigned char RomAddress) 
 {
     234:	28 2f       	mov	r18, r24
   Start();//I2C启动
     236:	84 ea       	ldi	r24, 0xA4	; 164
     238:	86 bf       	out	0x36, r24	; 54
   Wait();
     23a:	06 b6       	in	r0, 0x36	; 54
     23c:	07 fe       	sbrs	r0, 7
     23e:	fd cf       	rjmp	.-6      	; 0x23a
   if(TestAck()!=START) return 1;//ACK
     240:	81 b1       	in	r24, 0x01	; 1
     242:	99 27       	eor	r25, r25
     244:	88 7f       	andi	r24, 0xF8	; 248
     246:	90 70       	andi	r25, 0x00	; 0
     248:	08 97       	sbiw	r24, 0x08	; 8
     24a:	19 f0       	breq	.+6      	; 0x252
     24c:	81 e0       	ldi	r24, 0x01	; 1
     24e:	90 e0       	ldi	r25, 0x00	; 0
     250:	08 95       	ret
   Write8Bit(wr_device_add);//写I2C从器件地址和写方式
     252:	80 ed       	ldi	r24, 0xD0	; 208
     254:	83 b9       	out	0x03, r24	; 3
     256:	84 e8       	ldi	r24, 0x84	; 132
     258:	86 bf       	out	0x36, r24	; 54
   Wait();
     25a:	06 b6       	in	r0, 0x36	; 54
     25c:	07 fe       	sbrs	r0, 7
     25e:	fd cf       	rjmp	.-6      	; 0x25a
   if(TestAck()!=MT_SLA_ACK) return 1;//ACK
     260:	81 b1       	in	r24, 0x01	; 1
     262:	99 27       	eor	r25, r25
     264:	88 7f       	andi	r24, 0xF8	; 248
     266:	90 70       	andi	r25, 0x00	; 0
     268:	48 97       	sbiw	r24, 0x18	; 24
     26a:	19 f0       	breq	.+6      	; 0x272
     26c:	81 e0       	ldi	r24, 0x01	; 1
     26e:	90 e0       	ldi	r25, 0x00	; 0
     270:	08 95       	ret
   Write8Bit(RomAddress);//写24C02的ROM地址
     272:	63 b9       	out	0x03, r22	; 3
     274:	84 e8       	ldi	r24, 0x84	; 132
     276:	86 bf       	out	0x36, r24	; 54
   Wait();
     278:	06 b6       	in	r0, 0x36	; 54
     27a:	07 fe       	sbrs	r0, 7
     27c:	fd cf       	rjmp	.-6      	; 0x278
   if(TestAck()!=MT_DATA_ACK) return 1;//ACK
     27e:	81 b1       	in	r24, 0x01	; 1
     280:	99 27       	eor	r25, r25
     282:	88 7f       	andi	r24, 0xF8	; 248
     284:	90 70       	andi	r25, 0x00	; 0
     286:	88 97       	sbiw	r24, 0x28	; 40
     288:	19 f0       	breq	.+6      	; 0x290
     28a:	81 e0       	ldi	r24, 0x01	; 1
     28c:	90 e0       	ldi	r25, 0x00	; 0
     28e:	08 95       	ret
   Write8Bit(Wdata);//写数据到24C02的ROM
     290:	23 b9       	out	0x03, r18	; 3
     292:	84 e8       	ldi	r24, 0x84	; 132
     294:	86 bf       	out	0x36, r24	; 54
   Wait();
     296:	06 b6       	in	r0, 0x36	; 54
     298:	07 fe       	sbrs	r0, 7
     29a:	fd cf       	rjmp	.-6      	; 0x296
   if(TestAck()!=MT_DATA_ACK) return 1;//ACK	
     29c:	81 b1       	in	r24, 0x01	; 1
     29e:	99 27       	eor	r25, r25
     2a0:	88 7f       	andi	r24, 0xF8	; 248
     2a2:	90 70       	andi	r25, 0x00	; 0
     2a4:	88 97       	sbiw	r24, 0x28	; 40
     2a6:	19 f0       	breq	.+6      	; 0x2ae
     2a8:	81 e0       	ldi	r24, 0x01	; 1
     2aa:	90 e0       	ldi	r25, 0x00	; 0
     2ac:	08 95       	ret
   Stop();//I2C停止
     2ae:	84 e9       	ldi	r24, 0x94	; 148
     2b0:	86 bf       	out	0x36, r24	; 54
   delay_ms(10);//延时等EEPROM写完
     2b2:	8a e0       	ldi	r24, 0x0A	; 10
     2b4:	90 e0       	ldi	r25, 0x00	; 0
     2b6:	0e 94 0c 01 	call	0x218
   return 0;
     2ba:	80 e0       	ldi	r24, 0x00	; 0
     2bc:	90 e0       	ldi	r25, 0x00	; 0
 }
     2be:	08 95       	ret
     2c0:	08 95       	ret

000002c2 <i2c_Read>:
unsigned char i2c_Read(unsigned char RomAddress) 
 {
     2c2:	28 2f       	mov	r18, r24
   unsigned char temp;
   Start();//I2C启动
     2c4:	84 ea       	ldi	r24, 0xA4	; 164
     2c6:	86 bf       	out	0x36, r24	; 54
   Wait();
     2c8:	06 b6       	in	r0, 0x36	; 54
     2ca:	07 fe       	sbrs	r0, 7
     2cc:	fd cf       	rjmp	.-6      	; 0x2c8
   if (TestAck()!=START) return 0;//ACK	   
     2ce:	81 b1       	in	r24, 0x01	; 1
     2d0:	99 27       	eor	r25, r25
     2d2:	88 7f       	andi	r24, 0xF8	; 248
     2d4:	90 70       	andi	r25, 0x00	; 0
     2d6:	08 97       	sbiw	r24, 0x08	; 8
     2d8:	19 f0       	breq	.+6      	; 0x2e0
     2da:	80 e0       	ldi	r24, 0x00	; 0
     2dc:	90 e0       	ldi	r25, 0x00	; 0
     2de:	08 95       	ret
   Write8Bit(wr_device_add);//写I2C从器件地址和写方式
     2e0:	80 ed       	ldi	r24, 0xD0	; 208
     2e2:	83 b9       	out	0x03, r24	; 3
     2e4:	84 e8       	ldi	r24, 0x84	; 132
     2e6:	86 bf       	out	0x36, r24	; 54
   Wait(); 
     2e8:	06 b6       	in	r0, 0x36	; 54
     2ea:	07 fe       	sbrs	r0, 7
     2ec:	fd cf       	rjmp	.-6      	; 0x2e8
   if (TestAck()!=MT_SLA_ACK) return 0;//ACK
     2ee:	81 b1       	in	r24, 0x01	; 1
     2f0:	99 27       	eor	r25, r25
     2f2:	88 7f       	andi	r24, 0xF8	; 248
     2f4:	90 70       	andi	r25, 0x00	; 0
     2f6:	48 97       	sbiw	r24, 0x18	; 24
     2f8:	19 f0       	breq	.+6      	; 0x300
     2fa:	80 e0       	ldi	r24, 0x00	; 0
     2fc:	90 e0       	ldi	r25, 0x00	; 0
     2fe:	08 95       	ret
   Write8Bit(RomAddress);//写24C02的ROM地址
     300:	23 b9       	out	0x03, r18	; 3
     302:	84 e8       	ldi	r24, 0x84	; 132
     304:	86 bf       	out	0x36, r24	; 54
   Wait();
     306:	06 b6       	in	r0, 0x36	; 54
     308:	07 fe       	sbrs	r0, 7
     30a:	fd cf       	rjmp	.-6      	; 0x306
   if (TestAck()!=MT_DATA_ACK) return 0;
     30c:	81 b1       	in	r24, 0x01	; 1
     30e:	99 27       	eor	r25, r25
     310:	88 7f       	andi	r24, 0xF8	; 248
     312:	90 70       	andi	r25, 0x00	; 0
     314:	88 97       	sbiw	r24, 0x28	; 40
     316:	19 f0       	breq	.+6      	; 0x31e
     318:	80 e0       	ldi	r24, 0x00	; 0
     31a:	90 e0       	ldi	r25, 0x00	; 0
     31c:	08 95       	ret
   Start();//I2C重新启动
     31e:	84 ea       	ldi	r24, 0xA4	; 164
     320:	86 bf       	out	0x36, r24	; 54
   Wait();
     322:	06 b6       	in	r0, 0x36	; 54
     324:	07 fe       	sbrs	r0, 7
     326:	fd cf       	rjmp	.-6      	; 0x322
   if (TestAck()!=RE_START)  return 0;
     328:	81 b1       	in	r24, 0x01	; 1
     32a:	99 27       	eor	r25, r25
     32c:	88 7f       	andi	r24, 0xF8	; 248
     32e:	90 70       	andi	r25, 0x00	; 0
     330:	40 97       	sbiw	r24, 0x10	; 16
     332:	19 f0       	breq	.+6      	; 0x33a
     334:	80 e0       	ldi	r24, 0x00	; 0
     336:	90 e0       	ldi	r25, 0x00	; 0
     338:	08 95       	ret
   Write8Bit(rd_device_add);//写I2C从器件地址和读方式
     33a:	81 ed       	ldi	r24, 0xD1	; 209
     33c:	83 b9       	out	0x03, r24	; 3
     33e:	84 e8       	ldi	r24, 0x84	; 132
     340:	86 bf       	out	0x36, r24	; 54
   Wait();
     342:	06 b6       	in	r0, 0x36	; 54
     344:	07 fe       	sbrs	r0, 7
     346:	fd cf       	rjmp	.-6      	; 0x342
   if(TestAck()!=MR_SLA_ACK)  return 0;//ACK
     348:	81 b1       	in	r24, 0x01	; 1
     34a:	99 27       	eor	r25, r25
     34c:	88 7f       	andi	r24, 0xF8	; 248
     34e:	90 70       	andi	r25, 0x00	; 0
     350:	80 34       	cpi	r24, 0x40	; 64
     352:	91 05       	cpc	r25, r1
     354:	19 f0       	breq	.+6      	; 0x35c
     356:	80 e0       	ldi	r24, 0x00	; 0
     358:	90 e0       	ldi	r25, 0x00	; 0
     35a:	08 95       	ret
   Twi();//启动主I2C读方式
     35c:	84 e8       	ldi	r24, 0x84	; 132
     35e:	86 bf       	out	0x36, r24	; 54
   Wait();
     360:	06 b6       	in	r0, 0x36	; 54
     362:	07 fe       	sbrs	r0, 7
     364:	fd cf       	rjmp	.-6      	; 0x360
   if(TestAck()!=MR_DATA_NOACK) return 0;//ACK	
     366:	81 b1       	in	r24, 0x01	; 1
     368:	99 27       	eor	r25, r25
     36a:	88 7f       	andi	r24, 0xF8	; 248
     36c:	90 70       	andi	r25, 0x00	; 0
     36e:	88 35       	cpi	r24, 0x58	; 88
     370:	91 05       	cpc	r25, r1
     372:	19 f0       	breq	.+6      	; 0x37a
     374:	80 e0       	ldi	r24, 0x00	; 0
     376:	90 e0       	ldi	r25, 0x00	; 0
     378:	08 95       	ret
   temp=TWDR;//读取I2C接收数据
     37a:	93 b1       	in	r25, 0x03	; 3
   Stop();//I2C停止
     37c:	84 e9       	ldi	r24, 0x94	; 148
     37e:	86 bf       	out	0x36, r24	; 54
   return temp;
     380:	89 2f       	mov	r24, r25
     382:	99 27       	eor	r25, r25
 }
     384:	08 95       	ret
     386:	08 95       	ret

00000388 <Gettime>:
void Gettime(void)
 {
   if(N==1)
     388:	80 91 66 00 	lds	r24, 0x0066
     38c:	81 30       	cpi	r24, 0x01	; 1
     38e:	a9 f4       	brne	.+42     	; 0x3ba
     {
       month=(i2c_Read(5) & 0x1f);
     390:	85 e0       	ldi	r24, 0x05	; 5
     392:	0e 94 61 01 	call	0x2c2
     396:	99 27       	eor	r25, r25
     398:	8f 71       	andi	r24, 0x1F	; 31
     39a:	90 70       	andi	r25, 0x00	; 0
     39c:	90 93 61 00 	sts	0x0061, r25
     3a0:	80 93 60 00 	sts	0x0060, r24
       date=(i2c_Read(4) & 0x3f);
     3a4:	84 e0       	ldi	r24, 0x04	; 4
     3a6:	0e 94 61 01 	call	0x2c2
     3aa:	99 27       	eor	r25, r25
     3ac:	8f 73       	andi	r24, 0x3F	; 63
     3ae:	90 70       	andi	r25, 0x00	; 0
     3b0:	90 93 63 00 	sts	0x0063, r25
     3b4:	80 93 62 00 	sts	0x0062, r24
     3b8:	08 95       	ret
     }
   else
     {
       hours=(i2c_Read(2) & 0x3f);
     3ba:	82 e0       	ldi	r24, 0x02	; 2
     3bc:	0e 94 61 01 	call	0x2c2
     3c0:	99 27       	eor	r25, r25
     3c2:	8f 73       	andi	r24, 0x3F	; 63
     3c4:	90 70       	andi	r25, 0x00	; 0
     3c6:	90 93 87 00 	sts	0x0087, r25
     3ca:	80 93 86 00 	sts	0x0086, r24
       minutes=(i2c_Read(1) & 0x7f);
     3ce:	81 e0       	ldi	r24, 0x01	; 1
     3d0:	0e 94 61 01 	call	0x2c2
     3d4:	99 27       	eor	r25, r25
     3d6:	8f 77       	andi	r24, 0x7F	; 127
     3d8:	90 70       	andi	r25, 0x00	; 0
     3da:	90 93 85 00 	sts	0x0085, r25
     3de:	80 93 84 00 	sts	0x0084, r24
	   senconds=(i2c_Read(0) & 0x7f);
     3e2:	80 e0       	ldi	r24, 0x00	; 0
     3e4:	0e 94 61 01 	call	0x2c2
     3e8:	8f 77       	andi	r24, 0x7F	; 127
     3ea:	80 93 78 00 	sts	0x0078, r24
     3ee:	08 95       	ret
     3f0:	08 95       	ret

000003f2 <time_init>:
     }
 }
void time_init(void)
 {
   i2c_Write(0,1);
     3f2:	61 e0       	ldi	r22, 0x01	; 1
     3f4:	80 e0       	ldi	r24, 0x00	; 0
     3f6:	0e 94 1a 01 	call	0x234
     3fa:	08 95       	ret

000003fc <disp>:
 }
void disp(void)
 {
     3fc:	1f 93       	push	r17

⌨️ 快捷键说明

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