📄 dtmf2.lst
字号:
368 .LM50:
369 /* prologue: frame size=0 */
370 012c 1F92 push __zero_reg__
371 012e 0F92 push __tmp_reg__
372 0130 0FB6 in __tmp_reg__,__SREG__
373 0132 0F92 push __tmp_reg__
374 0134 1124 clr __zero_reg__
375 0136 1F93 push r17
376 0138 2F93 push r18
377 013a 3F93 push r19
378 013c 4F93 push r20
379 013e 5F93 push r21
380 0140 6F93 push r22
381 0142 7F93 push r23
382 0144 8F93 push r24
383 0146 9F93 push r25
384 0148 AF93 push r26
385 014a BF93 push r27
386 014c CF93 push r28
387 014e EF93 push r30
388 0150 FF93 push r31
389 /* prologue end (size=19) */
113:dtmf2.c **** if((PIND >> PD0) & 1) { //test if up button is released
391 .LM51:
392 0152 809B sbis 48-0x20,0
393 0154 0EC0 rjmp .L21
114:dtmf2.c **** uptimeL=22; //reset up depressed timer
395 .LM52:
396 0156 86E1 ldi r24,lo8(22)
397 0158 8093 0000 sts uptimeL,r24
115:dtmf2.c **** if(uptimeH<22)uptimeH++; //increment up released timer
399 .LM53:
400 015c 8091 0000 lds r24,uptimeH
401 0160 8631 cpi r24,lo8(22)
402 0162 20F4 brsh .L22
403 0164 8F5F subi r24,lo8(-(1))
404 0166 8093 0000 sts uptimeH,r24
405 016a 41C0 rjmp .L24
406 .L22:
116:dtmf2.c **** else up=0; //indicate up filtered release
408 .LM54:
409 016c 1092 0000 sts up,__zero_reg__
410 0170 3EC0 rjmp .L24
411 .L21:
117:dtmf2.c **** }
118:dtmf2.c **** else {
119:dtmf2.c **** uptimeH=0; //reset up release timer
413 .LM55:
414 0172 1092 0000 sts uptimeH,__zero_reg__
120:dtmf2.c **** if(uptimeL>0)uptimeL--; //increment up depressed timer
416 .LM56:
417 0176 8091 0000 lds r24,uptimeL
418 017a 8823 tst r24
419 017c 21F0 breq .L25
420 017e 8150 subi r24,lo8(-(-1))
421 0180 8093 0000 sts uptimeL,r24
422 0184 34C0 rjmp .L24
423 .L25:
121:dtmf2.c **** else {
122:dtmf2.c **** if(up==0 && lcdln<19) { //scroll up if not at end (Line 19)
425 .LM57:
426 0186 C091 0000 lds r28,up
427 018a CC23 tst r28
428 018c 81F5 brne .L24
429 018e 8091 0000 lds r24,lcdln
430 0192 8331 cpi r24,lo8(19)
431 0194 60F5 brsh .L24
123:dtmf2.c **** redraw = 1; //set flag to redraw incomming screen
433 .LM58:
434 0196 11E0 ldi r17,lo8(1)
435 0198 1093 0000 sts redraw,r17
124:dtmf2.c **** lcdln++; //increment line number
437 .LM59:
438 019c 810F add r24,r17
439 019e 8093 0000 sts lcdln,r24
125:dtmf2.c **** lcdcmd (0x01); //Clear LCD, move home//clear lcd
441 .LM60:
442 01a2 612F mov r22,r17
443 01a4 8C2F mov r24,r28
444 01a6 B3D1 rcall lcdwrt
126:dtmf2.c **** trnsfr (lcdln-1, esrl-13); //draw top line
446 .LM61:
447 01a8 9091 0000 lds r25,esrl
448 01ac 9D50 subi r25,lo8(-(-13))
449 01ae 8091 0000 lds r24,lcdln
450 01b2 8150 subi r24,lo8(-(-1))
451 01b4 692F mov r22,r25
452 01b6 E9D0 rcall trnsfr
127:dtmf2.c **** lcdcmd (0xC0); //set cursor at bottom line
454 .LM62:
455 01b8 60EC ldi r22,lo8(-64)
456 01ba 8C2F mov r24,r28
457 01bc A8D1 rcall lcdwrt
128:dtmf2.c **** if(lcdln!=19) trnsfr (lcdln, esrl-26); //draw bottom line
459 .LM63:
460 01be 9091 0000 lds r25,lcdln
461 01c2 9331 cpi r25,lo8(19)
462 01c4 31F0 breq .L28
463 01c6 8091 0000 lds r24,esrl
464 01ca 8A51 subi r24,lo8(-(-26))
465 01cc 682F mov r22,r24
466 01ce 892F mov r24,r25
467 01d0 DCD0 rcall trnsfr
468 .L28:
129:dtmf2.c **** esrl=esrl-13; //adjust eeprom scroll offset
470 .LM64:
471 01d2 8091 0000 lds r24,esrl
472 01d6 8D50 subi r24,lo8(-(-13))
473 01d8 8093 0000 sts esrl,r24
130:dtmf2.c **** if(lcdln==19) {
475 .LM65:
476 01dc 8091 0000 lds r24,lcdln
477 01e0 8331 cpi r24,lo8(19)
478 01e2 19F4 brne .L29
131:dtmf2.c **** line19(); //re-draw line 19
480 .LM66:
481 01e4 5AD1 rcall line19
132:dtmf2.c **** redraw = 0;
483 .LM67:
484 01e6 C093 0000 sts redraw,r28
485 .L29:
133:dtmf2.c **** }
134:dtmf2.c **** up = 1;
487 .LM68:
488 01ea 1093 0000 sts up,r17
489 .L24:
135:dtmf2.c **** }
136:dtmf2.c **** }
137:dtmf2.c **** }
138:dtmf2.c **** if((PIND >> PD2) & 1) { //test if down button is released
491 .LM69:
492 01ee 80B3 in r24,48-0x20
493 01f0 8695 lsr r24
494 01f2 8695 lsr r24
495 01f4 80FF sbrs r24,0
496 01f6 0EC0 rjmp .L30
139:dtmf2.c **** dntimeL=22; //reset down depressed timer
498 .LM70:
499 01f8 86E1 ldi r24,lo8(22)
500 01fa 8093 0000 sts dntimeL,r24
140:dtmf2.c **** if(dntimeH<22)dntimeH++; //increment down released timer
502 .LM71:
503 01fe 8091 0000 lds r24,dntimeH
504 0202 8631 cpi r24,lo8(22)
505 0204 20F4 brsh .L31
506 0206 8F5F subi r24,lo8(-(1))
507 0208 8093 0000 sts dntimeH,r24
508 020c 35C0 rjmp .L20
509 .L31:
141:dtmf2.c **** else dn=0; //indicate down filtered release
511 .LM72:
512 020e 1092 0000 sts dn,__zero_reg__
513 0212 32C0 rjmp .L20
514 .L30:
142:dtmf2.c **** }
143:dtmf2.c **** else {
144:dtmf2.c **** dntimeH=0; //reset down release timer
516 .LM73:
517 0214 1092 0000 sts dntimeH,__zero_reg__
145:dtmf2.c **** if(dntimeL>0)dntimeL--; //increment down depressed timer
519 .LM74:
520 0218 8091 0000 lds r24,dntimeL
521 021c 8823 tst r24
522 021e 21F0 breq .L34
523 0220 8150 subi r24,lo8(-(-1))
524 0222 8093 0000 sts dntimeL,r24
525 0226 28C0 rjmp .L20
526 .L34:
146:dtmf2.c **** else {
147:dtmf2.c **** if(dn==0 && lcdln>2) { //scroll down if not at end (Line 1)
528 .LM75:
529 0228 C091 0000 lds r28,dn
530 022c CC23 tst r28
531 022e 21F5 brne .L20
532 0230 8091 0000 lds r24,lcdln
533 0234 8330 cpi r24,lo8(3)
534 0236 00F1 brlo .L20
148:dtmf2.c **** redraw = 1; //set flag to redraw incomming screen
536 .LM76:
537 0238 11E0 ldi r17,lo8(1)
538 023a 1093 0000 sts redraw,r17
149:dtmf2.c **** lcdln--;
540 .LM77:
541 023e 8150 subi r24,lo8(-(-1))
542 0240 8093 0000 sts lcdln,r24
150:dtmf2.c **** lcdcmd (0x01); //Clear LCD, move home//clear lcd
544 .LM78:
545 0244 612F mov r22,r17
546 0246 8C2F mov r24,r28
547 0248 62D1 rcall lcdwrt
151:dtmf2.c **** trnsfr (lcdln-1, esrl+13); //draw top line
549 .LM79:
550 024a 9091 0000 lds r25,esrl
551 024e 935F subi r25,lo8(-(13))
552 0250 8091 0000 lds r24,lcdln
553 0254 8150 subi r24,lo8(-(-1))
554 0256 692F mov r22,r25
555 0258 98D0 rcall trnsfr
152:dtmf2.c **** lcdcmd (0xC0); //set cursor at of bottom line
557 .LM80:
558 025a 60EC ldi r22,lo8(-64)
559 025c 8C2F mov r24,r28
560 025e 57D1 rcall lcdwrt
153:dtmf2.c **** trnsfr (lcdln, esrl); //draw bottom line
562 .LM81:
563 0260 6091 0000 lds r22,esrl
564 0264 8091 0000 lds r24,lcdln
565 0268 90D0 rcall trnsfr
154:dtmf2.c **** esrl=esrl+13; //adjust eeprom scroll offset
567 .LM82:
568 026a 8091 0000 lds r24,esrl
569 026e 835F subi r24,lo8(-(13))
570 0270 8093 0000 sts esrl,r24
155:dtmf2.c **** dn = 1;
572 .LM83:
573 0274 1093 0000 sts dn,r17
156:dtmf2.c **** }
157:dtmf2.c **** }
158:dtmf2.c **** }
159:dtmf2.c **** }
575 .LM84:
576 .L20:
577 /* epilogue: frame size=0 */
578 0278 FF91 pop r31
579 027a EF91 pop r30
580 027c CF91 pop r28
581 027e BF91 pop r27
582 0280 AF91 pop r26
583 0282 9F91 pop r25
584 0284 8F91 pop r24
585 0286 7F91 pop r23
586 0288 6F91 pop r22
587 028a 5F91 pop r21
588 028c 4F91 pop r20
589 028e 3F91 pop r19
590 0290 2F91 pop r18
591 0292 1F91 pop r17
592 0294 0F90 pop __tmp_reg__
593 0296 0FBE out __SREG__,__tmp_reg__
594 0298 0F90 pop __tmp_reg__
595 029a 1F90 pop __zero_reg__
596 029c 1895 reti
597 /* epilogue end (size=19) */
598 /* function __vector_6 size 185 (147) */
600 .Lscope2:
604 .global UART_PrintfProgStr
606 UART_PrintfProgStr:
160:dtmf2.c ****
161:dtmf2.c **** void UART_PrintfProgStr(unsigned char* pBuf)
162:dtmf2.c **** {
608 .LM85:
609 /* prologue: frame size=0 */
610 029e 0F93 push r16
611 02a0 1F93 push r17
612 02a2 CF93 push r28
613 02a4 DF93 push r29
614 /* prologue end (size=4) */
615 02a6 D92F mov r29,r25
616 02a8 C82F mov r28,r24
163:dtmf2.c **** unsigned char pos;
164:dtmf2.c **** pos = 0;
618 .LM86:
619 .LBB4:
620 02aa 00E0 ldi r16,lo8(0)
165:dtmf2.c **** lcdcmd (0x80); //LCD Start Position on 1st Row
622 .LM87:
623 02ac 60E8 ldi r22,lo8(-128)
624 02ae 802F mov r24,r16
625 02b0 2ED1 rcall lcdwrt
166:dtmf2.c **** while (PRG_RDB(pBuf)!=0) { //Go through string until end(null)
627 .LM88:
628 02b2 FD2F mov r31,r29
629 02b4 EC2F mov r30,r28
630 .LBB5:
631 /* #APP */
632 02b6 C895 lpm
633 02b8 802D mov r24, r0
634
635 /* #NOAPP */
636 .LBE5:
637 02ba 8823 tst r24
638 02bc B9F0 breq .L48
639 .L46:
167:dtmf2.c **** UDR = PRG_RDB(pBuf); //Send string byte out UART
641 .LM89:
642 02be FD2F mov r31,r29
643 02c0 EC2F mov r30,r28
644 .LBB6:
645 /* #APP */
646 02c2 C895 lpm
647 02c4 102D mov r17, r0
648
649 /* #NOAPP */
650 .LBE6:
651 02c6 1CB9 out 44-0x20,r17
168:dtmf2.c **** if (pos == 0x10) lcdcmd (0xC0); //If end of 1st goto 2nd Row
653 .LM90:
654 02c8 0031 cpi r16,lo8(16)
655 02ca 19F4 brne .L41
656 02cc 60EC ldi r22,lo8(-64)
657 02ce 80E0 ldi r24,lo8(0)
658 02d0 1ED1 rcall lcdwrt
659 .L41:
169:dtmf2.c **** lcdata (PRG_RDB(pBuf)); //Send string byte to LCD
661 .LM91:
662 02d2 612F mov r22,r17
663 02d4 81E0 ldi r24,lo8(1)
664 02d6 1BD1 rcall lcdwrt
170:dtmf2.c **** pBuf++; //Point to next byte in string
666 .LM92:
667 02d8 2196 adiw r28,1
171:dtmf2.c **** pos++; //point to next LCD position
669 .LM93:
670 02da 0F5F subi r16,lo8(-(1))
172:dtmf2.c **** while ( !(USR & (1<<UDRE)) ); //Wait for UART to finish TXing
672 .LM94:
673 .L42:
674 02dc 5D9B sbis 43-0x20,5
675 02de FECF rjmp .L42
676 02e0 FD2F mov r31,r29
677 02e2 EC2F mov r30,r28
678 .LBB7:
679 /* #APP */
680 02e4 C895 lpm
681 02e6 802D mov r24, r0
682
683 /* #NOAPP */
684 .LBE7:
685 02e8 8823 tst r24
686 02ea 49F7 brne .L46
687 .L48:
173:dtmf2.c **** }
174:dtmf2.c **** }
689 .LM95:
690 .LBE4:
691 /* epilogue: frame size=0 */
692 02ec DF91 pop r29
693 02ee CF91 pop r28
694 02f0 1F91 pop r17
695 02f2 0F91 pop r16
696 02f4 0895 ret
697 /* epilogue end (size=5) */
698 /* function UART_PrintfProgStr size 56 (47) */
712 .Lscope3:
716 .global TXbyte
718 TXbyte:
175:dtmf2.c ****
176:dtmf2.c **** void TXbyte ( char data ) //Transmits 1 byte out the UART
177:dtmf2.c **** {
720 .LM96:
721 /* prologue: frame size=0 */
722 /* prologue end (size=0) */
178:dtmf2.c **** while ( !(USR & (1<<UDRE)) ); //wait for empty transmit buffer
724 .LM97:
725 .L50:
726 02f6 5D9B sbis 43-0x20,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -