📄 main.lss
字号:
1ee: 88 b9 out 0x08, r24 ; 8
ADCSRA=(1<<ADEN) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS0);//32分频
1f0: 8d e8 ldi r24, 0x8D ; 141
1f2: 86 b9 out 0x06, r24 ; 6
1f4: 08 95 ret
000001f6 <WDT_init>:
}
void WDT_init(void)
{
WDR();
1f6: a8 95 wdr
WDTCR=0x0e;
1f8: 8e e0 ldi r24, 0x0E ; 14
1fa: 81 bd out 0x21, r24 ; 33
1fc: 08 95 ret
000001fe <WDT_off>:
}/**/
void WDT_off(void)
{
WDTCR = (1<<WDTOE) | (1<<WDE);
1fe: 88 e1 ldi r24, 0x18 ; 24
200: 81 bd out 0x21, r24 ; 33
WDTCR = 0x00;
202: 11 bc out 0x21, r1 ; 33
204: 08 95 ret
00000206 <I2C_init>:
}
void I2C_init(void)
{
TWBR=2;
206: 82 e0 ldi r24, 0x02 ; 2
208: 80 b9 out 0x00, r24 ; 0
TWSR=00;
20a: 11 b8 out 0x01, r1 ; 1
20c: 08 95 ret
0000020e <delay_us>:
}
void delay_us(int time)//微秒级延时程序
{
do
{
time--;
20e: 01 97 sbiw r24, 0x01 ; 1
}
210: 82 30 cpi r24, 0x02 ; 2
212: 91 05 cpc r25, r1
214: e4 f7 brge .-8 ; 0x20e
216: 08 95 ret
00000218 <delay_ms>:
while (time>1);
}
void delay_ms(unsigned int time)//毫秒级延时程序
{
218: cf 93 push r28
21a: df 93 push r29
21c: ec 01 movw r28, r24
while(time!=0)
{
delay_us(1000);
time--;
21e: 89 2b or r24, r25
220: 31 f0 breq .+12 ; 0x22e
222: 88 ee ldi r24, 0xE8 ; 232
224: 93 e0 ldi r25, 0x03 ; 3
226: 0e 94 07 01 call 0x20e
22a: 21 97 sbiw r28, 0x01 ; 1
22c: d1 f7 brne .-12 ; 0x222
22e: df 91 pop r29
230: cf 91 pop r28
232: 08 95 ret
00000234 <i2c_Write>:
}
}
unsigned char i2c_Write(unsigned char Wdata,unsigned char RomAddress)
{
234: 28 2f mov r18, r24
Start();//I2C启动
236: 84 ea ldi r24, 0xA4 ; 164
238: 86 bf out 0x36, r24 ; 54
Wait();
23a: 06 b6 in r0, 0x36 ; 54
23c: 07 fe sbrs r0, 7
23e: fd cf rjmp .-6 ; 0x23a
if(TestAck()!=START) return 1;//ACK
240: 81 b1 in r24, 0x01 ; 1
242: 99 27 eor r25, r25
244: 88 7f andi r24, 0xF8 ; 248
246: 90 70 andi r25, 0x00 ; 0
248: 08 97 sbiw r24, 0x08 ; 8
24a: 19 f0 breq .+6 ; 0x252
24c: 81 e0 ldi r24, 0x01 ; 1
24e: 90 e0 ldi r25, 0x00 ; 0
250: 08 95 ret
Write8Bit(wr_device_add);//写I2C从器件地址和写方式
252: 80 ed ldi r24, 0xD0 ; 208
254: 83 b9 out 0x03, r24 ; 3
256: 84 e8 ldi r24, 0x84 ; 132
258: 86 bf out 0x36, r24 ; 54
Wait();
25a: 06 b6 in r0, 0x36 ; 54
25c: 07 fe sbrs r0, 7
25e: fd cf rjmp .-6 ; 0x25a
if(TestAck()!=MT_SLA_ACK) return 1;//ACK
260: 81 b1 in r24, 0x01 ; 1
262: 99 27 eor r25, r25
264: 88 7f andi r24, 0xF8 ; 248
266: 90 70 andi r25, 0x00 ; 0
268: 48 97 sbiw r24, 0x18 ; 24
26a: 19 f0 breq .+6 ; 0x272
26c: 81 e0 ldi r24, 0x01 ; 1
26e: 90 e0 ldi r25, 0x00 ; 0
270: 08 95 ret
Write8Bit(RomAddress);//写24C02的ROM地址
272: 63 b9 out 0x03, r22 ; 3
274: 84 e8 ldi r24, 0x84 ; 132
276: 86 bf out 0x36, r24 ; 54
Wait();
278: 06 b6 in r0, 0x36 ; 54
27a: 07 fe sbrs r0, 7
27c: fd cf rjmp .-6 ; 0x278
if(TestAck()!=MT_DATA_ACK) return 1;//ACK
27e: 81 b1 in r24, 0x01 ; 1
280: 99 27 eor r25, r25
282: 88 7f andi r24, 0xF8 ; 248
284: 90 70 andi r25, 0x00 ; 0
286: 88 97 sbiw r24, 0x28 ; 40
288: 19 f0 breq .+6 ; 0x290
28a: 81 e0 ldi r24, 0x01 ; 1
28c: 90 e0 ldi r25, 0x00 ; 0
28e: 08 95 ret
Write8Bit(Wdata);//写数据到24C02的ROM
290: 23 b9 out 0x03, r18 ; 3
292: 84 e8 ldi r24, 0x84 ; 132
294: 86 bf out 0x36, r24 ; 54
Wait();
296: 06 b6 in r0, 0x36 ; 54
298: 07 fe sbrs r0, 7
29a: fd cf rjmp .-6 ; 0x296
if(TestAck()!=MT_DATA_ACK) return 1;//ACK
29c: 81 b1 in r24, 0x01 ; 1
29e: 99 27 eor r25, r25
2a0: 88 7f andi r24, 0xF8 ; 248
2a2: 90 70 andi r25, 0x00 ; 0
2a4: 88 97 sbiw r24, 0x28 ; 40
2a6: 19 f0 breq .+6 ; 0x2ae
2a8: 81 e0 ldi r24, 0x01 ; 1
2aa: 90 e0 ldi r25, 0x00 ; 0
2ac: 08 95 ret
Stop();//I2C停止
2ae: 84 e9 ldi r24, 0x94 ; 148
2b0: 86 bf out 0x36, r24 ; 54
delay_ms(10);//延时等EEPROM写完
2b2: 8a e0 ldi r24, 0x0A ; 10
2b4: 90 e0 ldi r25, 0x00 ; 0
2b6: 0e 94 0c 01 call 0x218
return 0;
2ba: 80 e0 ldi r24, 0x00 ; 0
2bc: 90 e0 ldi r25, 0x00 ; 0
}
2be: 08 95 ret
2c0: 08 95 ret
000002c2 <i2c_Read>:
unsigned char i2c_Read(unsigned char RomAddress)
{
2c2: 28 2f mov r18, r24
unsigned char temp;
Start();//I2C启动
2c4: 84 ea ldi r24, 0xA4 ; 164
2c6: 86 bf out 0x36, r24 ; 54
Wait();
2c8: 06 b6 in r0, 0x36 ; 54
2ca: 07 fe sbrs r0, 7
2cc: fd cf rjmp .-6 ; 0x2c8
if (TestAck()!=START) return 0;//ACK
2ce: 81 b1 in r24, 0x01 ; 1
2d0: 99 27 eor r25, r25
2d2: 88 7f andi r24, 0xF8 ; 248
2d4: 90 70 andi r25, 0x00 ; 0
2d6: 08 97 sbiw r24, 0x08 ; 8
2d8: 19 f0 breq .+6 ; 0x2e0
2da: 80 e0 ldi r24, 0x00 ; 0
2dc: 90 e0 ldi r25, 0x00 ; 0
2de: 08 95 ret
Write8Bit(wr_device_add);//写I2C从器件地址和写方式
2e0: 80 ed ldi r24, 0xD0 ; 208
2e2: 83 b9 out 0x03, r24 ; 3
2e4: 84 e8 ldi r24, 0x84 ; 132
2e6: 86 bf out 0x36, r24 ; 54
Wait();
2e8: 06 b6 in r0, 0x36 ; 54
2ea: 07 fe sbrs r0, 7
2ec: fd cf rjmp .-6 ; 0x2e8
if (TestAck()!=MT_SLA_ACK) return 0;//ACK
2ee: 81 b1 in r24, 0x01 ; 1
2f0: 99 27 eor r25, r25
2f2: 88 7f andi r24, 0xF8 ; 248
2f4: 90 70 andi r25, 0x00 ; 0
2f6: 48 97 sbiw r24, 0x18 ; 24
2f8: 19 f0 breq .+6 ; 0x300
2fa: 80 e0 ldi r24, 0x00 ; 0
2fc: 90 e0 ldi r25, 0x00 ; 0
2fe: 08 95 ret
Write8Bit(RomAddress);//写24C02的ROM地址
300: 23 b9 out 0x03, r18 ; 3
302: 84 e8 ldi r24, 0x84 ; 132
304: 86 bf out 0x36, r24 ; 54
Wait();
306: 06 b6 in r0, 0x36 ; 54
308: 07 fe sbrs r0, 7
30a: fd cf rjmp .-6 ; 0x306
if (TestAck()!=MT_DATA_ACK) return 0;
30c: 81 b1 in r24, 0x01 ; 1
30e: 99 27 eor r25, r25
310: 88 7f andi r24, 0xF8 ; 248
312: 90 70 andi r25, 0x00 ; 0
314: 88 97 sbiw r24, 0x28 ; 40
316: 19 f0 breq .+6 ; 0x31e
318: 80 e0 ldi r24, 0x00 ; 0
31a: 90 e0 ldi r25, 0x00 ; 0
31c: 08 95 ret
Start();//I2C重新启动
31e: 84 ea ldi r24, 0xA4 ; 164
320: 86 bf out 0x36, r24 ; 54
Wait();
322: 06 b6 in r0, 0x36 ; 54
324: 07 fe sbrs r0, 7
326: fd cf rjmp .-6 ; 0x322
if (TestAck()!=RE_START) return 0;
328: 81 b1 in r24, 0x01 ; 1
32a: 99 27 eor r25, r25
32c: 88 7f andi r24, 0xF8 ; 248
32e: 90 70 andi r25, 0x00 ; 0
330: 40 97 sbiw r24, 0x10 ; 16
332: 19 f0 breq .+6 ; 0x33a
334: 80 e0 ldi r24, 0x00 ; 0
336: 90 e0 ldi r25, 0x00 ; 0
338: 08 95 ret
Write8Bit(rd_device_add);//写I2C从器件地址和读方式
33a: 81 ed ldi r24, 0xD1 ; 209
33c: 83 b9 out 0x03, r24 ; 3
33e: 84 e8 ldi r24, 0x84 ; 132
340: 86 bf out 0x36, r24 ; 54
Wait();
342: 06 b6 in r0, 0x36 ; 54
344: 07 fe sbrs r0, 7
346: fd cf rjmp .-6 ; 0x342
if(TestAck()!=MR_SLA_ACK) return 0;//ACK
348: 81 b1 in r24, 0x01 ; 1
34a: 99 27 eor r25, r25
34c: 88 7f andi r24, 0xF8 ; 248
34e: 90 70 andi r25, 0x00 ; 0
350: 80 34 cpi r24, 0x40 ; 64
352: 91 05 cpc r25, r1
354: 19 f0 breq .+6 ; 0x35c
356: 80 e0 ldi r24, 0x00 ; 0
358: 90 e0 ldi r25, 0x00 ; 0
35a: 08 95 ret
Twi();//启动主I2C读方式
35c: 84 e8 ldi r24, 0x84 ; 132
35e: 86 bf out 0x36, r24 ; 54
Wait();
360: 06 b6 in r0, 0x36 ; 54
362: 07 fe sbrs r0, 7
364: fd cf rjmp .-6 ; 0x360
if(TestAck()!=MR_DATA_NOACK) return 0;//ACK
366: 81 b1 in r24, 0x01 ; 1
368: 99 27 eor r25, r25
36a: 88 7f andi r24, 0xF8 ; 248
36c: 90 70 andi r25, 0x00 ; 0
36e: 88 35 cpi r24, 0x58 ; 88
370: 91 05 cpc r25, r1
372: 19 f0 breq .+6 ; 0x37a
374: 80 e0 ldi r24, 0x00 ; 0
376: 90 e0 ldi r25, 0x00 ; 0
378: 08 95 ret
temp=TWDR;//读取I2C接收数据
37a: 93 b1 in r25, 0x03 ; 3
Stop();//I2C停止
37c: 84 e9 ldi r24, 0x94 ; 148
37e: 86 bf out 0x36, r24 ; 54
return temp;
380: 89 2f mov r24, r25
382: 99 27 eor r25, r25
}
384: 08 95 ret
386: 08 95 ret
00000388 <Gettime>:
void Gettime(void)
{
if(N==1)
388: 80 91 66 00 lds r24, 0x0066
38c: 81 30 cpi r24, 0x01 ; 1
38e: a9 f4 brne .+42 ; 0x3ba
{
month=(i2c_Read(5) & 0x1f);
390: 85 e0 ldi r24, 0x05 ; 5
392: 0e 94 61 01 call 0x2c2
396: 99 27 eor r25, r25
398: 8f 71 andi r24, 0x1F ; 31
39a: 90 70 andi r25, 0x00 ; 0
39c: 90 93 61 00 sts 0x0061, r25
3a0: 80 93 60 00 sts 0x0060, r24
date=(i2c_Read(4) & 0x3f);
3a4: 84 e0 ldi r24, 0x04 ; 4
3a6: 0e 94 61 01 call 0x2c2
3aa: 99 27 eor r25, r25
3ac: 8f 73 andi r24, 0x3F ; 63
3ae: 90 70 andi r25, 0x00 ; 0
3b0: 90 93 63 00 sts 0x0063, r25
3b4: 80 93 62 00 sts 0x0062, r24
3b8: 08 95 ret
}
else
{
hours=(i2c_Read(2) & 0x3f);
3ba: 82 e0 ldi r24, 0x02 ; 2
3bc: 0e 94 61 01 call 0x2c2
3c0: 99 27 eor r25, r25
3c2: 8f 73 andi r24, 0x3F ; 63
3c4: 90 70 andi r25, 0x00 ; 0
3c6: 90 93 87 00 sts 0x0087, r25
3ca: 80 93 86 00 sts 0x0086, r24
minutes=(i2c_Read(1) & 0x7f);
3ce: 81 e0 ldi r24, 0x01 ; 1
3d0: 0e 94 61 01 call 0x2c2
3d4: 99 27 eor r25, r25
3d6: 8f 77 andi r24, 0x7F ; 127
3d8: 90 70 andi r25, 0x00 ; 0
3da: 90 93 85 00 sts 0x0085, r25
3de: 80 93 84 00 sts 0x0084, r24
senconds=(i2c_Read(0) & 0x7f);
3e2: 80 e0 ldi r24, 0x00 ; 0
3e4: 0e 94 61 01 call 0x2c2
3e8: 8f 77 andi r24, 0x7F ; 127
3ea: 80 93 78 00 sts 0x0078, r24
3ee: 08 95 ret
3f0: 08 95 ret
000003f2 <time_init>:
}
}
void time_init(void)
{
i2c_Write(0,1);
3f2: 61 e0 ldi r22, 0x01 ; 1
3f4: 80 e0 ldi r24, 0x00 ; 0
3f6: 0e 94 1a 01 call 0x234
3fa: 08 95 ret
000003fc <disp>:
}
void disp(void)
{
3fc: 1f 93 push r17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -