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

📄 main.lss

📁 avr单片机的一些实际应用源码
💻 LSS
📖 第 1 页 / 共 5 页
字号:
		twi_writebyte(buf[i]);
     20e:	fe 01       	movw	r30, r28
     210:	e1 0f       	add	r30, r17
     212:	f1 1d       	adc	r31, r1
     214:	80 81       	ld	r24, Z
     216:	d2 df       	rcall	.-92     	; 0x1bc
     218:	1f 5f       	subi	r17, 0xFF	; 255
     21a:	10 17       	cp	r17, r16
     21c:	c0 f3       	brcs	.-16     	; 0x20e
	twi_stop();
     21e:	c1 df       	rcall	.-126    	; 0x1a2
	return 0;
}
     220:	80 e0       	ldi	r24, 0x00	; 0
     222:	90 e0       	ldi	r25, 0x00	; 0
     224:	df 91       	pop	r29
     226:	cf 91       	pop	r28
     228:	1f 91       	pop	r17
     22a:	0f 91       	pop	r16
     22c:	08 95       	ret

0000022e <rtc_read>:

//对DS1307内存连续的读操作
uchar rtc_read(uchar addr,uchar *buf,uchar len)
{
     22e:	ff 92       	push	r15
     230:	0f 93       	push	r16
     232:	1f 93       	push	r17
     234:	cf 93       	push	r28
     236:	df 93       	push	r29
     238:	eb 01       	movw	r28, r22
     23a:	14 2f       	mov	r17, r20
	uchar i;
	
	rtc_write(addr,0,0);//set address
     23c:	40 e0       	ldi	r20, 0x00	; 0
     23e:	60 e0       	ldi	r22, 0x00	; 0
     240:	70 e0       	ldi	r23, 0x00	; 0
     242:	d6 df       	rcall	.-84     	; 0x1f0
	
	DelayMs(10);
     244:	8a e0       	ldi	r24, 0x0A	; 10
     246:	90 e0       	ldi	r25, 0x00	; 0
     248:	7a df       	rcall	.-268    	; 0x13e
	
	twi_start();
     24a:	ae df       	rcall	.-164    	; 0x1a8
	twi_writebyte(DS1307_ADDR|TW_READ);
     24c:	81 ed       	ldi	r24, 0xD1	; 209
     24e:	b6 df       	rcall	.-148    	; 0x1bc
	for(i=0;i<len-1;i++)
     250:	ff 24       	eor	r15, r15
     252:	01 2f       	mov	r16, r17
     254:	11 27       	eor	r17, r17
     256:	c8 01       	movw	r24, r16
     258:	01 97       	sbiw	r24, 0x01	; 1
     25a:	18 16       	cp	r1, r24
     25c:	19 06       	cpc	r1, r25
     25e:	6c f4       	brge	.+26     	; 0x27a
		twi_readbyte(buf+i,TW_ACK);
     260:	ce 01       	movw	r24, r28
     262:	8f 0d       	add	r24, r15
     264:	91 1d       	adc	r25, r1
     266:	61 e0       	ldi	r22, 0x01	; 1
     268:	b4 df       	rcall	.-152    	; 0x1d2
     26a:	f3 94       	inc	r15
     26c:	2f 2d       	mov	r18, r15
     26e:	33 27       	eor	r19, r19
     270:	c8 01       	movw	r24, r16
     272:	01 97       	sbiw	r24, 0x01	; 1
     274:	28 17       	cp	r18, r24
     276:	39 07       	cpc	r19, r25
     278:	9c f3       	brlt	.-26     	; 0x260
	twi_readbyte(buf+i,TW_NACK);
     27a:	cf 0d       	add	r28, r15
     27c:	d1 1d       	adc	r29, r1
     27e:	60 e0       	ldi	r22, 0x00	; 0
     280:	ce 01       	movw	r24, r28
     282:	a7 df       	rcall	.-178    	; 0x1d2

	twi_stop();
     284:	8e df       	rcall	.-228    	; 0x1a2
	return 0;
}
     286:	80 e0       	ldi	r24, 0x00	; 0
     288:	90 e0       	ldi	r25, 0x00	; 0
     28a:	df 91       	pop	r29
     28c:	cf 91       	pop	r28
     28e:	1f 91       	pop	r17
     290:	0f 91       	pop	r16
     292:	ff 90       	pop	r15
     294:	08 95       	ret

00000296 <RtcInit>:
/*************DS1307操作**************结束**************/

/*************接口部分****************开始**************/

//初始化TWI功能
void RtcInit(void)
{
	TWBR=73;
     296:	89 e4       	ldi	r24, 0x49	; 73
     298:	80 b9       	out	0x00, r24	; 0
}
     29a:	08 95       	ret

0000029c <RtcUpdateData>:

//更新或读取DS1307日历/时间数据
uchar RtcUpdateData(uchar direction)
{
	uchar ret;
	if(direction)	//读
     29c:	88 23       	and	r24, r24
     29e:	31 f0       	breq	.+12     	; 0x2ac
	{
		ret=rtc_read(0,g_aTimeBuf,7);
     2a0:	47 e0       	ldi	r20, 0x07	; 7
     2a2:	69 e8       	ldi	r22, 0x89	; 137
     2a4:	70 e0       	ldi	r23, 0x00	; 0
     2a6:	80 e0       	ldi	r24, 0x00	; 0
     2a8:	c2 df       	rcall	.-124    	; 0x22e
     2aa:	04 c0       	rjmp	.+8      	; 0x2b4
	}
	else			//写
	{
		ret=rtc_write(0,g_aTimeBuf,7);	
     2ac:	47 e0       	ldi	r20, 0x07	; 7
     2ae:	69 e8       	ldi	r22, 0x89	; 137
     2b0:	70 e0       	ldi	r23, 0x00	; 0
     2b2:	9e df       	rcall	.-196    	; 0x1f0
	}
	return ret;
     2b4:	99 27       	eor	r25, r25
}
     2b6:	08 95       	ret

000002b8 <RtcReadRAM>:
//读DS1307用户RAM
uchar RtcReadRAM(uchar addr,uchar *buf,uchar len)
{
	addr+=8;
     2b8:	88 5f       	subi	r24, 0xF8	; 248
	return rtc_read(addr,buf,len);
     2ba:	b9 df       	rcall	.-142    	; 0x22e
     2bc:	99 27       	eor	r25, r25
}
     2be:	08 95       	ret

000002c0 <RtcWriteRAM>:
//写DS1307用户RAM
uchar RtcWriteRAM(uchar addr,uchar *buf,uchar len)
{
	addr+=8;
     2c0:	88 5f       	subi	r24, 0xF8	; 248
	return rtc_write(addr,buf,len);
     2c2:	96 df       	rcall	.-212    	; 0x1f0
     2c4:	99 27       	eor	r25, r25
}
     2c6:	08 95       	ret

000002c8 <byte_bintobcd>:

uchar byte_bintobcd(uchar bin)
{
	uchar ret;
	bin&=0x7f;
     2c8:	8f 77       	andi	r24, 0x7F	; 127
	bin%=100;
     2ca:	64 e6       	ldi	r22, 0x64	; 100
     2cc:	81 d6       	rcall	.+3330   	; 0xfd0
     2ce:	39 2f       	mov	r19, r25
	ret=bin/10;
     2d0:	4a e0       	ldi	r20, 0x0A	; 10
     2d2:	89 2f       	mov	r24, r25
     2d4:	64 2f       	mov	r22, r20
     2d6:	7c d6       	rcall	.+3320   	; 0xfd0
     2d8:	28 2f       	mov	r18, r24
	ret <<=4;
     2da:	22 95       	swap	r18
     2dc:	20 7f       	andi	r18, 0xF0	; 240
	ret|=bin%10;
     2de:	83 2f       	mov	r24, r19
     2e0:	77 d6       	rcall	.+3310   	; 0xfd0
     2e2:	29 2b       	or	r18, r25
	return ret;
     2e4:	82 2f       	mov	r24, r18
     2e6:	99 27       	eor	r25, r25
}
     2e8:	08 95       	ret

000002ea <byte_bcdtobin>:
uchar byte_bcdtobin(uchar bcd)
{
	uchar ret;
	ret=bcd & 0x0f;
     2ea:	28 2f       	mov	r18, r24
     2ec:	2f 70       	andi	r18, 0x0F	; 15
	ret+=(bcd>>4)*10;
     2ee:	82 95       	swap	r24
     2f0:	8f 70       	andi	r24, 0x0F	; 15
     2f2:	9a e0       	ldi	r25, 0x0A	; 10
     2f4:	89 9f       	mul	r24, r25
     2f6:	c0 01       	movw	r24, r0
     2f8:	11 24       	eor	r1, r1
     2fa:	28 0f       	add	r18, r24
	return ret;		
     2fc:	82 2f       	mov	r24, r18
     2fe:	99 27       	eor	r25, r25
}
     300:	08 95       	ret

00000302 <RtcBinToBCD>:

//将二进制格式缓冲区(g_aTimeBin)内容转换成BCD格式后保存到BCD格式缓冲区(g_aTimeBuf)
void RtcBinToBCD()
{
     302:	ff 92       	push	r15
     304:	0f 93       	push	r16
     306:	1f 93       	push	r17
     308:	cf 93       	push	r28
     30a:	df 93       	push	r29
	uchar i;
	g_aTimeBin[0]&=0x7f;
     30c:	80 91 82 00 	lds	r24, 0x0082
     310:	8f 77       	andi	r24, 0x7F	; 127
     312:	80 93 82 00 	sts	0x0082, r24
	g_aTimeBin[1]&=0x7f;
     316:	80 91 83 00 	lds	r24, 0x0083
     31a:	8f 77       	andi	r24, 0x7F	; 127
     31c:	80 93 83 00 	sts	0x0083, r24
	g_aTimeBin[2]&=0x3f;
     320:	80 91 84 00 	lds	r24, 0x0084
     324:	8f 73       	andi	r24, 0x3F	; 63
     326:	80 93 84 00 	sts	0x0084, r24
	g_aTimeBin[3]&=0x07;
     32a:	80 91 85 00 	lds	r24, 0x0085
     32e:	87 70       	andi	r24, 0x07	; 7
     330:	80 93 85 00 	sts	0x0085, r24
	g_aTimeBin[4]&=0x3f;
     334:	80 91 86 00 	lds	r24, 0x0086
     338:	8f 73       	andi	r24, 0x3F	; 63
     33a:	80 93 86 00 	sts	0x0086, r24
	g_aTimeBin[5]&=0x1f;	
     33e:	80 91 87 00 	lds	r24, 0x0087
     342:	8f 71       	andi	r24, 0x1F	; 31
     344:	80 93 87 00 	sts	0x0087, r24
	g_aTimeBin[6]&=0xff;
	
	for(i=0;i<7;i++)
     348:	ff 24       	eor	r15, r15
     34a:	09 e8       	ldi	r16, 0x89	; 137
     34c:	10 e0       	ldi	r17, 0x00	; 0
     34e:	c2 e8       	ldi	r28, 0x82	; 130
     350:	d0 e0       	ldi	r29, 0x00	; 0
		g_aTimeBuf[i]=byte_bintobcd(g_aTimeBin[i]);
     352:	89 91       	ld	r24, Y+
     354:	b9 df       	rcall	.-142    	; 0x2c8
     356:	f8 01       	movw	r30, r16
     358:	81 93       	st	Z+, r24
     35a:	8f 01       	movw	r16, r30
     35c:	f3 94       	inc	r15
     35e:	f6 e0       	ldi	r31, 0x06	; 6
     360:	ff 15       	cp	r31, r15
     362:	b8 f7       	brcc	.-18     	; 0x352
}
     364:	df 91       	pop	r29
     366:	cf 91       	pop	r28
     368:	1f 91       	pop	r17
     36a:	0f 91       	pop	r16
     36c:	ff 90       	pop	r15
     36e:	08 95       	ret

00000370 <RtcBCDToBin>:

//将BCD格式缓冲区(g_aTimeBuf)内容转换成二进制格式后保存到二进制格式缓冲区(g_aTimeBin)
void RtcBCDToBin()
{
     370:	ff 92       	push	r15
     372:	0f 93       	push	r16
     374:	1f 93       	push	r17
     376:	cf 93       	push	r28
     378:	df 93       	push	r29
	uchar i;
	for(i=0;i<7;i++)
     37a:	ff 24       	eor	r15, r15
     37c:	02 e8       	ldi	r16, 0x82	; 130
     37e:	10 e0       	ldi	r17, 0x00	; 0
     380:	c9 e8       	ldi	r28, 0x89	; 137
     382:	d0 e0       	ldi	r29, 0x00	; 0
		g_aTimeBin[i]=byte_bcdtobin(g_aTimeBuf[i]);
     384:	89 91       	ld	r24, Y+
     386:	b1 df       	rcall	.-158    	; 0x2ea
     388:	f8 01       	movw	r30, r16
     38a:	81 93       	st	Z+, r24
     38c:	8f 01       	movw	r16, r30
     38e:	f3 94       	inc	r15
     390:	f6 e0       	ldi	r31, 0x06	; 6
     392:	ff 15       	cp	r31, r15
     394:	b8 f7       	brcc	.-18     	; 0x384
}
     396:	df 91       	pop	r29
     398:	cf 91       	pop	r28
     39a:	1f 91       	pop	r17
     39c:	0f 91       	pop	r16
     39e:	ff 90       	pop	r15
     3a0:	08 95       	ret

000003a2 <RtcSetSQWOutput>:

//写DS1307配置字节
void RtcSetSQWOutput(uchar en,uchar level)
{
     3a2:	cf 93       	push	r28
     3a4:	df 93       	push	r29
     3a6:	cd b7       	in	r28, 0x3d	; 61
     3a8:	de b7       	in	r29, 0x3e	; 62
     3aa:	21 97       	sbiw	r28, 0x01	; 1
     3ac:	0f b6       	in	r0, 0x3f	; 63
     3ae:	f8 94       	cli
     3b0:	de bf       	out	0x3e, r29	; 62
     3b2:	0f be       	out	0x3f, r0	; 63
     3b4:	cd bf       	out	0x3d, r28	; 61
	//bEn:方波输出允许 TRUE 有效 level:如果输出禁止 OUT口的逻辑电平
	uchar c=0;
     3b6:	19 82       	std	Y+1, r1	; 0x01
	if(en)	//enable
     3b8:	88 23       	and	r24, r24
     3ba:	11 f0       	breq	.+4      	; 0x3c0
		c=0x10;
     3bc:	80 e1       	ldi	r24, 0x10	; 16
     3be:	03 c0       	rjmp	.+6      	; 0x3c6
	else	//disable
	{
		if(level)
     3c0:	66 23       	and	r22, r22
     3c2:	11 f0       	breq	.+4      	; 0x3c8
			c=0x80;
     3c4:	80 e8       	ldi	r24, 0x80	; 128
     3c6:	89 83       	std	Y+1, r24	; 0x01
	}
	rtc_write(7,&c,1);
     3c8:	41 e0       	ldi	r20, 0x01	; 1
     3ca:	be 01       	movw	r22, r28
     3cc:	6f 5f       	subi	r22, 0xFF	; 255
     3ce:	7f 4f       	sbci	r23, 0xFF	; 255
     3d0:	87 e0       	ldi	r24, 0x07	; 7
     3d2:	0e df       	rcall	.-484    	; 0x1f0
}
     3d4:	21 96       	adiw	r28, 0x01	; 1
     3d6:	0f b6       	in	r0, 0x3f	; 63
     3d8:	f8 94       	cli

⌨️ 快捷键说明

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