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

📄 main.lss

📁 基于AVRGCC的时钟DS1302的完整应用源代码
💻 LSS
📖 第 1 页 / 共 5 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         0000003a  00800100  00000dc4  00000e58  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         00000dc4  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .bss          00000071  0080013a  0080013a  00000e92  2**0
                  ALLOC
  3 .noinit       00000000  008001ab  008001ab  00000e92  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000e92  2**0
                  CONTENTS
  5 .stab         00000f84  00000000  00000000  00000e94  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      0000093b  00000000  00000000  00001e18  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 38 00 	jmp	0x70
   4:	0c 94 53 00 	jmp	0xa6
   8:	0c 94 53 00 	jmp	0xa6
   c:	0c 94 53 00 	jmp	0xa6
  10:	0c 94 53 00 	jmp	0xa6
  14:	0c 94 53 00 	jmp	0xa6
  18:	0c 94 53 00 	jmp	0xa6
  1c:	0c 94 53 00 	jmp	0xa6
  20:	0c 94 53 00 	jmp	0xa6
  24:	0c 94 53 00 	jmp	0xa6
  28:	0c 94 53 00 	jmp	0xa6
  2c:	0c 94 53 00 	jmp	0xa6
  30:	0c 94 53 00 	jmp	0xa6
  34:	0c 94 53 00 	jmp	0xa6
  38:	0c 94 53 00 	jmp	0xa6
  3c:	0c 94 53 00 	jmp	0xa6
  40:	0c 94 53 00 	jmp	0xa6
  44:	0c 94 53 00 	jmp	0xa6
  48:	0c 94 53 00 	jmp	0xa6
  4c:	0c 94 53 00 	jmp	0xa6
  50:	0c 94 53 00 	jmp	0xa6
  54:	0c 94 53 00 	jmp	0xa6
  58:	0c 94 53 00 	jmp	0xa6
  5c:	0c 94 e4 01 	jmp	0x3c8
  60:	0c 94 53 00 	jmp	0xa6
  64:	0c 94 53 00 	jmp	0xa6
  68:	0c 94 53 00 	jmp	0xa6
  6c:	0c 94 53 00 	jmp	0xa6

00000070 <__ctors_end>:
  70:	11 24       	eor	r1, r1
  72:	1f be       	out	0x3f, r1	; 63
  74:	cf ef       	ldi	r28, 0xFF	; 255
  76:	d4 e0       	ldi	r29, 0x04	; 4
  78:	de bf       	out	0x3e, r29	; 62
  7a:	cd bf       	out	0x3d, r28	; 61

0000007c <__do_copy_data>:
  7c:	11 e0       	ldi	r17, 0x01	; 1
  7e:	a0 e0       	ldi	r26, 0x00	; 0
  80:	b1 e0       	ldi	r27, 0x01	; 1
  82:	e4 ec       	ldi	r30, 0xC4	; 196
  84:	fd e0       	ldi	r31, 0x0D	; 13
  86:	02 c0       	rjmp	.+4      	; 0x8c

00000088 <.do_copy_data_loop>:
  88:	05 90       	lpm	r0, Z+
  8a:	0d 92       	st	X+, r0

0000008c <.do_copy_data_start>:
  8c:	aa 33       	cpi	r26, 0x3A	; 58
  8e:	b1 07       	cpc	r27, r17
  90:	d9 f7       	brne	.-10     	; 0x88

00000092 <__do_clear_bss>:
  92:	11 e0       	ldi	r17, 0x01	; 1
  94:	aa e3       	ldi	r26, 0x3A	; 58
  96:	b1 e0       	ldi	r27, 0x01	; 1
  98:	01 c0       	rjmp	.+2      	; 0x9c

0000009a <.do_clear_bss_loop>:
  9a:	1d 92       	st	X+, r1

0000009c <.do_clear_bss_start>:
  9c:	ab 3a       	cpi	r26, 0xAB	; 171
  9e:	b1 07       	cpc	r27, r17
  a0:	e1 f7       	brne	.-8      	; 0x9a
  a2:	0c 94 55 00 	jmp	0xaa

000000a6 <__bad_interrupt>:
  a6:	0c 94 00 00 	jmp	0x0

000000aa <main>:
#include "uart.h"
#include "ds1302.h"

int main(void)
{
  aa:	c8 ef       	ldi	r28, 0xF8	; 248
  ac:	d4 e0       	ldi	r29, 0x04	; 4
  ae:	de bf       	out	0x3e, r29	; 62
  b0:	cd bf       	out	0x3d, r28	; 61
	unsigned int i;
	unsigned char year, month, day, week;
	unsigned char hour, min, sec;
	
	InitIO();
  b2:	0e 94 2e 02 	call	0x45c
	DS1302_Init();
  b6:	0e 94 e4 00 	call	0x1c8
	
	sei();
  ba:	78 94       	sei
	
	while(1)
	{
		//DS1302_Set_Date(5, 1, 6, 4);
		DS1302_Get_Date(&year, &month, &day, &week);
  bc:	9e 01       	movw	r18, r28
  be:	2f 5f       	subi	r18, 0xFF	; 255
  c0:	3f 4f       	sbci	r19, 0xFF	; 255
  c2:	ae 01       	movw	r20, r28
  c4:	4e 5f       	subi	r20, 0xFE	; 254
  c6:	5f 4f       	sbci	r21, 0xFF	; 255
  c8:	be 01       	movw	r22, r28
  ca:	6d 5f       	subi	r22, 0xFD	; 253
  cc:	7f 4f       	sbci	r23, 0xFF	; 255
  ce:	ce 01       	movw	r24, r28
  d0:	04 96       	adiw	r24, 0x04	; 4
  d2:	0e 94 7a 01 	call	0x2f4
		DS1302_Get_Time(&hour, &min, &sec);
  d6:	ae 01       	movw	r20, r28
  d8:	4b 5f       	subi	r20, 0xFB	; 251
  da:	5f 4f       	sbci	r21, 0xFF	; 255
  dc:	be 01       	movw	r22, r28
  de:	6a 5f       	subi	r22, 0xFA	; 250
  e0:	7f 4f       	sbci	r23, 0xFF	; 255
  e2:	ce 01       	movw	r24, r28
  e4:	07 96       	adiw	r24, 0x07	; 7
  e6:	0e 94 2a 01 	call	0x254
		printf("Date: %d-%02d-%02d Week: %d Time: %02d:%02d:%02d\r\n", 2000 + year, month, day, week, hour, min, sec);
  ea:	8d 81       	ldd	r24, Y+5	; 0x05
  ec:	99 27       	eor	r25, r25
  ee:	9f 93       	push	r25
  f0:	8f 93       	push	r24
  f2:	8e 81       	ldd	r24, Y+6	; 0x06
  f4:	99 27       	eor	r25, r25
  f6:	9f 93       	push	r25
  f8:	8f 93       	push	r24
  fa:	8f 81       	ldd	r24, Y+7	; 0x07
  fc:	99 27       	eor	r25, r25
  fe:	9f 93       	push	r25
 100:	8f 93       	push	r24
 102:	89 81       	ldd	r24, Y+1	; 0x01
 104:	99 27       	eor	r25, r25
 106:	9f 93       	push	r25
 108:	8f 93       	push	r24
 10a:	8a 81       	ldd	r24, Y+2	; 0x02
 10c:	99 27       	eor	r25, r25
 10e:	9f 93       	push	r25
 110:	8f 93       	push	r24
 112:	8b 81       	ldd	r24, Y+3	; 0x03
 114:	99 27       	eor	r25, r25
 116:	9f 93       	push	r25
 118:	8f 93       	push	r24
 11a:	8c 81       	ldd	r24, Y+4	; 0x04
 11c:	99 27       	eor	r25, r25
 11e:	80 53       	subi	r24, 0x30	; 48
 120:	98 4f       	sbci	r25, 0xF8	; 248
 122:	9f 93       	push	r25
 124:	8f 93       	push	r24
 126:	80 e0       	ldi	r24, 0x00	; 0
 128:	91 e0       	ldi	r25, 0x01	; 1
 12a:	9f 93       	push	r25
 12c:	8f 93       	push	r24
 12e:	0e 94 8a 02 	call	0x514
		//printf("%d-%02d-%02d %d %02d:%02d:%02d\r\n", 2000 + year, month, day, week, hour, min, sec);

		
		for(i = 0; i < 5000; i++)
 132:	8d b7       	in	r24, 0x3d	; 61
 134:	9e b7       	in	r25, 0x3e	; 62
 136:	40 96       	adiw	r24, 0x10	; 16
 138:	0f b6       	in	r0, 0x3f	; 63
 13a:	f8 94       	cli
 13c:	9e bf       	out	0x3e, r25	; 62
 13e:	0f be       	out	0x3f, r0	; 63
 140:	8d bf       	out	0x3d, r24	; 61
 142:	27 e8       	ldi	r18, 0x87	; 135
 144:	33 e1       	ldi	r19, 0x13	; 19

/* 8-bit count, 3 cycles/loop */
static __inline__ void
_delay_loop_1(uint8_t __count)
{
 146:	8f ef       	ldi	r24, 0xFF	; 255
	asm volatile (
 148:	8a 95       	dec	r24
 14a:	f1 f7       	brne	.-4      	; 0x148
 14c:	21 50       	subi	r18, 0x01	; 1
 14e:	30 40       	sbci	r19, 0x00	; 0
 150:	37 ff       	sbrs	r19, 7
 152:	f9 cf       	rjmp	.-14     	; 0x146
 154:	b3 cf       	rjmp	.-154    	; 0xbc

00000156 <bcd2bin>:
 };
#endif

unsigned char bcd2bin(unsigned char n)
{
 156:	48 2f       	mov	r20, r24
#ifdef BCD_USE_TABLE
	return pgm_read_byte(bcd2bin_data + n);
#else	
	unsigned char x = (n & 0xF0) >> 4;
 158:	28 2f       	mov	r18, r24
 15a:	33 27       	eor	r19, r19
 15c:	c9 01       	movw	r24, r18
 15e:	64 e0       	ldi	r22, 0x04	; 4
 160:	96 95       	lsr	r25
 162:	87 95       	ror	r24
 164:	6a 95       	dec	r22
 166:	e1 f7       	brne	.-8      	; 0x160
	
	if (x > 9 || (n & 0x0F) > 9)
 168:	8a 30       	cpi	r24, 0x0A	; 10
 16a:	28 f4       	brcc	.+10     	; 0x176
 16c:	2f 70       	andi	r18, 0x0F	; 15
 16e:	30 70       	andi	r19, 0x00	; 0
 170:	2a 30       	cpi	r18, 0x0A	; 10
 172:	31 05       	cpc	r19, r1
 174:	1c f0       	brlt	.+6      	; 0x17c
	{
		return 0;
 176:	80 e0       	ldi	r24, 0x00	; 0
 178:	90 e0       	ldi	r25, 0x00	; 0
 17a:	08 95       	ret
	}
	else
	{
		return (x << 3) + (x << 1) + (n & 0x0F);
 17c:	99 27       	eor	r25, r25
 17e:	9c 01       	movw	r18, r24
 180:	22 0f       	add	r18, r18
 182:	33 1f       	adc	r19, r19
 184:	33 e0       	ldi	r19, 0x03	; 3
 186:	88 0f       	add	r24, r24
 188:	99 1f       	adc	r25, r25
 18a:	3a 95       	dec	r19
 18c:	e1 f7       	brne	.-8      	; 0x186
 18e:	82 0f       	add	r24, r18
 190:	4f 70       	andi	r20, 0x0F	; 15
 192:	84 0f       	add	r24, r20
 194:	99 27       	eor	r25, r25
	}
#endif	
}
 196:	08 95       	ret
 198:	08 95       	ret

0000019a <bin2bcd>:

unsigned char bin2bcd(unsigned char n)
{
 19a:	28 2f       	mov	r18, r24
#ifdef BCD_USE_TABLE
	return pgm_read_byte(bin2bcd_data + n);
#else
	unsigned char result = 0;
 19c:	80 e0       	ldi	r24, 0x00	; 0
	
	if (n > 99) return 0;
 19e:	24 36       	cpi	r18, 0x64	; 100
 1a0:	18 f0       	brcs	.+6      	; 0x1a8
 1a2:	80 e0       	ldi	r24, 0x00	; 0
 1a4:	90 e0       	ldi	r25, 0x00	; 0
 1a6:	08 95       	ret
	while(n > 10)
	{
		++result;
		n -= 10;
 1a8:	2b 30       	cpi	r18, 0x0B	; 11
 1aa:	18 f0       	brcs	.+6      	; 0x1b2
 1ac:	8f 5f       	subi	r24, 0xFF	; 255
 1ae:	2a 50       	subi	r18, 0x0A	; 10
 1b0:	fb cf       	rjmp	.-10     	; 0x1a8
	}
	return (result << 4) | n;
 1b2:	99 27       	eor	r25, r25
 1b4:	74 e0       	ldi	r23, 0x04	; 4
 1b6:	88 0f       	add	r24, r24
 1b8:	99 1f       	adc	r25, r25
 1ba:	7a 95       	dec	r23
 1bc:	e1 f7       	brne	.-8      	; 0x1b6
 1be:	28 2b       	or	r18, r24
 1c0:	82 2f       	mov	r24, r18
 1c2:	99 27       	eor	r25, r25
#endif	
}
 1c4:	08 95       	ret
 1c6:	08 95       	ret

000001c8 <DS1302_Init>:
#include "ds1302.h"

void DS1302_Init(void)
{
	sbi(DS1302_DDR, DS1302_SCLK);
 1c8:	8b 9a       	sbi	0x11, 3	; 17
	sbi(DS1302_DDR, DS1302_IO);
 1ca:	8c 9a       	sbi	0x11, 4	; 17
	sbi(DS1302_DDR, DS1302_RST);
 1cc:	8d 9a       	sbi	0x11, 5	; 17
 1ce:	08 95       	ret

000001d0 <_DS1302_RD_Byte>:
}

// 高 12 个机器周期  低 10 个机器周期
unsigned char _DS1302_RD_Byte(void)
{
	unsigned char i, result = 0;
 1d0:	90 e0       	ldi	r25, 0x00	; 0
 1d2:	27 e0       	ldi	r18, 0x07	; 7

    for(i = 0; i < 8; i++)
    {
        result >>= 1;
 1d4:	96 95       	lsr	r25
		if (bit_is_set(DS1302_PIN, DS1302_IO))
 1d6:	84 9b       	sbis	0x10, 4	; 16
 1d8:	03 c0       	rjmp	.+6      	; 0x1e0
		{
			result |= 0x80;
 1da:	90 68       	ori	r25, 0x80	; 128

/* 8-bit count, 3 cycles/loop */
static __inline__ void
_delay_loop_1(uint8_t __count)
{
 1dc:	81 e0       	ldi	r24, 0x01	; 1
 1de:	01 c0       	rjmp	.+2      	; 0x1e2
 1e0:	82 e0       	ldi	r24, 0x02	; 2
	asm volatile (
 1e2:	8a 95       	dec	r24
 1e4:	f1 f7       	brne	.-4      	; 0x1e2
			_delay_loop_1(1);
		}
		else
		{
			_delay_loop_1(2);
		}
        sbi(DS1302_PORT, DS1302_SCLK);
 1e6:	93 9a       	sbi	0x12, 3	; 18

/* 8-bit count, 3 cycles/loop */
static __inline__ void
_delay_loop_1(uint8_t __count)
{
 1e8:	84 e0       	ldi	r24, 0x04	; 4
	asm volatile (
 1ea:	8a 95       	dec	r24
 1ec:	f1 f7       	brne	.-4      	; 0x1ea
		_delay_loop_1(4);
        cbi(DS1302_PORT, DS1302_SCLK);
 1ee:	93 98       	cbi	0x12, 3	; 18
 1f0:	21 50       	subi	r18, 0x01	; 1
 1f2:	27 ff       	sbrs	r18, 7
 1f4:	ef cf       	rjmp	.-34     	; 0x1d4
    } 
    return (result); 
}
 1f6:	89 2f       	mov	r24, r25
 1f8:	99 27       	eor	r25, r25
 1fa:	08 95       	ret

000001fc <_DS1302_WR_Byte>:

// 高 12 个机器周期  低 10 个机器周期
void _DS1302_WR_Byte(unsigned char c)
{
 1fc:	98 2f       	mov	r25, r24
 1fe:	27 e0       	ldi	r18, 0x07	; 7
	unsigned char i;

    for(i = 0; i < 8; i++)
    {
		if (c & 0x01)
 200:	90 ff       	sbrs	r25, 0
 202:	02 c0       	rjmp	.+4      	; 0x208
		{
			sbi(DS1302_PORT, DS1302_IO);

⌨️ 快捷键说明

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