📄 main.lst
字号:
298 .LM34:
299 .L30:
300 0084 06B6 in __tmp_reg__,86-0x20
301 0086 07FE sbrs __tmp_reg__,7
302 0088 FDCF rjmp .L30
93:main.c **** return TW_STATUS;
304 .LM35:
305 008a 81B1 in r24,33-0x20
306 008c 9927 clr r25
307 008e 887F andi r24,lo8(248)
308 0090 9070 andi r25,hi8(248)
94:main.c **** }
310 .LM36:
311 /* epilogue: frame size=0 */
312 0092 0895 ret
313 /* epilogue end (size=1) */
314 /* function twi_writebyte size 11 (10) */
319 .global twi_readbyte
321 twi_readbyte:
95:main.c ****
96:main.c **** //读一字节 ack: true时发ACK,false时发NACK
97:main.c **** uchar twi_readbyte(uchar *c ,uchar ack)
98:main.c **** {
323 .LM37:
324 /* prologue: frame size=0 */
325 /* prologue end (size=0) */
326 0094 FC01 movw r30,r24
99:main.c **** uchar tmp=_BV(TWINT)|_BV(TWEN);
328 .LM38:
329 .LBB4:
330 0096 94E8 ldi r25,lo8(-124)
100:main.c ****
101:main.c **** if(ack)
332 .LM39:
333 0098 6111 cpse r22,__zero_reg__
102:main.c **** tmp|=_BV(TWEA);
335 .LM40:
336 009a 94EC ldi r25,lo8(-60)
337 .L35:
103:main.c **** TWCR=tmp;
339 .LM41:
340 009c 96BF out 86-0x20,r25
104:main.c **** while ((TWCR & _BV(TWINT)) == 0) ;
342 .LM42:
343 .L36:
344 009e 06B6 in __tmp_reg__,86-0x20
345 00a0 07FE sbrs __tmp_reg__,7
346 00a2 FDCF rjmp .L36
105:main.c ****
106:main.c **** *c=TWDR;
348 .LM43:
349 00a4 83B1 in r24,35-0x20
350 00a6 8083 st Z,r24
107:main.c ****
108:main.c **** return TW_STATUS;
352 .LM44:
353 00a8 81B1 in r24,33-0x20
354 00aa 9927 clr r25
355 00ac 887F andi r24,lo8(248)
356 00ae 9070 andi r25,hi8(248)
109:main.c **** }
358 .LM45:
359 .LBE4:
360 /* epilogue: frame size=0 */
361 00b0 0895 ret
362 /* epilogue end (size=1) */
363 /* function twi_readbyte size 16 (15) */
372 .global rtc_write
374 rtc_write:
110:main.c **** /*************主模式TWI操作部分*************结束**************/
111:main.c ****
112:main.c **** /*************DS1307操作**************开始**************/
113:main.c **** //对DS1307内存连续的写操作
114:main.c **** uchar rtc_write(uchar addr,uchar *buf,uchar len)
115:main.c **** {
376 .LM46:
377 /* prologue: frame size=0 */
378 00b2 0F93 push r16
379 00b4 1F93 push r17
380 00b6 CF93 push r28
381 00b8 DF93 push r29
382 /* prologue end (size=4) */
383 00ba 182F mov r17,r24
384 00bc EB01 movw r28,r22
385 00be 042F mov r16,r20
116:main.c **** uchar i;
117:main.c ****
118:main.c **** twi_start();
387 .LM47:
388 .LBB5:
389 00c0 D4DF rcall twi_start
119:main.c **** twi_writebyte(DS1307_ADDR|TW_WRITE);
391 .LM48:
392 00c2 80ED ldi r24,lo8(-48)
393 00c4 DCDF rcall twi_writebyte
120:main.c **** twi_writebyte(addr);//write address
395 .LM49:
396 00c6 812F mov r24,r17
397 00c8 DADF rcall twi_writebyte
121:main.c **** for(i=0;i<len;i++)
399 .LM50:
400 00ca 10E0 ldi r17,lo8(0)
401 00cc 1017 cp r17,r16
402 00ce 40F4 brsh .L47
403 .L45:
122:main.c **** twi_writebyte(buf[i]);
405 .LM51:
406 00d0 FE01 movw r30,r28
407 00d2 E10F add r30,r17
408 00d4 F11D adc r31,__zero_reg__
409 00d6 8081 ld r24,Z
410 00d8 D2DF rcall twi_writebyte
412 .LM52:
413 00da 1F5F subi r17,lo8(-(1))
414 00dc 1017 cp r17,r16
415 00de C0F3 brlo .L45
416 .L47:
123:main.c **** twi_stop();
418 .LM53:
419 00e0 C1DF rcall twi_stop
124:main.c **** return 0;
125:main.c **** }
421 .LM54:
422 .LBE5:
423 00e2 80E0 ldi r24,lo8(0)
424 00e4 90E0 ldi r25,hi8(0)
425 /* epilogue: frame size=0 */
426 00e6 DF91 pop r29
427 00e8 CF91 pop r28
428 00ea 1F91 pop r17
429 00ec 0F91 pop r16
430 00ee 0895 ret
431 /* epilogue end (size=5) */
432 /* function rtc_write size 31 (22) */
441 .global rtc_read
443 rtc_read:
126:main.c ****
127:main.c **** //对DS1307内存连续的读操作
128:main.c **** uchar rtc_read(uchar addr,uchar *buf,uchar len)
129:main.c **** {
445 .LM55:
446 /* prologue: frame size=0 */
447 00f0 FF92 push r15
448 00f2 0F93 push r16
449 00f4 1F93 push r17
450 00f6 CF93 push r28
451 00f8 DF93 push r29
452 /* prologue end (size=5) */
453 00fa EB01 movw r28,r22
454 00fc 142F mov r17,r20
130:main.c **** uchar i;
131:main.c ****
132:main.c **** rtc_write(addr,0,0);//set address
456 .LM56:
457 .LBB6:
458 00fe 40E0 ldi r20,lo8(0)
459 0100 60E0 ldi r22,lo8(0)
460 0102 70E0 ldi r23,hi8(0)
461 0104 D6DF rcall rtc_write
133:main.c ****
134:main.c **** DelayMs(10);
463 .LM57:
464 0106 8AE0 ldi r24,lo8(10)
465 0108 90E0 ldi r25,hi8(10)
466 010a 7ADF rcall DelayMs
135:main.c ****
136:main.c **** twi_start();
468 .LM58:
469 010c AEDF rcall twi_start
137:main.c **** twi_writebyte(DS1307_ADDR|TW_READ);
471 .LM59:
472 010e 81ED ldi r24,lo8(-47)
473 0110 B6DF rcall twi_writebyte
138:main.c **** for(i=0;i<len-1;i++)
475 .LM60:
476 0112 FF24 clr r15
477 0114 012F mov r16,r17
478 0116 1127 clr r17
479 0118 C801 movw r24,r16
480 011a 0197 sbiw r24,1
481 011c 1816 cp __zero_reg__,r24
482 011e 1906 cpc __zero_reg__,r25
483 0120 6CF4 brge .L55
484 .L53:
139:main.c **** twi_readbyte(buf+i,TW_ACK);
486 .LM61:
487 0122 CE01 movw r24,r28
488 0124 8F0D add r24,r15
489 0126 911D adc r25,__zero_reg__
490 0128 61E0 ldi r22,lo8(1)
491 012a B4DF rcall twi_readbyte
493 .LM62:
494 012c F394 inc r15
495 012e 2F2D mov r18,r15
496 0130 3327 clr r19
497 0132 C801 movw r24,r16
498 0134 0197 sbiw r24,1
499 0136 2817 cp r18,r24
500 0138 3907 cpc r19,r25
501 013a 9CF3 brlt .L53
502 .L55:
140:main.c **** twi_readbyte(buf+i,TW_NACK);
504 .LM63:
505 013c CF0D add r28,r15
506 013e D11D adc r29,__zero_reg__
507 0140 60E0 ldi r22,lo8(0)
508 0142 CE01 movw r24,r28
509 0144 A7DF rcall twi_readbyte
141:main.c ****
142:main.c **** twi_stop();
511 .LM64:
512 0146 8EDF rcall twi_stop
143:main.c **** return 0;
144:main.c **** }
514 .LM65:
515 .LBE6:
516 0148 80E0 ldi r24,lo8(0)
517 014a 90E0 ldi r25,hi8(0)
518 /* epilogue: frame size=0 */
519 014c DF91 pop r29
520 014e CF91 pop r28
521 0150 1F91 pop r17
522 0152 0F91 pop r16
523 0154 FF90 pop r15
524 0156 0895 ret
525 /* epilogue end (size=6) */
526 /* function rtc_read size 52 (41) */
532 .global RtcInit
534 RtcInit:
145:main.c **** /*************DS1307操作**************结束**************/
146:main.c ****
147:main.c **** /*************接口部分****************开始**************/
148:main.c ****
149:main.c **** //初始化TWI功能
150:main.c **** void RtcInit(void)
151:main.c **** {
536 .LM66:
537 /* prologue: frame size=0 */
538 /* prologue end (size=0) */
152:main.c **** TWBR=73;
540 .LM67:
541 0158 89E4 ldi r24,lo8(73)
542 015a 80B9 out 32-0x20,r24
153:main.c **** }
544 .LM68:
545 /* epilogue: frame size=0 */
546 015c 0895 ret
547 /* epilogue end (size=1) */
548 /* function RtcInit size 3 (2) */
552 .global RtcUpdateData
554 RtcUpdateData:
154:main.c ****
155:main.c **** //更新或读取DS1307日历/时间数据
156:main.c **** uchar RtcUpdateData(uchar direction)
157:main.c **** {
556 .LM69:
557 /* prologue: frame size=0 */
558 /* prologue end (size=0) */
158:main.c **** uchar ret;
159:main.c **** if(direction) //读
560 .LM70:
561 .LBB7:
562 015e 8823 tst r24
563 0160 31F0 breq .L58
160:main.c **** {
161:main.c **** ret=rtc_read(0,g_aTimeBuf,7);
565 .LM71:
566 0162 47E0 ldi r20,lo8(7)
567 0164 60E0 ldi r22,lo8(g_aTimeBuf)
568 0166 70E0 ldi r23,hi8(g_aTimeBuf)
569 0168 80E0 ldi r24,lo8(0)
570 016a C2DF rcall rtc_read
571 016c 04C0 rjmp .L59
572 .L58:
162:main.c **** }
163:main.c **** else //写
164:main.c **** {
165:main.c **** ret=rtc_write(0,g_aTimeBuf,7);
574 .LM72:
575 016e 47E0 ldi r20,lo8(7)
576 0170 60E0 ldi r22,lo8(g_aTimeBuf)
577 0172 70E0 ldi r23,hi8(g_aTimeBuf)
578 0174 9EDF rcall rtc_write
579 .L59:
166:main.c **** }
167:main.c **** return ret;
581 .LM73:
582 0176 9927 clr r25
168:main.c **** }
584 .LM74:
585 .LBE7:
586 /* epilogue: frame size=0 */
587 0178 0895 ret
588 /* epilogue end (size=1) */
589 /* function RtcUpdateData size 14 (13) */
598 .global RtcReadRAM
600 RtcReadRAM:
169:main.c **** //读DS1307用户RAM
170:main.c **** uchar RtcReadRAM(uchar addr,uchar *buf,uchar len)
171:main.c **** {
602 .LM75:
603 /* prologue: frame size=0 */
604 /* prologue end (size=0) */
172:main.c **** addr+=8;
606 .LM76:
607 017a 885F subi r24,lo8(-(8))
173:main.c **** return rtc_read(addr,buf,len);
609 .LM77:
610 017c B9DF rcall rtc_read
611 017e 9927 clr r25
174:main.c **** }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -