📄 main.lss
字号:
twi_writebyte(buf[i]);
20e: fe 01 movw r30, r28
210: e1 0f add r30, r17
212: f1 1d adc r31, r1
214: 80 81 ld r24, Z
216: d2 df rcall .-92 ; 0x1bc
218: 1f 5f subi r17, 0xFF ; 255
21a: 10 17 cp r17, r16
21c: c0 f3 brcs .-16 ; 0x20e
twi_stop();
21e: c1 df rcall .-126 ; 0x1a2
return 0;
}
220: 80 e0 ldi r24, 0x00 ; 0
222: 90 e0 ldi r25, 0x00 ; 0
224: df 91 pop r29
226: cf 91 pop r28
228: 1f 91 pop r17
22a: 0f 91 pop r16
22c: 08 95 ret
0000022e <rtc_read>:
//对DS1307内存连续的读操作
uchar rtc_read(uchar addr,uchar *buf,uchar len)
{
22e: ff 92 push r15
230: 0f 93 push r16
232: 1f 93 push r17
234: cf 93 push r28
236: df 93 push r29
238: eb 01 movw r28, r22
23a: 14 2f mov r17, r20
uchar i;
rtc_write(addr,0,0);//set address
23c: 40 e0 ldi r20, 0x00 ; 0
23e: 60 e0 ldi r22, 0x00 ; 0
240: 70 e0 ldi r23, 0x00 ; 0
242: d6 df rcall .-84 ; 0x1f0
DelayMs(10);
244: 8a e0 ldi r24, 0x0A ; 10
246: 90 e0 ldi r25, 0x00 ; 0
248: 7a df rcall .-268 ; 0x13e
twi_start();
24a: ae df rcall .-164 ; 0x1a8
twi_writebyte(DS1307_ADDR|TW_READ);
24c: 81 ed ldi r24, 0xD1 ; 209
24e: b6 df rcall .-148 ; 0x1bc
for(i=0;i<len-1;i++)
250: ff 24 eor r15, r15
252: 01 2f mov r16, r17
254: 11 27 eor r17, r17
256: c8 01 movw r24, r16
258: 01 97 sbiw r24, 0x01 ; 1
25a: 18 16 cp r1, r24
25c: 19 06 cpc r1, r25
25e: 6c f4 brge .+26 ; 0x27a
twi_readbyte(buf+i,TW_ACK);
260: ce 01 movw r24, r28
262: 8f 0d add r24, r15
264: 91 1d adc r25, r1
266: 61 e0 ldi r22, 0x01 ; 1
268: b4 df rcall .-152 ; 0x1d2
26a: f3 94 inc r15
26c: 2f 2d mov r18, r15
26e: 33 27 eor r19, r19
270: c8 01 movw r24, r16
272: 01 97 sbiw r24, 0x01 ; 1
274: 28 17 cp r18, r24
276: 39 07 cpc r19, r25
278: 9c f3 brlt .-26 ; 0x260
twi_readbyte(buf+i,TW_NACK);
27a: cf 0d add r28, r15
27c: d1 1d adc r29, r1
27e: 60 e0 ldi r22, 0x00 ; 0
280: ce 01 movw r24, r28
282: a7 df rcall .-178 ; 0x1d2
twi_stop();
284: 8e df rcall .-228 ; 0x1a2
return 0;
}
286: 80 e0 ldi r24, 0x00 ; 0
288: 90 e0 ldi r25, 0x00 ; 0
28a: df 91 pop r29
28c: cf 91 pop r28
28e: 1f 91 pop r17
290: 0f 91 pop r16
292: ff 90 pop r15
294: 08 95 ret
00000296 <RtcInit>:
/*************DS1307操作**************结束**************/
/*************接口部分****************开始**************/
//初始化TWI功能
void RtcInit(void)
{
TWBR=73;
296: 89 e4 ldi r24, 0x49 ; 73
298: 80 b9 out 0x00, r24 ; 0
}
29a: 08 95 ret
0000029c <RtcUpdateData>:
//更新或读取DS1307日历/时间数据
uchar RtcUpdateData(uchar direction)
{
uchar ret;
if(direction) //读
29c: 88 23 and r24, r24
29e: 31 f0 breq .+12 ; 0x2ac
{
ret=rtc_read(0,g_aTimeBuf,7);
2a0: 47 e0 ldi r20, 0x07 ; 7
2a2: 69 e8 ldi r22, 0x89 ; 137
2a4: 70 e0 ldi r23, 0x00 ; 0
2a6: 80 e0 ldi r24, 0x00 ; 0
2a8: c2 df rcall .-124 ; 0x22e
2aa: 04 c0 rjmp .+8 ; 0x2b4
}
else //写
{
ret=rtc_write(0,g_aTimeBuf,7);
2ac: 47 e0 ldi r20, 0x07 ; 7
2ae: 69 e8 ldi r22, 0x89 ; 137
2b0: 70 e0 ldi r23, 0x00 ; 0
2b2: 9e df rcall .-196 ; 0x1f0
}
return ret;
2b4: 99 27 eor r25, r25
}
2b6: 08 95 ret
000002b8 <RtcReadRAM>:
//读DS1307用户RAM
uchar RtcReadRAM(uchar addr,uchar *buf,uchar len)
{
addr+=8;
2b8: 88 5f subi r24, 0xF8 ; 248
return rtc_read(addr,buf,len);
2ba: b9 df rcall .-142 ; 0x22e
2bc: 99 27 eor r25, r25
}
2be: 08 95 ret
000002c0 <RtcWriteRAM>:
//写DS1307用户RAM
uchar RtcWriteRAM(uchar addr,uchar *buf,uchar len)
{
addr+=8;
2c0: 88 5f subi r24, 0xF8 ; 248
return rtc_write(addr,buf,len);
2c2: 96 df rcall .-212 ; 0x1f0
2c4: 99 27 eor r25, r25
}
2c6: 08 95 ret
000002c8 <byte_bintobcd>:
uchar byte_bintobcd(uchar bin)
{
uchar ret;
bin&=0x7f;
2c8: 8f 77 andi r24, 0x7F ; 127
bin%=100;
2ca: 64 e6 ldi r22, 0x64 ; 100
2cc: 81 d6 rcall .+3330 ; 0xfd0
2ce: 39 2f mov r19, r25
ret=bin/10;
2d0: 4a e0 ldi r20, 0x0A ; 10
2d2: 89 2f mov r24, r25
2d4: 64 2f mov r22, r20
2d6: 7c d6 rcall .+3320 ; 0xfd0
2d8: 28 2f mov r18, r24
ret <<=4;
2da: 22 95 swap r18
2dc: 20 7f andi r18, 0xF0 ; 240
ret|=bin%10;
2de: 83 2f mov r24, r19
2e0: 77 d6 rcall .+3310 ; 0xfd0
2e2: 29 2b or r18, r25
return ret;
2e4: 82 2f mov r24, r18
2e6: 99 27 eor r25, r25
}
2e8: 08 95 ret
000002ea <byte_bcdtobin>:
uchar byte_bcdtobin(uchar bcd)
{
uchar ret;
ret=bcd & 0x0f;
2ea: 28 2f mov r18, r24
2ec: 2f 70 andi r18, 0x0F ; 15
ret+=(bcd>>4)*10;
2ee: 82 95 swap r24
2f0: 8f 70 andi r24, 0x0F ; 15
2f2: 9a e0 ldi r25, 0x0A ; 10
2f4: 89 9f mul r24, r25
2f6: c0 01 movw r24, r0
2f8: 11 24 eor r1, r1
2fa: 28 0f add r18, r24
return ret;
2fc: 82 2f mov r24, r18
2fe: 99 27 eor r25, r25
}
300: 08 95 ret
00000302 <RtcBinToBCD>:
//将二进制格式缓冲区(g_aTimeBin)内容转换成BCD格式后保存到BCD格式缓冲区(g_aTimeBuf)
void RtcBinToBCD()
{
302: ff 92 push r15
304: 0f 93 push r16
306: 1f 93 push r17
308: cf 93 push r28
30a: df 93 push r29
uchar i;
g_aTimeBin[0]&=0x7f;
30c: 80 91 82 00 lds r24, 0x0082
310: 8f 77 andi r24, 0x7F ; 127
312: 80 93 82 00 sts 0x0082, r24
g_aTimeBin[1]&=0x7f;
316: 80 91 83 00 lds r24, 0x0083
31a: 8f 77 andi r24, 0x7F ; 127
31c: 80 93 83 00 sts 0x0083, r24
g_aTimeBin[2]&=0x3f;
320: 80 91 84 00 lds r24, 0x0084
324: 8f 73 andi r24, 0x3F ; 63
326: 80 93 84 00 sts 0x0084, r24
g_aTimeBin[3]&=0x07;
32a: 80 91 85 00 lds r24, 0x0085
32e: 87 70 andi r24, 0x07 ; 7
330: 80 93 85 00 sts 0x0085, r24
g_aTimeBin[4]&=0x3f;
334: 80 91 86 00 lds r24, 0x0086
338: 8f 73 andi r24, 0x3F ; 63
33a: 80 93 86 00 sts 0x0086, r24
g_aTimeBin[5]&=0x1f;
33e: 80 91 87 00 lds r24, 0x0087
342: 8f 71 andi r24, 0x1F ; 31
344: 80 93 87 00 sts 0x0087, r24
g_aTimeBin[6]&=0xff;
for(i=0;i<7;i++)
348: ff 24 eor r15, r15
34a: 09 e8 ldi r16, 0x89 ; 137
34c: 10 e0 ldi r17, 0x00 ; 0
34e: c2 e8 ldi r28, 0x82 ; 130
350: d0 e0 ldi r29, 0x00 ; 0
g_aTimeBuf[i]=byte_bintobcd(g_aTimeBin[i]);
352: 89 91 ld r24, Y+
354: b9 df rcall .-142 ; 0x2c8
356: f8 01 movw r30, r16
358: 81 93 st Z+, r24
35a: 8f 01 movw r16, r30
35c: f3 94 inc r15
35e: f6 e0 ldi r31, 0x06 ; 6
360: ff 15 cp r31, r15
362: b8 f7 brcc .-18 ; 0x352
}
364: df 91 pop r29
366: cf 91 pop r28
368: 1f 91 pop r17
36a: 0f 91 pop r16
36c: ff 90 pop r15
36e: 08 95 ret
00000370 <RtcBCDToBin>:
//将BCD格式缓冲区(g_aTimeBuf)内容转换成二进制格式后保存到二进制格式缓冲区(g_aTimeBin)
void RtcBCDToBin()
{
370: ff 92 push r15
372: 0f 93 push r16
374: 1f 93 push r17
376: cf 93 push r28
378: df 93 push r29
uchar i;
for(i=0;i<7;i++)
37a: ff 24 eor r15, r15
37c: 02 e8 ldi r16, 0x82 ; 130
37e: 10 e0 ldi r17, 0x00 ; 0
380: c9 e8 ldi r28, 0x89 ; 137
382: d0 e0 ldi r29, 0x00 ; 0
g_aTimeBin[i]=byte_bcdtobin(g_aTimeBuf[i]);
384: 89 91 ld r24, Y+
386: b1 df rcall .-158 ; 0x2ea
388: f8 01 movw r30, r16
38a: 81 93 st Z+, r24
38c: 8f 01 movw r16, r30
38e: f3 94 inc r15
390: f6 e0 ldi r31, 0x06 ; 6
392: ff 15 cp r31, r15
394: b8 f7 brcc .-18 ; 0x384
}
396: df 91 pop r29
398: cf 91 pop r28
39a: 1f 91 pop r17
39c: 0f 91 pop r16
39e: ff 90 pop r15
3a0: 08 95 ret
000003a2 <RtcSetSQWOutput>:
//写DS1307配置字节
void RtcSetSQWOutput(uchar en,uchar level)
{
3a2: cf 93 push r28
3a4: df 93 push r29
3a6: cd b7 in r28, 0x3d ; 61
3a8: de b7 in r29, 0x3e ; 62
3aa: 21 97 sbiw r28, 0x01 ; 1
3ac: 0f b6 in r0, 0x3f ; 63
3ae: f8 94 cli
3b0: de bf out 0x3e, r29 ; 62
3b2: 0f be out 0x3f, r0 ; 63
3b4: cd bf out 0x3d, r28 ; 61
//bEn:方波输出允许 TRUE 有效 level:如果输出禁止 OUT口的逻辑电平
uchar c=0;
3b6: 19 82 std Y+1, r1 ; 0x01
if(en) //enable
3b8: 88 23 and r24, r24
3ba: 11 f0 breq .+4 ; 0x3c0
c=0x10;
3bc: 80 e1 ldi r24, 0x10 ; 16
3be: 03 c0 rjmp .+6 ; 0x3c6
else //disable
{
if(level)
3c0: 66 23 and r22, r22
3c2: 11 f0 breq .+4 ; 0x3c8
c=0x80;
3c4: 80 e8 ldi r24, 0x80 ; 128
3c6: 89 83 std Y+1, r24 ; 0x01
}
rtc_write(7,&c,1);
3c8: 41 e0 ldi r20, 0x01 ; 1
3ca: be 01 movw r22, r28
3cc: 6f 5f subi r22, 0xFF ; 255
3ce: 7f 4f sbci r23, 0xFF ; 255
3d0: 87 e0 ldi r24, 0x07 ; 7
3d2: 0e df rcall .-484 ; 0x1f0
}
3d4: 21 96 adiw r28, 0x01 ; 1
3d6: 0f b6 in r0, 0x3f ; 63
3d8: f8 94 cli
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -