📄 main.lss
字号:
22e: 99 27 eor r25, r25
230: 88 7f andi r24, 0xF8 ; 248
232: 90 70 andi r25, 0x00 ; 0
234: 88 97 sbiw r24, 0x28 ; 40
236: 61 f4 brne .+24 ; 0x250
Write8Bit(Wdata);//写数据到24C02的ROM
238: 23 b9 out 0x03, r18 ; 3
23a: 84 e8 ldi r24, 0x84 ; 132
23c: 86 bf out 0x36, r24 ; 54
Wait();
23e: 06 b6 in r0, 0x36 ; 54
240: 07 fe sbrs r0, 7
242: fd cf rjmp .-6 ; 0x23e
if(TestAck()!=MT_DATA_ACK) return 1;//ACK
244: 81 b1 in r24, 0x01 ; 1
246: 99 27 eor r25, r25
248: 88 7f andi r24, 0xF8 ; 248
24a: 90 70 andi r25, 0x00 ; 0
24c: 88 97 sbiw r24, 0x28 ; 40
24e: 19 f0 breq .+6 ; 0x256
250: 81 e0 ldi r24, 0x01 ; 1
252: 90 e0 ldi r25, 0x00 ; 0
254: 08 95 ret
Stop();//I2C停止
256: 84 e9 ldi r24, 0x94 ; 148
258: 86 bf out 0x36, r24 ; 54
delay_ms(10);//延时等EEPROM写完
25a: 8a e0 ldi r24, 0x0A ; 10
25c: 90 e0 ldi r25, 0x00 ; 0
25e: 0e 94 5b 00 call 0xb6
return 0;
262: 80 e0 ldi r24, 0x00 ; 0
264: 90 e0 ldi r25, 0x00 ; 0
}
266: 08 95 ret
268: 08 95 ret
0000026a <i2c_Read>:
unsigned char i2c_Read(unsigned char RomAddress)
{
26a: 28 2f mov r18, r24
unsigned char temp;
Start();//I2C启动
26c: 84 ea ldi r24, 0xA4 ; 164
26e: 86 bf out 0x36, r24 ; 54
Wait();
270: 06 b6 in r0, 0x36 ; 54
272: 07 fe sbrs r0, 7
274: fd cf rjmp .-6 ; 0x270
if (TestAck()!=START) return 0;//ACK
276: 81 b1 in r24, 0x01 ; 1
278: 99 27 eor r25, r25
27a: 88 7f andi r24, 0xF8 ; 248
27c: 90 70 andi r25, 0x00 ; 0
27e: 08 97 sbiw r24, 0x08 ; 8
280: 09 f0 breq .+2 ; 0x284
282: 3e c0 rjmp .+124 ; 0x300
Write8Bit(wr_device_add);//写I2C从器件地址和写方式
284: 80 ed ldi r24, 0xD0 ; 208
286: 83 b9 out 0x03, r24 ; 3
288: 84 e8 ldi r24, 0x84 ; 132
28a: 86 bf out 0x36, r24 ; 54
Wait();
28c: 06 b6 in r0, 0x36 ; 54
28e: 07 fe sbrs r0, 7
290: fd cf rjmp .-6 ; 0x28c
if (TestAck()!=MT_SLA_ACK) return 0;//ACK
292: 81 b1 in r24, 0x01 ; 1
294: 99 27 eor r25, r25
296: 88 7f andi r24, 0xF8 ; 248
298: 90 70 andi r25, 0x00 ; 0
29a: 48 97 sbiw r24, 0x18 ; 24
29c: 89 f5 brne .+98 ; 0x300
Write8Bit(RomAddress);//写ROM地址
29e: 23 b9 out 0x03, r18 ; 3
2a0: 84 e8 ldi r24, 0x84 ; 132
2a2: 86 bf out 0x36, r24 ; 54
Wait();
2a4: 06 b6 in r0, 0x36 ; 54
2a6: 07 fe sbrs r0, 7
2a8: fd cf rjmp .-6 ; 0x2a4
if (TestAck()!=MT_DATA_ACK) return 0;
2aa: 81 b1 in r24, 0x01 ; 1
2ac: 99 27 eor r25, r25
2ae: 88 7f andi r24, 0xF8 ; 248
2b0: 90 70 andi r25, 0x00 ; 0
2b2: 88 97 sbiw r24, 0x28 ; 40
2b4: 29 f5 brne .+74 ; 0x300
Start();//I2C重新启动
2b6: 84 ea ldi r24, 0xA4 ; 164
2b8: 86 bf out 0x36, r24 ; 54
Wait();
2ba: 06 b6 in r0, 0x36 ; 54
2bc: 07 fe sbrs r0, 7
2be: fd cf rjmp .-6 ; 0x2ba
if (TestAck()!=RE_START) return 0;
2c0: 81 b1 in r24, 0x01 ; 1
2c2: 99 27 eor r25, r25
2c4: 88 7f andi r24, 0xF8 ; 248
2c6: 90 70 andi r25, 0x00 ; 0
2c8: 40 97 sbiw r24, 0x10 ; 16
2ca: d1 f4 brne .+52 ; 0x300
Write8Bit(rd_device_add);//写I2C从器件地址和读方式
2cc: 81 ed ldi r24, 0xD1 ; 209
2ce: 83 b9 out 0x03, r24 ; 3
2d0: 84 e8 ldi r24, 0x84 ; 132
2d2: 86 bf out 0x36, r24 ; 54
Wait();
2d4: 06 b6 in r0, 0x36 ; 54
2d6: 07 fe sbrs r0, 7
2d8: fd cf rjmp .-6 ; 0x2d4
if(TestAck()!=MR_SLA_ACK) return 0;//ACK
2da: 81 b1 in r24, 0x01 ; 1
2dc: 99 27 eor r25, r25
2de: 88 7f andi r24, 0xF8 ; 248
2e0: 90 70 andi r25, 0x00 ; 0
2e2: 80 34 cpi r24, 0x40 ; 64
2e4: 91 05 cpc r25, r1
2e6: 61 f4 brne .+24 ; 0x300
Twi();//启动主I2C读方式
2e8: 84 e8 ldi r24, 0x84 ; 132
2ea: 86 bf out 0x36, r24 ; 54
Wait();
2ec: 06 b6 in r0, 0x36 ; 54
2ee: 07 fe sbrs r0, 7
2f0: fd cf rjmp .-6 ; 0x2ec
if(TestAck()!=MR_DATA_NOACK) return 0;//ACK
2f2: 81 b1 in r24, 0x01 ; 1
2f4: 99 27 eor r25, r25
2f6: 88 7f andi r24, 0xF8 ; 248
2f8: 90 70 andi r25, 0x00 ; 0
2fa: 88 35 cpi r24, 0x58 ; 88
2fc: 91 05 cpc r25, r1
2fe: 19 f0 breq .+6 ; 0x306
300: 80 e0 ldi r24, 0x00 ; 0
302: 90 e0 ldi r25, 0x00 ; 0
304: 08 95 ret
temp=TWDR;//读取I2C接收数据
306: 93 b1 in r25, 0x03 ; 3
Stop();//I2C停止
308: 84 e9 ldi r24, 0x94 ; 148
30a: 86 bf out 0x36, r24 ; 54
return temp;
30c: 89 2f mov r24, r25
30e: 99 27 eor r25, r25
}
310: 08 95 ret
312: 08 95 ret
00000314 <Gettime>:
void Gettime(void)
{
month=(i2c_Read(5) & 0x1f);
314: 85 e0 ldi r24, 0x05 ; 5
316: 0e 94 35 01 call 0x26a
31a: 99 27 eor r25, r25
31c: 8f 71 andi r24, 0x1F ; 31
31e: 90 70 andi r25, 0x00 ; 0
320: 90 93 63 00 sts 0x0063, r25
324: 80 93 62 00 sts 0x0062, r24
date=(i2c_Read(4) & 0x3f);
328: 84 e0 ldi r24, 0x04 ; 4
32a: 0e 94 35 01 call 0x26a
32e: 99 27 eor r25, r25
330: 8f 73 andi r24, 0x3F ; 63
332: 90 70 andi r25, 0x00 ; 0
334: 90 93 61 00 sts 0x0061, r25
338: 80 93 60 00 sts 0x0060, r24
hours=(i2c_Read(2) & 0x3f);
33c: 82 e0 ldi r24, 0x02 ; 2
33e: 0e 94 35 01 call 0x26a
342: 99 27 eor r25, r25
344: 8f 73 andi r24, 0x3F ; 63
346: 90 70 andi r25, 0x00 ; 0
348: 90 93 6b 00 sts 0x006B, r25
34c: 80 93 6a 00 sts 0x006A, r24
minutes=(i2c_Read(1) & 0x7f);
350: 81 e0 ldi r24, 0x01 ; 1
352: 0e 94 35 01 call 0x26a
356: 99 27 eor r25, r25
358: 8f 77 andi r24, 0x7F ; 127
35a: 90 70 andi r25, 0x00 ; 0
35c: 90 93 69 00 sts 0x0069, r25
360: 80 93 68 00 sts 0x0068, r24
senconds=(i2c_Read(0) & 0x7f);
364: 80 e0 ldi r24, 0x00 ; 0
366: 0e 94 35 01 call 0x26a
36a: 8f 77 andi r24, 0x7F ; 127
36c: 80 93 65 00 sts 0x0065, r24
370: 08 95 ret
00000372 <time_init>:
}
void time_init(void)
{
i2c_Write(0,1);
372: 61 e0 ldi r22, 0x01 ; 1
374: 80 e0 ldi r24, 0x00 ; 0
376: 0e 94 f7 00 call 0x1ee
i2c_Write(0,2);
37a: 62 e0 ldi r22, 0x02 ; 2
37c: 80 e0 ldi r24, 0x00 ; 0
37e: 0e 94 f7 00 call 0x1ee
i2c_Write(0,3);
382: 63 e0 ldi r22, 0x03 ; 3
384: 80 e0 ldi r24, 0x00 ; 0
386: 0e 94 f7 00 call 0x1ee
i2c_Write(0,4);
38a: 64 e0 ldi r22, 0x04 ; 4
38c: 80 e0 ldi r24, 0x00 ; 0
38e: 0e 94 f7 00 call 0x1ee
i2c_Write(0,5);
392: 65 e0 ldi r22, 0x05 ; 5
394: 80 e0 ldi r24, 0x00 ; 0
396: 0e 94 f7 00 call 0x1ee
39a: 08 95 ret
0000039c <disp>:
}
void disp(void)
{
a=HIBYTE(hours);
39c: 80 91 6a 00 lds r24, 0x006A
3a0: 90 91 6b 00 lds r25, 0x006B
3a4: 34 e0 ldi r19, 0x04 ; 4
3a6: 95 95 asr r25
3a8: 87 95 ror r24
3aa: 3a 95 dec r19
3ac: e1 f7 brne .-8 ; 0x3a6
3ae: 80 93 67 00 sts 0x0067, r24
b=HIBYTE(minutes);
3b2: 80 91 68 00 lds r24, 0x0068
3b6: 90 91 69 00 lds r25, 0x0069
3ba: 24 e0 ldi r18, 0x04 ; 4
3bc: 95 95 asr r25
3be: 87 95 ror r24
3c0: 2a 95 dec r18
3c2: e1 f7 brne .-8 ; 0x3bc
3c4: 80 93 64 00 sts 0x0064, r24
c=HIBYTE(senconds);
3c8: 80 91 65 00 lds r24, 0x0065
3cc: 82 95 swap r24
3ce: 8f 70 andi r24, 0x0F ; 15
3d0: 80 93 66 00 sts 0x0066, r24
if(a==0) a=10;
3d4: 80 91 67 00 lds r24, 0x0067
3d8: 88 23 and r24, r24
3da: 19 f4 brne .+6 ; 0x3e2
3dc: 8a e0 ldi r24, 0x0A ; 10
3de: 80 93 67 00 sts 0x0067, r24
if(b==0) b=10;
3e2: 80 91 64 00 lds r24, 0x0064
3e6: 88 23 and r24, r24
3e8: 19 f4 brne .+6 ; 0x3f0
3ea: 8a e0 ldi r24, 0x0A ; 10
3ec: 80 93 64 00 sts 0x0064, r24
if(c==0) c=10;
3f0: 80 91 66 00 lds r24, 0x0066
3f4: 88 23 and r24, r24
3f6: 19 f4 brne .+6 ; 0x3fe
3f8: 8a e0 ldi r24, 0x0A ; 10
3fa: 80 93 66 00 sts 0x0066, r24
SENDCOMB(0x1c); //Write address
3fe: 8c e1 ldi r24, 0x1C ; 28
400: 0e 94 bf 00 call 0x17e
SendByte(pgm_read_byte(S+a)); //write data
404: 80 91 67 00 lds r24, 0x0067
408: e8 2f mov r30, r24
40a: ff 27 eor r31, r31
40c: ec 5a subi r30, 0xAC ; 172
40e: ff 4f sbci r31, 0xFF ; 255
410: 84 91 lpm r24, Z
412: 0e 94 ae 00 call 0x15c
SendByte(pgm_read_byte(S+LOBYTE(hours))); //write data
416: 80 91 6a 00 lds r24, 0x006A
41a: 90 91 6b 00 lds r25, 0x006B
41e: e8 2f mov r30, r24
420: ff 27 eor r31, r31
422: ef 70 andi r30, 0x0F ; 15
424: f0 70 andi r31, 0x00 ; 0
426: ec 5a subi r30, 0xAC ; 172
428: ff 4f sbci r31, 0xFF ; 255
42a: 84 91 lpm r24, Z
42c: 0e 94 ae 00 call 0x15c
SendByte(pgm_read_byte(S+b)); //write data
430: 80 91 64 00 lds r24, 0x0064
434: e8 2f mov r30, r24
436: ff 27 eor r31, r31
438: ec 5a subi r30, 0xAC ; 172
43a: ff 4f sbci r31, 0xFF ; 255
43c: 84 91 lpm r24, Z
43e: 0e 94 ae 00 call 0x15c
SendByte(pgm_read_byte(S+LOBYTE(minutes))); //write data
442: 80 91 68 00 lds r24, 0x0068
446: 90 91 69 00 lds r25, 0x0069
44a: e8 2f mov r30, r24
44c: ff 27 eor r31, r31
44e: ef 70 andi r30, 0x0F ; 15
450: f0 70 andi r31, 0x00 ; 0
452: ec 5a subi r30, 0xAC ; 172
454: ff 4f sbci r31, 0xFF ; 255
456: 84 91 lpm r24, Z
458: 0e 94 ae 00 call 0x15c
SendByte(pgm_read_byte(S+c)); //write data
45c: 80 91 66 00 lds r24, 0x0066
460: e8 2f mov r30, r24
462: ff 27 eor r31, r31
464: ec 5a subi r30, 0xAC ; 172
466: ff 4f sbci r31, 0xFF ; 255
468: 84 91 lpm r24, Z
46a: 0e 94 ae 00 call 0x15c
SendByte(pgm_read_byte(S+LOBYTE(senconds))); //write data
46e: 80 91 65 00 lds r24, 0x0065
472: e8 2f mov r30, r24
474: ff 27 eor r31, r31
476: ef 70 andi r30, 0x0F ; 15
478: f0 70 andi r31, 0x00 ; 0
47a: ec 5a subi r30, 0xAC ; 172
47c: ff 4f sbci r31, 0xFF ; 255
47e: 84 91 lpm r24, Z
480: 0e 94 ae 00 call 0x15c
484: 08 95 ret
00000486 <__vector_8>:
/*
a=HIBYTE(month);
b=HIBYTE(date);
SENDCOMB(0x2c); //Write address
SendByte(pgm_read_byte(S+a)); //write data
SendByte(pgm_read_byte(S+LOBYTE(month))); //write data
SendByte(pgm_read_byte(S+HIBYTE(date))); //write data
SendByte((pgm_read_byte(S+LOBYTE(date))); //write data
*/
}
//#pragma interrupt_handler timer1_ovf:9
//void timer1_ovf(void) //位闪动即修改
SIGNAL(SIG_OVERFLOW1)
{
486: 1f 92 push r1
488: 0f 92 push r0
48a: 0f b6 in r0, 0x3f ; 63
48c: 0f 92 push r0
48e: 11 24 eor r1, r1
490: 2f 93 push r18
492: 3f 93 push r19
494: 4f 93 push r20
496: 5f 93 push r21
498: 6f 93 push r22
49a: 7f 93 push r23
49c: 8f 93 push r24
49e: 9f 93 push r25
4a0: af 93 push r26
4a2: bf 93 push r27
4a4: ef 93 push r30
4a6: ff 93 push r31
TCNT1H=0xc2;
4a8: 82 ec ldi r24, 0xC2 ; 194
4aa: 8d bd out 0x2d, r24 ; 45
TCNT1L=0xf7;
4ac: 87 ef ldi r24, 0xF7 ; 247
4ae: 8c bd out 0x2c, r24 ; 44
TCCR1B=0x04;
4b0: 84 e0 ldi r24, 0x04 ; 4
4b2: 8e bd out 0x2e, r24 ; 46
Gettime();
4b4: 0e 94 8a 01 call 0x314
disp();
4b8: 0e 94 ce 01 call 0x39c
4bc: ff 91 pop r31
4be: ef 91 pop r30
4c0: bf 91 pop r27
4c2: af 91 pop r26
4c4: 9f 91 pop r25
4c6: 8f 91 pop r24
4c8: 7f 91 pop r23
4ca: 6f 91 pop r22
4cc: 5f 91 pop r21
4ce: 4f 91 pop r20
4d0: 3f 91 pop r19
4d2: 2f 91 pop r18
4d4: 0f 90 pop r0
4d6: 0f be out 0x3f, r0 ; 63
4d8: 0f 90 pop r0
4da: 1f 90 pop r1
4dc: 18 95 reti
000004de <start_t1>:
}
void start_t1(void)
{
TCNT1H=0xc2;
4de: 82 ec ldi r24, 0xC2 ; 194
4e0: 8d bd out 0x2d, r24 ; 45
TCNT1L=0xf7; //设初值
4e2: 87 ef ldi r24, 0xF7 ; 247
4e4: 8c bd out 0x2c, r24 ; 44
TCCR1B=0X05; //启动定时器1,采用1024分频
4e6: 85 e0 ldi r24, 0x05 ; 5
4e8: 8e bd out 0x2e, r24 ; 46
TIMSK|=(1<<TOIE1);
4ea: 89 b7 in r24, 0x39 ; 57
4ec: 84 60 ori r24, 0x04 ; 4
4ee: 89 bf out 0x39, r24 ; 57
sei();
4f0: 78 94 sei
4f2: 08 95 ret
000004f4 <main>:
}
int main(void)
{
4f4: cf e5 ldi r28, 0x5F ; 95
4f6: d4 e0 ldi r29, 0x04 ; 4
4f8: de bf out 0x3e, r29 ; 62
4fa: cd bf out 0x3d, r28 ; 61
port_init();
4fc: 0e 94 4d 00 call 0x9a
disp_init();
500: 0e 94 cd 00 call 0x19a
I2C_init();
504: 0e 94 f3 00 call 0x1e6
time_init();
508: 0e 94 b9 01 call 0x372
delay_ms(10);
50c: 8a e0 ldi r24, 0x0A ; 10
50e: 90 e0 ldi r25, 0x00 ; 0
510: 0e 94 5b 00 call 0xb6
start_t1();
514: 0e 94 6f 02 call 0x4de
while(1)
{
delay_ms(100);
518: 84 e6 ldi r24, 0x64 ; 100
51a: 90 e0 ldi r25, 0x00 ; 0
51c: 0e 94 5b 00 call 0xb6
520: fb cf rjmp .-10 ; 0x518
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -