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

📄 main.lss

📁 MAXIM的DS3231时钟,温度都具备的芯片.驱动IC为AVRmega16或者mega32.全功能.内附全部驱动程序.绝对原创.
💻 LSS
📖 第 1 页 / 共 3 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000006bc  00000000  00000000  00000094  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         000000d4  00800060  000006bc  00000750  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000057  00800134  00800134  00000824  2**0
                  ALLOC
  3 .stab         00000378  00000000  00000000  00000824  2**2
                  CONTENTS, READONLY, DEBUGGING
  4 .stabstr      00000071  00000000  00000000  00000b9c  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_aranges 00000060  00000000  00000000  00000c0d  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 0000030d  00000000  00000000  00000c6d  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00000916  00000000  00000000  00000f7a  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 00000382  00000000  00000000  00001890  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   0000095c  00000000  00000000  00001c12  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_frame  000001d0  00000000  00000000  00002570  2**2
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_str    0000034a  00000000  00000000  00002740  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_loc    0000013b  00000000  00000000  00002a8a  2**0
                  CONTENTS, READONLY, DEBUGGING
 13 .debug_ranges 00000030  00000000  00000000  00002bc5  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54	; 0x54 <__ctors_end>
   4:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   8:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  10:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  14:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  18:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  1c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  20:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  24:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  28:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  2c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  30:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  34:	0c 94 c5 02 	jmp	0x58a	; 0x58a <__vector_13>
  38:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  3c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  40:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  44:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  48:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  4c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  50:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d8 e0       	ldi	r29, 0x08	; 8
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	11 e0       	ldi	r17, 0x01	; 1
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	ec eb       	ldi	r30, 0xBC	; 188
  68:	f6 e0       	ldi	r31, 0x06	; 6
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	a4 33       	cpi	r26, 0x34	; 52
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:	11 e0       	ldi	r17, 0x01	; 1
  78:	a4 e3       	ldi	r26, 0x34	; 52
  7a:	b1 e0       	ldi	r27, 0x01	; 1
  7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	ab 38       	cpi	r26, 0x8B	; 139
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0e 94 5c 00 	call	0xb8	; 0xb8 <main>
  8a:	0c 94 5d 03 	jmp	0x6ba	; 0x6ba <_exit>

0000008e <__bad_interrupt>:
  8e:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

00000092 <PortInit>:
unsigned char CURDATE[7];
unsigned char systemerror=0;	//系统错误号

void PortInit(void)	//不用的管脚一律上拉输出
{
  92:	8f ef       	ldi	r24, 0xFF	; 255
  94:	8b bb       	out	0x1b, r24	; 27
	PORTA=0xff;
	DDRA=0xff;
  96:	8a bb       	out	0x1a, r24	; 26
	PORTB=0xff;
  98:	88 bb       	out	0x18, r24	; 24
	DDRB=0xff;
  9a:	87 bb       	out	0x17, r24	; 23
	PORTC=0xff;
  9c:	85 bb       	out	0x15, r24	; 21
	DDRC=0xff;
  9e:	84 bb       	out	0x14, r24	; 20
	PORTD=0xff;
  a0:	82 bb       	out	0x12, r24	; 18
	DDRD=0xff;
  a2:	81 bb       	out	0x11, r24	; 17
  a4:	08 95       	ret

000000a6 <MCUInit>:
}

void MCUInit(void)
{
  a6:	f8 94       	cli
	asm("cli");		//关闭全局中断
	PortInit();
  a8:	0e 94 49 00 	call	0x92	; 0x92 <PortInit>
	UartIntit();
  ac:	0e 94 e4 01 	call	0x3c8	; 0x3c8 <UartIntit>
	DS3231Init();
  b0:	0e 94 57 01 	call	0x2ae	; 0x2ae <DS3231Init>
	asm("sei");		//使能全局中断
  b4:	78 94       	sei
  b6:	08 95       	ret

000000b8 <main>:
}

int main(void)
{
  b8:	0e 94 53 00 	call	0xa6	; 0xa6 <MCUInit>
    MCUInit();
    UARTSendString((unsigned char *)&"System is initializing...");
  bc:	80 e6       	ldi	r24, 0x60	; 96
  be:	90 e0       	ldi	r25, 0x00	; 0
  c0:	0e 94 f4 01 	call	0x3e8	; 0x3e8 <UARTSendString>
	UARTSendString((unsigned char *)&"按下[s]键可以读取当前时间");
  c4:	8a e7       	ldi	r24, 0x7A	; 122
  c6:	90 e0       	ldi	r25, 0x00	; 0
  c8:	0e 94 f4 01 	call	0x3e8	; 0x3e8 <UARTSendString>
	UARTSendString((unsigned char *)&"按下[t]键可以读取当前温度");
  cc:	84 e9       	ldi	r24, 0x94	; 148
  ce:	90 e0       	ldi	r25, 0x00	; 0
  d0:	0e 94 f4 01 	call	0x3e8	; 0x3e8 <UARTSendString>
	UARTSendString((unsigned char *)&"按下[m]键可以读取当前工作模式");
  d4:	8e ea       	ldi	r24, 0xAE	; 174
  d6:	90 e0       	ldi	r25, 0x00	; 0
  d8:	0e 94 f4 01 	call	0x3e8	; 0x3e8 <UARTSendString>
    while(1)
	{
		uart();
  dc:	0e 94 b7 02 	call	0x56e	; 0x56e <uart>
		ReadTemperature();
  e0:	0e 94 cf 01 	call	0x39e	; 0x39e <ReadTemperature>
  e4:	fb cf       	rjmp	.-10     	; 0xdc <main+0x24>

000000e6 <BCDtoASCII>:
unsigned char NowDATE[]="20xx年xx月xx日xx时xx分xx秒 星期xx";	//当前时间
unsigned char WEEK[]="错一二三四五六日";			//注意:汉字要占用2个字节的空间

void BCDtoASCII(unsigned char cBCD,unsigned char *pstr)//压缩BCD码转换成ASCII码
{
  e6:	fb 01       	movw	r30, r22
	unsigned char temp=cBCD>>4;
	*pstr++=temp+0x30;
  e8:	98 2f       	mov	r25, r24
  ea:	92 95       	swap	r25
  ec:	9f 70       	andi	r25, 0x0F	; 15
  ee:	90 5d       	subi	r25, 0xD0	; 208
  f0:	90 83       	st	Z, r25
	temp=cBCD&0x0F;
	*pstr=temp+0x30;
  f2:	8f 70       	andi	r24, 0x0F	; 15
  f4:	80 5d       	subi	r24, 0xD0	; 208
  f6:	81 83       	std	Z+1, r24	; 0x01
  f8:	08 95       	ret

000000fa <decodeWEEK>:
}

void decodeWEEK(unsigned char week_,unsigned char *pstr)	//BCD码0~7转换成汉字'一'~'日'
{
  fa:	87 70       	andi	r24, 0x07	; 7
	unsigned char i;
	i=week_;
	i&=0x07;
	i=i<<1;
  fc:	88 0f       	add	r24, r24
	*pstr++=WEEK[i++];
  fe:	a4 e0       	ldi	r26, 0x04	; 4
 100:	b1 e0       	ldi	r27, 0x01	; 1
 102:	fd 01       	movw	r30, r26
 104:	e8 0f       	add	r30, r24
 106:	f1 1d       	adc	r31, r1
 108:	90 81       	ld	r25, Z
 10a:	fb 01       	movw	r30, r22
 10c:	90 83       	st	Z, r25
	*pstr=WEEK[i];
 10e:	8f 5f       	subi	r24, 0xFF	; 255
 110:	a8 0f       	add	r26, r24
 112:	b1 1d       	adc	r27, r1
 114:	8c 91       	ld	r24, X
 116:	81 83       	std	Z+1, r24	; 0x01
 118:	08 95       	ret

0000011a <BcdToBin>:
}

unsigned char BcdToBin(unsigned char val)	//将BCD码转换为10进制数 
{ 
 11a:	28 2f       	mov	r18, r24
 11c:	22 95       	swap	r18
 11e:	2f 70       	andi	r18, 0x0F	; 15
 120:	9a e0       	ldi	r25, 0x0A	; 10
 122:	29 9f       	mul	r18, r25
 124:	90 01       	movw	r18, r0
 126:	11 24       	eor	r1, r1
 128:	8f 70       	andi	r24, 0x0F	; 15
 12a:	82 0f       	add	r24, r18
	return (val>>4)*10+(val&0x0f);
}
 12c:	99 27       	eor	r25, r25
 12e:	08 95       	ret

00000130 <BinToBcd>:

unsigned char BinToBcd(unsigned char val) 	//将10进制数转换为BCD码
{
 130:	28 2f       	mov	r18, r24
 132:	6a e0       	ldi	r22, 0x0A	; 10
 134:	0e 94 51 03 	call	0x6a2	; 0x6a2 <__udivmodqi4>
 138:	48 2f       	mov	r20, r24
 13a:	55 27       	eor	r21, r21
 13c:	84 e0       	ldi	r24, 0x04	; 4
 13e:	44 0f       	add	r20, r20
 140:	55 1f       	adc	r21, r21
 142:	8a 95       	dec	r24
 144:	e1 f7       	brne	.-8      	; 0x13e <BinToBcd+0xe>
 146:	82 2f       	mov	r24, r18
 148:	0e 94 51 03 	call	0x6a2	; 0x6a2 <__udivmodqi4>
 14c:	94 0f       	add	r25, r20
	return ((val/10)*16+val%10);
}
 14e:	89 2f       	mov	r24, r25
 150:	99 27       	eor	r25, r25
 152:	08 95       	ret

00000154 <ERROR>:

void DS3231Init(void)	
//实际应用中注意每次查询一下状态寄存器.bit7:振荡器停止标志(OSF)位,如果为1,需要重新初始化时间,并清零.
{
	TWBR=11;
	TWSR=0;
	//控制寄存器.bit7:使能振荡器(EOSC#)	bit6:电池备份的方波使能(BBSQW)
	//bit5:转换温度(CONV)	bit4和bit3:频率选择(RES2和R)
	//bit2:中断控制(INTCN)	bit1:闹钟2中断使能(A2IE)	bit0:闹钟1中断使能(A1IE)
	DS3231TWIWrite(CMD_CONTROL,0x1c);	//00011100 
	//状态寄存器.bit7:振荡器停止标志(OSF)	bit6~bit4:空	bit3:使能32KHz输出(EN32KHz)
	//bit2:忙(BSY)	bit1:闹钟2标志(A2F)	bit0:闹钟1标志(A1F)
	DS3231TWIWrite(CMD_STATUS,0x00);	//000010
	//DS3231WriteTime();
}

void ERROR(void)
{
 154:	81 e0       	ldi	r24, 0x01	; 1
 156:	80 93 34 01 	sts	0x0134, r24
	systemerror=1;
	TWIStop();
 15a:	84 e9       	ldi	r24, 0x94	; 148
 15c:	86 bf       	out	0x36, r24	; 54
 15e:	08 95       	ret

00000160 <DS3231TWIRead>:
}

unsigned char DS3231TWIRead(unsigned int addr)	//从设备发送模式 DS3231读模式
{
 160:	9c 01       	movw	r18, r24
	unsigned char data;	//读取数值缓存
	TWIStart();			//发开始信号
 162:	84 ea       	ldi	r24, 0xA4	; 164
 164:	86 bf       	out	0x36, r24	; 54
	CheckTWINT();		//等待结束
 166:	06 b6       	in	r0, 0x36	; 54
 168:	07 fe       	sbrs	r0, 7
 16a:	fd cf       	rjmp	.-6      	; 0x166 <DS3231TWIRead+0x6>
	if((TWSR&0xF8)!=0x08)ERROR();
 16c:	81 b1       	in	r24, 0x01	; 1
 16e:	88 7f       	andi	r24, 0xF8	; 248
 170:	88 30       	cpi	r24, 0x08	; 8
 172:	29 f0       	breq	.+10     	; 0x17e <DS3231TWIRead+0x1e>
 174:	81 e0       	ldi	r24, 0x01	; 1
 176:	80 93 34 01 	sts	0x0134, r24
 17a:	84 e9       	ldi	r24, 0x94	; 148
 17c:	86 bf       	out	0x36, r24	; 54
	TWDR=DS3231ADDR;	//TWDR=DS3231ADDR+CMD_WRITE;//发送SLA设备地址+写命令
 17e:	80 ed       	ldi	r24, 0xD0	; 208
 180:	83 b9       	out	0x03, r24	; 3
	TWCR=(1<<TWINT)|(1<<TWEN);
 182:	84 e8       	ldi	r24, 0x84	; 132
 184:	86 bf       	out	0x36, r24	; 54
	CheckTWINT();		//等待结束
 186:	06 b6       	in	r0, 0x36	; 54
 188:	07 fe       	sbrs	r0, 7
 18a:	fd cf       	rjmp	.-6      	; 0x186 <DS3231TWIRead+0x26>
	if((TWSR&0xF8)!=0x18)ERROR();
 18c:	81 b1       	in	r24, 0x01	; 1
 18e:	88 7f       	andi	r24, 0xF8	; 248
 190:	88 31       	cpi	r24, 0x18	; 24
 192:	29 f0       	breq	.+10     	; 0x19e <DS3231TWIRead+0x3e>
 194:	81 e0       	ldi	r24, 0x01	; 1
 196:	80 93 34 01 	sts	0x0134, r24
 19a:	84 e9       	ldi	r24, 0x94	; 148
 19c:	86 bf       	out	0x36, r24	; 54
	TWDR=addr;			//发送读取地址
 19e:	23 b9       	out	0x03, r18	; 3
	TWCR=(1<<TWINT)|(1<<TWEN);
 1a0:	84 e8       	ldi	r24, 0x84	; 132
 1a2:	86 bf       	out	0x36, r24	; 54
	CheckTWINT();
 1a4:	06 b6       	in	r0, 0x36	; 54
 1a6:	07 fe       	sbrs	r0, 7
 1a8:	fd cf       	rjmp	.-6      	; 0x1a4 <DS3231TWIRead+0x44>
	if((TWSR&0xF8)!=0x28)ERROR();
 1aa:	81 b1       	in	r24, 0x01	; 1
 1ac:	88 7f       	andi	r24, 0xF8	; 248
 1ae:	88 32       	cpi	r24, 0x28	; 40
 1b0:	29 f0       	breq	.+10     	; 0x1bc <DS3231TWIRead+0x5c>
 1b2:	81 e0       	ldi	r24, 0x01	; 1
 1b4:	80 93 34 01 	sts	0x0134, r24
 1b8:	84 e9       	ldi	r24, 0x94	; 148
 1ba:	86 bf       	out	0x36, r24	; 54
	TWIStart();			//发开始信号
 1bc:	84 ea       	ldi	r24, 0xA4	; 164
 1be:	86 bf       	out	0x36, r24	; 54
	CheckTWINT();		//等待结束
 1c0:	06 b6       	in	r0, 0x36	; 54
 1c2:	07 fe       	sbrs	r0, 7
 1c4:	fd cf       	rjmp	.-6      	; 0x1c0 <DS3231TWIRead+0x60>
	if((TWSR & 0xF8)!=0x10)ERROR();
 1c6:	81 b1       	in	r24, 0x01	; 1
 1c8:	88 7f       	andi	r24, 0xF8	; 248
 1ca:	80 31       	cpi	r24, 0x10	; 16
 1cc:	29 f0       	breq	.+10     	; 0x1d8 <DS3231TWIRead+0x78>
 1ce:	81 e0       	ldi	r24, 0x01	; 1
 1d0:	80 93 34 01 	sts	0x0134, r24
 1d4:	84 e9       	ldi	r24, 0x94	; 148
 1d6:	86 bf       	out	0x36, r24	; 54
	TWDR=DS3231ADDR+CMD_READ;	//发送SLA设备地址+读命令
 1d8:	81 ed       	ldi	r24, 0xD1	; 209
 1da:	83 b9       	out	0x03, r24	; 3
	TWCR=(1<<TWINT)|(1<<TWEN);
 1dc:	84 e8       	ldi	r24, 0x84	; 132
 1de:	86 bf       	out	0x36, r24	; 54
	CheckTWINT();
 1e0:	06 b6       	in	r0, 0x36	; 54
 1e2:	07 fe       	sbrs	r0, 7
 1e4:	fd cf       	rjmp	.-6      	; 0x1e0 <DS3231TWIRead+0x80>
	if((TWSR&0xF8)!=0x40)ERROR();
 1e6:	81 b1       	in	r24, 0x01	; 1
 1e8:	88 7f       	andi	r24, 0xF8	; 248
 1ea:	80 34       	cpi	r24, 0x40	; 64
 1ec:	29 f0       	breq	.+10     	; 0x1f8 <DS3231TWIRead+0x98>
 1ee:	81 e0       	ldi	r24, 0x01	; 1
 1f0:	80 93 34 01 	sts	0x0134, r24
 1f4:	84 e9       	ldi	r24, 0x94	; 148
 1f6:	86 bf       	out	0x36, r24	; 54
	TWCR=0x84;			//接收8位数据,发送nACK 
 1f8:	84 e8       	ldi	r24, 0x84	; 132
 1fa:	86 bf       	out	0x36, r24	; 54
	CheckTWINT();
 1fc:	06 b6       	in	r0, 0x36	; 54
 1fe:	07 fe       	sbrs	r0, 7
 200:	fd cf       	rjmp	.-6      	; 0x1fc <DS3231TWIRead+0x9c>
	if((TWSR&0xF8)!=0x58)ERROR();
 202:	81 b1       	in	r24, 0x01	; 1
 204:	88 7f       	andi	r24, 0xF8	; 248
 206:	88 35       	cpi	r24, 0x58	; 88
 208:	29 f0       	breq	.+10     	; 0x214 <DS3231TWIRead+0xb4>
 20a:	81 e0       	ldi	r24, 0x01	; 1
 20c:	80 93 34 01 	sts	0x0134, r24
 210:	84 e9       	ldi	r24, 0x94	; 148
 212:	86 bf       	out	0x36, r24	; 54
	data=TWDR;
 214:	83 b1       	in	r24, 0x03	; 3
	TWIStop();			//发送STOP 信号
 216:	94 e9       	ldi	r25, 0x94	; 148
 218:	96 bf       	out	0x36, r25	; 54
 */
void
_delay_loop_2(uint16_t __count)

⌨️ 快捷键说明

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