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

📄 main.lss

📁 基于AVRGCC的时钟DS1302的完整应用源代码
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 204:	94 9a       	sbi	0x12, 4	; 18
 206:	01 c0       	rjmp	.+2      	; 0x20a
		}
		else
		{
			cbi(DS1302_PORT, DS1302_IO);
 208:	94 98       	cbi	0x12, 4	; 18
		}
		sbi(DS1302_PORT, DS1302_SCLK);
 20a:	93 9a       	sbi	0x12, 3	; 18

/* 8-bit count, 3 cycles/loop */
static __inline__ void
_delay_loop_1(uint8_t __count)
{
 20c:	84 e0       	ldi	r24, 0x04	; 4
	asm volatile (
 20e:	8a 95       	dec	r24
 210:	f1 f7       	brne	.-4      	; 0x20e
		_delay_loop_1(4);
		cbi(DS1302_PORT, DS1302_SCLK);
 212:	93 98       	cbi	0x12, 3	; 18
        c >>= 1;
 214:	96 95       	lsr	r25
 216:	21 50       	subi	r18, 0x01	; 1
 218:	27 ff       	sbrs	r18, 7
 21a:	f2 cf       	rjmp	.-28     	; 0x200
 21c:	08 95       	ret

0000021e <DS1302_Read>:
    } 
}

unsigned char DS1302_Read(unsigned char addr)
{
	unsigned char result;

	cbi(DS1302_PORT, DS1302_RST);
 21e:	95 98       	cbi	0x12, 5	; 18
	cbi(DS1302_PORT, DS1302_SCLK);
 220:	93 98       	cbi	0x12, 3	; 18
	sbi(DS1302_PORT, DS1302_RST);
 222:	95 9a       	sbi	0x12, 5	; 18
	cli();
 224:	f8 94       	cli
	_DS1302_WR_Byte(addr);
 226:	0e 94 fe 00 	call	0x1fc
	result = _DS1302_RD_Byte();
 22a:	0e 94 e8 00 	call	0x1d0
	sei();
 22e:	78 94       	sei
	cbi(DS1302_PORT, DS1302_RST);
 230:	95 98       	cbi	0x12, 5	; 18
	return result;
}
 232:	99 27       	eor	r25, r25
 234:	08 95       	ret

00000236 <DS1302_Write>:

void DS1302_Write(unsigned char addr, unsigned char value)
{
 236:	1f 93       	push	r17
 238:	16 2f       	mov	r17, r22
	cbi(DS1302_PORT, DS1302_RST);
 23a:	95 98       	cbi	0x12, 5	; 18
	cbi(DS1302_PORT, DS1302_SCLK);
 23c:	93 98       	cbi	0x12, 3	; 18
	sbi(DS1302_PORT, DS1302_RST);
 23e:	95 9a       	sbi	0x12, 5	; 18
	cli();
 240:	f8 94       	cli
    _DS1302_WR_Byte(addr);       
 242:	0e 94 fe 00 	call	0x1fc
    _DS1302_WR_Byte(value);      
 246:	81 2f       	mov	r24, r17
 248:	0e 94 fe 00 	call	0x1fc
	sei();
 24c:	78 94       	sei
	cbi(DS1302_PORT, DS1302_RST);
 24e:	95 98       	cbi	0x12, 5	; 18
 250:	1f 91       	pop	r17
 252:	08 95       	ret

00000254 <DS1302_Get_Time>:
}

void DS1302_Get_Time(unsigned char *hour, unsigned char *min, unsigned char *sec)
{
 254:	cf 92       	push	r12
 256:	df 92       	push	r13
 258:	ef 92       	push	r14
 25a:	ff 92       	push	r15
 25c:	0f 93       	push	r16
 25e:	1f 93       	push	r17
 260:	8c 01       	movw	r16, r24
 262:	7b 01       	movw	r14, r22
 264:	6a 01       	movw	r12, r20
	*hour = bcd2bin(DS1302_Read(DS1302_RD_HOUR));
 266:	85 e8       	ldi	r24, 0x85	; 133
 268:	0e 94 0f 01 	call	0x21e
 26c:	0e 94 ab 00 	call	0x156
 270:	f8 01       	movw	r30, r16
 272:	80 83       	st	Z, r24
	*min  = bcd2bin(DS1302_Read(DS1302_RD_MINUTE));
 274:	83 e8       	ldi	r24, 0x83	; 131
 276:	0e 94 0f 01 	call	0x21e
 27a:	0e 94 ab 00 	call	0x156
 27e:	f7 01       	movw	r30, r14
 280:	80 83       	st	Z, r24
	*sec  = bcd2bin(DS1302_Read(DS1302_RD_SECOND));
 282:	81 e8       	ldi	r24, 0x81	; 129
 284:	0e 94 0f 01 	call	0x21e
 288:	0e 94 ab 00 	call	0x156
 28c:	f6 01       	movw	r30, r12
 28e:	80 83       	st	Z, r24
 290:	1f 91       	pop	r17
 292:	0f 91       	pop	r16
 294:	ff 90       	pop	r15
 296:	ef 90       	pop	r14
 298:	df 90       	pop	r13
 29a:	cf 90       	pop	r12
 29c:	08 95       	ret

0000029e <DS1302_Set_Time>:
}

void DS1302_Set_Time(unsigned char hour, unsigned char min, unsigned char sec)
{
 29e:	ff 92       	push	r15
 2a0:	0f 93       	push	r16
 2a2:	1f 93       	push	r17
 2a4:	18 2f       	mov	r17, r24
 2a6:	06 2f       	mov	r16, r22
 2a8:	f4 2e       	mov	r15, r20
	DS1302_Write(DS1302_WR_CTRL, 0x00);
 2aa:	60 e0       	ldi	r22, 0x00	; 0
 2ac:	8e e8       	ldi	r24, 0x8E	; 142
 2ae:	0e 94 1b 01 	call	0x236
	DS1302_Write(DS1302_WR_HOUR, bin2bcd(hour));
 2b2:	81 2f       	mov	r24, r17
 2b4:	0e 94 cd 00 	call	0x19a
 2b8:	68 2f       	mov	r22, r24
 2ba:	84 e8       	ldi	r24, 0x84	; 132
 2bc:	0e 94 1b 01 	call	0x236

	DS1302_Write(DS1302_WR_CTRL, 0x00);
 2c0:	60 e0       	ldi	r22, 0x00	; 0
 2c2:	8e e8       	ldi	r24, 0x8E	; 142
 2c4:	0e 94 1b 01 	call	0x236
	DS1302_Write(DS1302_WR_MINUTE, bin2bcd(min));
 2c8:	80 2f       	mov	r24, r16
 2ca:	0e 94 cd 00 	call	0x19a
 2ce:	68 2f       	mov	r22, r24
 2d0:	82 e8       	ldi	r24, 0x82	; 130
 2d2:	0e 94 1b 01 	call	0x236

	DS1302_Write(DS1302_WR_CTRL, 0x00);
 2d6:	60 e0       	ldi	r22, 0x00	; 0
 2d8:	8e e8       	ldi	r24, 0x8E	; 142
 2da:	0e 94 1b 01 	call	0x236
	DS1302_Write(DS1302_WR_SECOND, bin2bcd(sec));
 2de:	8f 2d       	mov	r24, r15
 2e0:	0e 94 cd 00 	call	0x19a
 2e4:	68 2f       	mov	r22, r24
 2e6:	80 e8       	ldi	r24, 0x80	; 128
 2e8:	0e 94 1b 01 	call	0x236
 2ec:	1f 91       	pop	r17
 2ee:	0f 91       	pop	r16
 2f0:	ff 90       	pop	r15
 2f2:	08 95       	ret

000002f4 <DS1302_Get_Date>:
}

void DS1302_Get_Date(unsigned char *year, unsigned char *month, unsigned char *day, unsigned char *week)
{
 2f4:	af 92       	push	r10
 2f6:	bf 92       	push	r11
 2f8:	cf 92       	push	r12
 2fa:	df 92       	push	r13
 2fc:	ef 92       	push	r14
 2fe:	ff 92       	push	r15
 300:	0f 93       	push	r16
 302:	1f 93       	push	r17
 304:	8c 01       	movw	r16, r24
 306:	7b 01       	movw	r14, r22
 308:	6a 01       	movw	r12, r20
 30a:	59 01       	movw	r10, r18
	*year  = bcd2bin(DS1302_Read(DS1302_RD_YEAR));
 30c:	8d e8       	ldi	r24, 0x8D	; 141
 30e:	0e 94 0f 01 	call	0x21e
 312:	0e 94 ab 00 	call	0x156
 316:	f8 01       	movw	r30, r16
 318:	80 83       	st	Z, r24
	*month = bcd2bin(DS1302_Read(DS1302_RD_MONTH));
 31a:	89 e8       	ldi	r24, 0x89	; 137
 31c:	0e 94 0f 01 	call	0x21e
 320:	0e 94 ab 00 	call	0x156
 324:	f7 01       	movw	r30, r14
 326:	80 83       	st	Z, r24
	*day   = bcd2bin(DS1302_Read(DS1302_RD_DAY));
 328:	87 e8       	ldi	r24, 0x87	; 135
 32a:	0e 94 0f 01 	call	0x21e
 32e:	0e 94 ab 00 	call	0x156
 332:	f6 01       	movw	r30, r12
 334:	80 83       	st	Z, r24
	*week  = bcd2bin(DS1302_Read(DS1302_RD_WEEK));
 336:	8b e8       	ldi	r24, 0x8B	; 139
 338:	0e 94 0f 01 	call	0x21e
 33c:	0e 94 ab 00 	call	0x156
 340:	f5 01       	movw	r30, r10
 342:	80 83       	st	Z, r24
 344:	1f 91       	pop	r17
 346:	0f 91       	pop	r16
 348:	ff 90       	pop	r15
 34a:	ef 90       	pop	r14
 34c:	df 90       	pop	r13
 34e:	cf 90       	pop	r12
 350:	bf 90       	pop	r11
 352:	af 90       	pop	r10
 354:	08 95       	ret

00000356 <DS1302_Set_Date>:
}

void DS1302_Set_Date(unsigned char year, unsigned char month, unsigned char day, unsigned char week)
{
 356:	ef 92       	push	r14
 358:	ff 92       	push	r15
 35a:	0f 93       	push	r16
 35c:	1f 93       	push	r17
 35e:	18 2f       	mov	r17, r24
 360:	06 2f       	mov	r16, r22
 362:	f4 2e       	mov	r15, r20
 364:	e2 2e       	mov	r14, r18
	DS1302_Write(DS1302_WR_CTRL, 0x00);
 366:	60 e0       	ldi	r22, 0x00	; 0
 368:	8e e8       	ldi	r24, 0x8E	; 142
 36a:	0e 94 1b 01 	call	0x236
	DS1302_Write(DS1302_WR_YEAR, bin2bcd(year));
 36e:	81 2f       	mov	r24, r17
 370:	0e 94 cd 00 	call	0x19a
 374:	68 2f       	mov	r22, r24
 376:	8c e8       	ldi	r24, 0x8C	; 140
 378:	0e 94 1b 01 	call	0x236

	DS1302_Write(DS1302_WR_CTRL, 0x00);
 37c:	60 e0       	ldi	r22, 0x00	; 0
 37e:	8e e8       	ldi	r24, 0x8E	; 142
 380:	0e 94 1b 01 	call	0x236
	DS1302_Write(DS1302_WR_MONTH, bin2bcd(month));
 384:	80 2f       	mov	r24, r16
 386:	0e 94 cd 00 	call	0x19a
 38a:	68 2f       	mov	r22, r24
 38c:	88 e8       	ldi	r24, 0x88	; 136
 38e:	0e 94 1b 01 	call	0x236

	DS1302_Write(DS1302_WR_CTRL, 0x00);
 392:	60 e0       	ldi	r22, 0x00	; 0
 394:	8e e8       	ldi	r24, 0x8E	; 142
 396:	0e 94 1b 01 	call	0x236
	DS1302_Write(DS1302_WR_DAY, bin2bcd(day));
 39a:	8f 2d       	mov	r24, r15
 39c:	0e 94 cd 00 	call	0x19a
 3a0:	68 2f       	mov	r22, r24
 3a2:	86 e8       	ldi	r24, 0x86	; 134
 3a4:	0e 94 1b 01 	call	0x236

	DS1302_Write(DS1302_WR_CTRL, 0x00);
 3a8:	60 e0       	ldi	r22, 0x00	; 0
 3aa:	8e e8       	ldi	r24, 0x8E	; 142
 3ac:	0e 94 1b 01 	call	0x236
	DS1302_Write(DS1302_WR_WEEK, bin2bcd(week));
 3b0:	8e 2d       	mov	r24, r14
 3b2:	0e 94 cd 00 	call	0x19a
 3b6:	68 2f       	mov	r22, r24
 3b8:	8a e8       	ldi	r24, 0x8A	; 138
 3ba:	0e 94 1b 01 	call	0x236
 3be:	1f 91       	pop	r17
 3c0:	0f 91       	pop	r16
 3c2:	ff 90       	pop	r15
 3c4:	ef 90       	pop	r14
 3c6:	08 95       	ret

000003c8 <__vector_23>:


// USART0 Transmitter interrupt service routine
SIGNAL(SIG_USART0_TRANS)
{
 3c8:	1f 92       	push	r1
 3ca:	0f 92       	push	r0
 3cc:	0f b6       	in	r0, 0x3f	; 63
 3ce:	0f 92       	push	r0
 3d0:	11 24       	eor	r1, r1
 3d2:	8f 93       	push	r24
 3d4:	9f 93       	push	r25
 3d6:	ef 93       	push	r30
 3d8:	ff 93       	push	r31
	if (UART0.counter)
 3da:	80 91 a4 01 	lds	r24, 0x01A4
 3de:	88 23       	and	r24, r24
 3e0:	99 f0       	breq	.+38     	; 0x408
	{
		--UART0.counter;
 3e2:	81 50       	subi	r24, 0x01	; 1
 3e4:	80 93 a4 01 	sts	0x01A4, r24
		UDR0 = UART0.buffer[UART0.rd];
 3e8:	90 91 a3 01 	lds	r25, 0x01A3
 3ec:	e9 2f       	mov	r30, r25
 3ee:	ff 27       	eor	r31, r31
 3f0:	e2 5c       	subi	r30, 0xC2	; 194
 3f2:	fe 4f       	sbci	r31, 0xFE	; 254
 3f4:	80 81       	ld	r24, Z
 3f6:	8c b9       	out	0x0c, r24	; 12
		if (++UART0.rd == TX_BUFFER_SIZE0) UART0.rd = 0;
 3f8:	89 2f       	mov	r24, r25
 3fa:	8f 5f       	subi	r24, 0xFF	; 255
 3fc:	80 93 a3 01 	sts	0x01A3, r24
 400:	84 36       	cpi	r24, 0x64	; 100
 402:	11 f4       	brne	.+4      	; 0x408
 404:	10 92 a3 01 	sts	0x01A3, r1
 408:	ff 91       	pop	r31
 40a:	ef 91       	pop	r30
 40c:	9f 91       	pop	r25
 40e:	8f 91       	pop	r24
 410:	0f 90       	pop	r0
 412:	0f be       	out	0x3f, r0	; 63
 414:	0f 90       	pop	r0
 416:	1f 90       	pop	r1
 418:	18 95       	reti

0000041a <uart_putchar>:
	}
}

int uart_putchar(char c)
{
 41a:	28 2f       	mov	r18, r24
 41c:	90 91 a4 01 	lds	r25, 0x01A4
	while (UART0.counter == TX_BUFFER_SIZE0);
 420:	94 36       	cpi	r25, 0x64	; 100
 422:	f1 f3       	breq	.-4      	; 0x420
	cli();
 424:	f8 94       	cli
	if (UART0.counter || bit_is_clear(UCSR0A, UDRE0))
 426:	99 23       	and	r25, r25
 428:	11 f4       	brne	.+4      	; 0x42e
 42a:	5d 99       	sbic	0x0b, 5	; 11
 42c:	12 c0       	rjmp	.+36     	; 0x452
	{
		UART0.buffer[UART0.wr] = c;
 42e:	80 91 a2 01 	lds	r24, 0x01A2
 432:	e8 2f       	mov	r30, r24
 434:	ff 27       	eor	r31, r31
 436:	e2 5c       	subi	r30, 0xC2	; 194
 438:	fe 4f       	sbci	r31, 0xFE	; 254
 43a:	20 83       	st	Z, r18
		if (++UART0.wr == TX_BUFFER_SIZE0) UART0.wr = 0;
 43c:	8f 5f       	subi	r24, 0xFF	; 255
 43e:	80 93 a2 01 	sts	0x01A2, r24
 442:	84 36       	cpi	r24, 0x64	; 100
 444:	11 f4       	brne	.+4      	; 0x44a
 446:	10 92 a2 01 	sts	0x01A2, r1
		++UART0.counter;
 44a:	9f 5f       	subi	r25, 0xFF	; 255
 44c:	90 93 a4 01 	sts	0x01A4, r25
 450:	01 c0       	rjmp	.+2      	; 0x454
	}
	else
	{
		UDR0 = c;
 452:	2c b9       	out	0x0c, r18	; 12
	}
	sei();
 454:	78 94       	sei
	return 0;
}
 456:	80 e0       	ldi	r24, 0x00	; 0
 458:	90 e0       	ldi	r25, 0x00	; 0
 45a:	08 95       	ret

0000045c <InitIO>:

void InitIO(void)
{
	UART0.rd = 0;
 45c:	10 92 a3 01 	sts	0x01A3, r1
	UART0.wr = 0;
 460:	10 92 a2 01 	sts	0x01A2, r1
	UART0.counter = 0;
 464:	10 92 a4 01 	sts	0x01A4, r1
	
	// USART0 initialization

⌨️ 快捷键说明

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