📄 main.lss
字号:
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 + -