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

📄 main.lss

📁 我学习AVR的代码例子
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 22e:	99 27       	eor	r25, r25
 230:	88 7f       	andi	r24, 0xF8	; 248
 232:	90 70       	andi	r25, 0x00	; 0
 234:	88 97       	sbiw	r24, 0x28	; 40
 236:	61 f4       	brne	.+24     	; 0x250
	Write8Bit(Wdata);//写数据到24C02的ROM
 238:	23 b9       	out	0x03, r18	; 3
 23a:	84 e8       	ldi	r24, 0x84	; 132
 23c:	86 bf       	out	0x36, r24	; 54
	Wait();
 23e:	06 b6       	in	r0, 0x36	; 54
 240:	07 fe       	sbrs	r0, 7
 242:	fd cf       	rjmp	.-6      	; 0x23e
	if(TestAck()!=MT_DATA_ACK) return 1;//ACK
 244:	81 b1       	in	r24, 0x01	; 1
 246:	99 27       	eor	r25, r25
 248:	88 7f       	andi	r24, 0xF8	; 248
 24a:	90 70       	andi	r25, 0x00	; 0
 24c:	88 97       	sbiw	r24, 0x28	; 40
 24e:	19 f0       	breq	.+6      	; 0x256
 250:	81 e0       	ldi	r24, 0x01	; 1
 252:	90 e0       	ldi	r25, 0x00	; 0
 254:	08 95       	ret
	Stop();//I2C停止
 256:	84 e9       	ldi	r24, 0x94	; 148
 258:	86 bf       	out	0x36, r24	; 54
	delay_ms(10);//延时等EEPROM写完
 25a:	8a e0       	ldi	r24, 0x0A	; 10
 25c:	90 e0       	ldi	r25, 0x00	; 0
 25e:	0e 94 5b 00 	call	0xb6
	return 0;
 262:	80 e0       	ldi	r24, 0x00	; 0
 264:	90 e0       	ldi	r25, 0x00	; 0
}
 266:	08 95       	ret
 268:	08 95       	ret

0000026a <i2c_Read>:
unsigned char i2c_Read(unsigned char RomAddress) 
{
 26a:	28 2f       	mov	r18, r24
	unsigned char temp;
	Start();//I2C启动
 26c:	84 ea       	ldi	r24, 0xA4	; 164
 26e:	86 bf       	out	0x36, r24	; 54
	Wait();
 270:	06 b6       	in	r0, 0x36	; 54
 272:	07 fe       	sbrs	r0, 7
 274:	fd cf       	rjmp	.-6      	; 0x270
	if (TestAck()!=START) return 0;//ACK
 276:	81 b1       	in	r24, 0x01	; 1
 278:	99 27       	eor	r25, r25
 27a:	88 7f       	andi	r24, 0xF8	; 248
 27c:	90 70       	andi	r25, 0x00	; 0
 27e:	08 97       	sbiw	r24, 0x08	; 8
 280:	09 f0       	breq	.+2      	; 0x284
 282:	3e c0       	rjmp	.+124    	; 0x300
	Write8Bit(wr_device_add);//写I2C从器件地址和写方式
 284:	80 ed       	ldi	r24, 0xD0	; 208
 286:	83 b9       	out	0x03, r24	; 3
 288:	84 e8       	ldi	r24, 0x84	; 132
 28a:	86 bf       	out	0x36, r24	; 54
	Wait();
 28c:	06 b6       	in	r0, 0x36	; 54
 28e:	07 fe       	sbrs	r0, 7
 290:	fd cf       	rjmp	.-6      	; 0x28c
	if (TestAck()!=MT_SLA_ACK) return 0;//ACK
 292:	81 b1       	in	r24, 0x01	; 1
 294:	99 27       	eor	r25, r25
 296:	88 7f       	andi	r24, 0xF8	; 248
 298:	90 70       	andi	r25, 0x00	; 0
 29a:	48 97       	sbiw	r24, 0x18	; 24
 29c:	89 f5       	brne	.+98     	; 0x300
	Write8Bit(RomAddress);//写ROM地址
 29e:	23 b9       	out	0x03, r18	; 3
 2a0:	84 e8       	ldi	r24, 0x84	; 132
 2a2:	86 bf       	out	0x36, r24	; 54
	Wait();
 2a4:	06 b6       	in	r0, 0x36	; 54
 2a6:	07 fe       	sbrs	r0, 7
 2a8:	fd cf       	rjmp	.-6      	; 0x2a4
	if (TestAck()!=MT_DATA_ACK) return 0;
 2aa:	81 b1       	in	r24, 0x01	; 1
 2ac:	99 27       	eor	r25, r25
 2ae:	88 7f       	andi	r24, 0xF8	; 248
 2b0:	90 70       	andi	r25, 0x00	; 0
 2b2:	88 97       	sbiw	r24, 0x28	; 40
 2b4:	29 f5       	brne	.+74     	; 0x300
	Start();//I2C重新启动
 2b6:	84 ea       	ldi	r24, 0xA4	; 164
 2b8:	86 bf       	out	0x36, r24	; 54
	Wait();
 2ba:	06 b6       	in	r0, 0x36	; 54
 2bc:	07 fe       	sbrs	r0, 7
 2be:	fd cf       	rjmp	.-6      	; 0x2ba
	if (TestAck()!=RE_START)  return 0;
 2c0:	81 b1       	in	r24, 0x01	; 1
 2c2:	99 27       	eor	r25, r25
 2c4:	88 7f       	andi	r24, 0xF8	; 248
 2c6:	90 70       	andi	r25, 0x00	; 0
 2c8:	40 97       	sbiw	r24, 0x10	; 16
 2ca:	d1 f4       	brne	.+52     	; 0x300
	Write8Bit(rd_device_add);//写I2C从器件地址和读方式
 2cc:	81 ed       	ldi	r24, 0xD1	; 209
 2ce:	83 b9       	out	0x03, r24	; 3
 2d0:	84 e8       	ldi	r24, 0x84	; 132
 2d2:	86 bf       	out	0x36, r24	; 54
	Wait();
 2d4:	06 b6       	in	r0, 0x36	; 54
 2d6:	07 fe       	sbrs	r0, 7
 2d8:	fd cf       	rjmp	.-6      	; 0x2d4
	if(TestAck()!=MR_SLA_ACK)  return 0;//ACK
 2da:	81 b1       	in	r24, 0x01	; 1
 2dc:	99 27       	eor	r25, r25
 2de:	88 7f       	andi	r24, 0xF8	; 248
 2e0:	90 70       	andi	r25, 0x00	; 0
 2e2:	80 34       	cpi	r24, 0x40	; 64
 2e4:	91 05       	cpc	r25, r1
 2e6:	61 f4       	brne	.+24     	; 0x300
	Twi();//启动主I2C读方式
 2e8:	84 e8       	ldi	r24, 0x84	; 132
 2ea:	86 bf       	out	0x36, r24	; 54
	Wait();
 2ec:	06 b6       	in	r0, 0x36	; 54
 2ee:	07 fe       	sbrs	r0, 7
 2f0:	fd cf       	rjmp	.-6      	; 0x2ec
	if(TestAck()!=MR_DATA_NOACK) return 0;//ACK
 2f2:	81 b1       	in	r24, 0x01	; 1
 2f4:	99 27       	eor	r25, r25
 2f6:	88 7f       	andi	r24, 0xF8	; 248
 2f8:	90 70       	andi	r25, 0x00	; 0
 2fa:	88 35       	cpi	r24, 0x58	; 88
 2fc:	91 05       	cpc	r25, r1
 2fe:	19 f0       	breq	.+6      	; 0x306
 300:	80 e0       	ldi	r24, 0x00	; 0
 302:	90 e0       	ldi	r25, 0x00	; 0
 304:	08 95       	ret
	temp=TWDR;//读取I2C接收数据
 306:	93 b1       	in	r25, 0x03	; 3
	Stop();//I2C停止
 308:	84 e9       	ldi	r24, 0x94	; 148
 30a:	86 bf       	out	0x36, r24	; 54
	return temp;
 30c:	89 2f       	mov	r24, r25
 30e:	99 27       	eor	r25, r25
}
 310:	08 95       	ret
 312:	08 95       	ret

00000314 <Gettime>:
void Gettime(void)
{
	month=(i2c_Read(5) & 0x1f);
 314:	85 e0       	ldi	r24, 0x05	; 5
 316:	0e 94 35 01 	call	0x26a
 31a:	99 27       	eor	r25, r25
 31c:	8f 71       	andi	r24, 0x1F	; 31
 31e:	90 70       	andi	r25, 0x00	; 0
 320:	90 93 63 00 	sts	0x0063, r25
 324:	80 93 62 00 	sts	0x0062, r24
	date=(i2c_Read(4) & 0x3f);
 328:	84 e0       	ldi	r24, 0x04	; 4
 32a:	0e 94 35 01 	call	0x26a
 32e:	99 27       	eor	r25, r25
 330:	8f 73       	andi	r24, 0x3F	; 63
 332:	90 70       	andi	r25, 0x00	; 0
 334:	90 93 61 00 	sts	0x0061, r25
 338:	80 93 60 00 	sts	0x0060, r24
	hours=(i2c_Read(2) & 0x3f);
 33c:	82 e0       	ldi	r24, 0x02	; 2
 33e:	0e 94 35 01 	call	0x26a
 342:	99 27       	eor	r25, r25
 344:	8f 73       	andi	r24, 0x3F	; 63
 346:	90 70       	andi	r25, 0x00	; 0
 348:	90 93 6b 00 	sts	0x006B, r25
 34c:	80 93 6a 00 	sts	0x006A, r24
	minutes=(i2c_Read(1) & 0x7f);
 350:	81 e0       	ldi	r24, 0x01	; 1
 352:	0e 94 35 01 	call	0x26a
 356:	99 27       	eor	r25, r25
 358:	8f 77       	andi	r24, 0x7F	; 127
 35a:	90 70       	andi	r25, 0x00	; 0
 35c:	90 93 69 00 	sts	0x0069, r25
 360:	80 93 68 00 	sts	0x0068, r24
	senconds=(i2c_Read(0) & 0x7f);
 364:	80 e0       	ldi	r24, 0x00	; 0
 366:	0e 94 35 01 	call	0x26a
 36a:	8f 77       	andi	r24, 0x7F	; 127
 36c:	80 93 65 00 	sts	0x0065, r24
 370:	08 95       	ret

00000372 <time_init>:
}
void time_init(void)
{
	i2c_Write(0,1);
 372:	61 e0       	ldi	r22, 0x01	; 1
 374:	80 e0       	ldi	r24, 0x00	; 0
 376:	0e 94 f7 00 	call	0x1ee
	i2c_Write(0,2);
 37a:	62 e0       	ldi	r22, 0x02	; 2
 37c:	80 e0       	ldi	r24, 0x00	; 0
 37e:	0e 94 f7 00 	call	0x1ee
	i2c_Write(0,3);
 382:	63 e0       	ldi	r22, 0x03	; 3
 384:	80 e0       	ldi	r24, 0x00	; 0
 386:	0e 94 f7 00 	call	0x1ee
	i2c_Write(0,4);
 38a:	64 e0       	ldi	r22, 0x04	; 4
 38c:	80 e0       	ldi	r24, 0x00	; 0
 38e:	0e 94 f7 00 	call	0x1ee
	i2c_Write(0,5);
 392:	65 e0       	ldi	r22, 0x05	; 5
 394:	80 e0       	ldi	r24, 0x00	; 0
 396:	0e 94 f7 00 	call	0x1ee
 39a:	08 95       	ret

0000039c <disp>:
}
void disp(void)
{
	a=HIBYTE(hours);
 39c:	80 91 6a 00 	lds	r24, 0x006A
 3a0:	90 91 6b 00 	lds	r25, 0x006B
 3a4:	34 e0       	ldi	r19, 0x04	; 4
 3a6:	95 95       	asr	r25
 3a8:	87 95       	ror	r24
 3aa:	3a 95       	dec	r19
 3ac:	e1 f7       	brne	.-8      	; 0x3a6
 3ae:	80 93 67 00 	sts	0x0067, r24
	b=HIBYTE(minutes);
 3b2:	80 91 68 00 	lds	r24, 0x0068
 3b6:	90 91 69 00 	lds	r25, 0x0069
 3ba:	24 e0       	ldi	r18, 0x04	; 4
 3bc:	95 95       	asr	r25
 3be:	87 95       	ror	r24
 3c0:	2a 95       	dec	r18
 3c2:	e1 f7       	brne	.-8      	; 0x3bc
 3c4:	80 93 64 00 	sts	0x0064, r24
	c=HIBYTE(senconds);
 3c8:	80 91 65 00 	lds	r24, 0x0065
 3cc:	82 95       	swap	r24
 3ce:	8f 70       	andi	r24, 0x0F	; 15
 3d0:	80 93 66 00 	sts	0x0066, r24
	if(a==0) a=10;
 3d4:	80 91 67 00 	lds	r24, 0x0067
 3d8:	88 23       	and	r24, r24
 3da:	19 f4       	brne	.+6      	; 0x3e2
 3dc:	8a e0       	ldi	r24, 0x0A	; 10
 3de:	80 93 67 00 	sts	0x0067, r24
	if(b==0) b=10;
 3e2:	80 91 64 00 	lds	r24, 0x0064
 3e6:	88 23       	and	r24, r24
 3e8:	19 f4       	brne	.+6      	; 0x3f0
 3ea:	8a e0       	ldi	r24, 0x0A	; 10
 3ec:	80 93 64 00 	sts	0x0064, r24
	if(c==0) c=10;
 3f0:	80 91 66 00 	lds	r24, 0x0066
 3f4:	88 23       	and	r24, r24
 3f6:	19 f4       	brne	.+6      	; 0x3fe
 3f8:	8a e0       	ldi	r24, 0x0A	; 10
 3fa:	80 93 66 00 	sts	0x0066, r24
	SENDCOMB(0x1c);                        //Write address
 3fe:	8c e1       	ldi	r24, 0x1C	; 28
 400:	0e 94 bf 00 	call	0x17e
	SendByte(pgm_read_byte(S+a));                //write data
 404:	80 91 67 00 	lds	r24, 0x0067
 408:	e8 2f       	mov	r30, r24
 40a:	ff 27       	eor	r31, r31
 40c:	ec 5a       	subi	r30, 0xAC	; 172
 40e:	ff 4f       	sbci	r31, 0xFF	; 255
 410:	84 91       	lpm	r24, Z
 412:	0e 94 ae 00 	call	0x15c
	SendByte(pgm_read_byte(S+LOBYTE(hours)));    //write data
 416:	80 91 6a 00 	lds	r24, 0x006A
 41a:	90 91 6b 00 	lds	r25, 0x006B
 41e:	e8 2f       	mov	r30, r24
 420:	ff 27       	eor	r31, r31
 422:	ef 70       	andi	r30, 0x0F	; 15
 424:	f0 70       	andi	r31, 0x00	; 0
 426:	ec 5a       	subi	r30, 0xAC	; 172
 428:	ff 4f       	sbci	r31, 0xFF	; 255
 42a:	84 91       	lpm	r24, Z
 42c:	0e 94 ae 00 	call	0x15c
	SendByte(pgm_read_byte(S+b));  //write data
 430:	80 91 64 00 	lds	r24, 0x0064
 434:	e8 2f       	mov	r30, r24
 436:	ff 27       	eor	r31, r31
 438:	ec 5a       	subi	r30, 0xAC	; 172
 43a:	ff 4f       	sbci	r31, 0xFF	; 255
 43c:	84 91       	lpm	r24, Z
 43e:	0e 94 ae 00 	call	0x15c
	SendByte(pgm_read_byte(S+LOBYTE(minutes)));  //write data
 442:	80 91 68 00 	lds	r24, 0x0068
 446:	90 91 69 00 	lds	r25, 0x0069
 44a:	e8 2f       	mov	r30, r24
 44c:	ff 27       	eor	r31, r31
 44e:	ef 70       	andi	r30, 0x0F	; 15
 450:	f0 70       	andi	r31, 0x00	; 0
 452:	ec 5a       	subi	r30, 0xAC	; 172
 454:	ff 4f       	sbci	r31, 0xFF	; 255
 456:	84 91       	lpm	r24, Z
 458:	0e 94 ae 00 	call	0x15c
	SendByte(pgm_read_byte(S+c)); //write data
 45c:	80 91 66 00 	lds	r24, 0x0066
 460:	e8 2f       	mov	r30, r24
 462:	ff 27       	eor	r31, r31
 464:	ec 5a       	subi	r30, 0xAC	; 172
 466:	ff 4f       	sbci	r31, 0xFF	; 255
 468:	84 91       	lpm	r24, Z
 46a:	0e 94 ae 00 	call	0x15c
	SendByte(pgm_read_byte(S+LOBYTE(senconds))); //write data
 46e:	80 91 65 00 	lds	r24, 0x0065
 472:	e8 2f       	mov	r30, r24
 474:	ff 27       	eor	r31, r31
 476:	ef 70       	andi	r30, 0x0F	; 15
 478:	f0 70       	andi	r31, 0x00	; 0
 47a:	ec 5a       	subi	r30, 0xAC	; 172
 47c:	ff 4f       	sbci	r31, 0xFF	; 255
 47e:	84 91       	lpm	r24, Z
 480:	0e 94 ae 00 	call	0x15c
 484:	08 95       	ret

00000486 <__vector_8>:
	/*
	a=HIBYTE(month);
	b=HIBYTE(date);
	SENDCOMB(0x2c);       //Write address
	SendByte(pgm_read_byte(S+a));         //write data
	SendByte(pgm_read_byte(S+LOBYTE(month)));         //write data
	SendByte(pgm_read_byte(S+HIBYTE(date)));     //write data
	SendByte((pgm_read_byte(S+LOBYTE(date)));     //write data
	*/
}

//#pragma interrupt_handler timer1_ovf:9
//void timer1_ovf(void)                    //位闪动即修改
SIGNAL(SIG_OVERFLOW1)
{
 486:	1f 92       	push	r1
 488:	0f 92       	push	r0
 48a:	0f b6       	in	r0, 0x3f	; 63
 48c:	0f 92       	push	r0
 48e:	11 24       	eor	r1, r1
 490:	2f 93       	push	r18
 492:	3f 93       	push	r19
 494:	4f 93       	push	r20
 496:	5f 93       	push	r21
 498:	6f 93       	push	r22
 49a:	7f 93       	push	r23
 49c:	8f 93       	push	r24
 49e:	9f 93       	push	r25
 4a0:	af 93       	push	r26
 4a2:	bf 93       	push	r27
 4a4:	ef 93       	push	r30
 4a6:	ff 93       	push	r31
	TCNT1H=0xc2;
 4a8:	82 ec       	ldi	r24, 0xC2	; 194
 4aa:	8d bd       	out	0x2d, r24	; 45
	TCNT1L=0xf7;
 4ac:	87 ef       	ldi	r24, 0xF7	; 247
 4ae:	8c bd       	out	0x2c, r24	; 44
	TCCR1B=0x04;
 4b0:	84 e0       	ldi	r24, 0x04	; 4
 4b2:	8e bd       	out	0x2e, r24	; 46
	Gettime();
 4b4:	0e 94 8a 01 	call	0x314
	disp();
 4b8:	0e 94 ce 01 	call	0x39c
 4bc:	ff 91       	pop	r31
 4be:	ef 91       	pop	r30
 4c0:	bf 91       	pop	r27
 4c2:	af 91       	pop	r26
 4c4:	9f 91       	pop	r25
 4c6:	8f 91       	pop	r24
 4c8:	7f 91       	pop	r23
 4ca:	6f 91       	pop	r22
 4cc:	5f 91       	pop	r21
 4ce:	4f 91       	pop	r20
 4d0:	3f 91       	pop	r19
 4d2:	2f 91       	pop	r18
 4d4:	0f 90       	pop	r0
 4d6:	0f be       	out	0x3f, r0	; 63
 4d8:	0f 90       	pop	r0
 4da:	1f 90       	pop	r1
 4dc:	18 95       	reti

000004de <start_t1>:
}
void start_t1(void)
{
	TCNT1H=0xc2;
 4de:	82 ec       	ldi	r24, 0xC2	; 194
 4e0:	8d bd       	out	0x2d, r24	; 45
	TCNT1L=0xf7;              //设初值
 4e2:	87 ef       	ldi	r24, 0xF7	; 247
 4e4:	8c bd       	out	0x2c, r24	; 44
	TCCR1B=0X05;               //启动定时器1,采用1024分频
 4e6:	85 e0       	ldi	r24, 0x05	; 5
 4e8:	8e bd       	out	0x2e, r24	; 46
	TIMSK|=(1<<TOIE1);
 4ea:	89 b7       	in	r24, 0x39	; 57
 4ec:	84 60       	ori	r24, 0x04	; 4
 4ee:	89 bf       	out	0x39, r24	; 57
	sei();
 4f0:	78 94       	sei
 4f2:	08 95       	ret

000004f4 <main>:
}
int main(void)
{
 4f4:	cf e5       	ldi	r28, 0x5F	; 95
 4f6:	d4 e0       	ldi	r29, 0x04	; 4
 4f8:	de bf       	out	0x3e, r29	; 62
 4fa:	cd bf       	out	0x3d, r28	; 61
	port_init();
 4fc:	0e 94 4d 00 	call	0x9a
	disp_init();
 500:	0e 94 cd 00 	call	0x19a
	I2C_init();
 504:	0e 94 f3 00 	call	0x1e6
	time_init();
 508:	0e 94 b9 01 	call	0x372
	delay_ms(10);
 50c:	8a e0       	ldi	r24, 0x0A	; 10
 50e:	90 e0       	ldi	r25, 0x00	; 0
 510:	0e 94 5b 00 	call	0xb6
	start_t1();
 514:	0e 94 6f 02 	call	0x4de
	while(1)
	{
		delay_ms(100);
 518:	84 e6       	ldi	r24, 0x64	; 100
 51a:	90 e0       	ldi	r25, 0x00	; 0
 51c:	0e 94 5b 00 	call	0xb6
 520:	fb cf       	rjmp	.-10     	; 0x518

⌨️ 快捷键说明

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