📄 8880.lst
字号:
62B 9189 LD R24,Y+
62C 9109 LD R16,Y+
62D 9039 LD R3,Y+
62E 9029 LD R2,Y+
62F 9518 RETI
_uart0_udre_isr:
630 922A ST R2,-Y
631 938A ST R24,-Y
632 939A ST R25,-Y
633 93EA ST R30,-Y
634 93FA ST R31,-Y
635 B62F IN R2,0x3F
636 922A ST R2,-Y
(0049) }
(0050) #pragma interrupt_handler uart0_udre_isr:iv_USART0_UDRE
(0051) void uart0_udre_isr(void)
(0052) {
(0053) UDR=*com_status.send_cur_ptr++;
637 91E0 02E0 LDS R30,0x02E0
639 91F0 02E1 LDS R31,0x02E1
63B 9021 LD R2,Z+
63C 93F0 02E1 STS 0x02E1,R31
63E 93E0 02E0 STS 0x02E0,R30
640 B82C OUT 0x0C,R2
(0054) if (*com_status.send_cur_ptr==0 || com_status.send_cur_ptr==send_buf+SEND_BUFLEN){
641 8020 LDD R2,Z+0
642 2022 TST R2
643 F029 BEQ 0x0649
644 EA88 LDI R24,0xA8
645 E092 LDI R25,2
646 17E8 CP R30,R24
647 07F9 CPC R31,R25
648 F421 BNE 0x064D
(0055) UCSRB&=~0x20;
649 9855 CBI 0x0A,5
(0056) com_status.sending=0;
64A 2422 CLR R2
64B 9220 02E2 STS 0x02E2,R2
(0057) }
64D 9029 LD R2,Y+
64E BE2F OUT 0x3F,R2
64F 91F9 LD R31,Y+
650 91E9 LD R30,Y+
651 9199 LD R25,Y+
652 9189 LD R24,Y+
653 9029 LD R2,Y+
654 9518 RETI
_serial_send:
buf --> R10
655 92AA ST R10,-Y
656 92BA ST R11,-Y
657 0158 MOVW R10,R16
(0058) }
(0059) void serial_send(char *buf)
(0060) {
(0061) if (*buf==0) return;
658 01F5 MOVW R30,R10
659 8020 LDD R2,Z+0
65A 2022 TST R2
65B F409 BNE 0x065D
65C C012 RJMP 0x066F
(0062) while (com_status.sending);
65D 9020 02E2 LDS R2,0x02E2
65F 2022 TST R2
660 F7E1 BNE 0x065D
(0063) strcpy(send_buf,buf);
661 0195 MOVW R18,R10
662 E706 LDI R16,0x76
663 E012 LDI R17,2
664 D0E5 RCALL _strcpy
(0064) com_status.send_cur_ptr=send_buf;
665 E786 LDI R24,0x76
666 E092 LDI R25,2
667 9390 02E1 STS 0x02E1,R25
669 9380 02E0 STS 0x02E0,R24
(0065) com_status.sending=-1;
66B EF8F LDI R24,0xFF
66C 9380 02E2 STS 0x02E2,R24
(0066) UCSRB|=0x20;
66E 9A55 SBI 0x0A,5
66F 90B9 LD R11,Y+
670 90A9 LD R10,Y+
671 9508 RET
_serial_recv:
len --> R20
buflen --> R18
buf --> R16
672 934A ST R20,-Y
673 935A ST R21,-Y
(0067) }
(0068) unsigned int serial_recv(char *buf,unsigned int buflen)
(0069) {
(0070) unsigned int len=0;
674 2744 CLR R20
675 2755 CLR R21
(0071) if (com_status.read_start_ptr==com_status.read_end_ptr) return 0;
676 9020 02DC LDS R2,com_status+2
678 9030 02DD LDS R3,com_status+3
67A 9040 02DA LDS R4,com_status
67C 9050 02DB LDS R5,com_status+1
67E 1442 CP R4,R2
67F 0453 CPC R5,R3
680 F501 BNE 0x06A1
681 2700 CLR R16
682 2711 CLR R17
683 C036 RJMP 0x06BA
(0072) while(com_status.read_start_ptr!=com_status.read_end_ptr && len<buflen-1){
(0073) *buf++=*com_status.read_start_ptr++;
684 91E0 02DA LDS R30,com_status
686 91F0 02DB LDS R31,com_status+1
688 01D8 MOVW R26,R16
689 9001 LD R0,Z+
68A 93F0 02DB STS com_status+1,R31
68C 93E0 02DA STS com_status,R30
68E 920D ST R0,X+
68F 018D MOVW R16,R26
(0074) len++;
690 5F4F SUBI R20,0xFF
691 4F5F SBCI R21,0xFF
(0075) if (com_status.read_start_ptr==recv_buf+RECV_BUFLEN)
692 ED8A LDI R24,0xDA
693 E092 LDI R25,2
694 9020 02DA LDS R2,com_status
696 9030 02DB LDS R3,com_status+1
698 1628 CP R2,R24
699 0639 CPC R3,R25
69A F431 BNE 0x06A1
(0076) com_status.read_start_ptr=recv_buf;
69B EA88 LDI R24,0xA8
69C E092 LDI R25,2
69D 9390 02DB STS com_status+1,R25
69F 9380 02DA STS com_status,R24
6A1 9020 02DC LDS R2,com_status+2
6A3 9030 02DD LDS R3,com_status+3
6A5 9040 02DA LDS R4,com_status
6A7 9050 02DB LDS R5,com_status+1
6A9 1442 CP R4,R2
6AA 0453 CPC R5,R3
6AB F029 BEQ 0x06B1
6AC 01C9 MOVW R24,R18
6AD 9701 SBIW R24,1
6AE 1748 CP R20,R24
6AF 0759 CPC R21,R25
6B0 F298 BCS 0x0684
(0077) }
(0078) *(--buf)=0;
6B1 01C8 MOVW R24,R16
6B2 9701 SBIW R24,1
6B3 2422 CLR R2
6B4 01FC MOVW R30,R24
6B5 8220 STD Z+0,R2
(0079) return --len;
6B6 01CA MOVW R24,R20
6B7 9701 SBIW R24,1
6B8 01AC MOVW R20,R24
6B9 018C MOVW R16,R24
6BA 9159 LD R21,Y+
6BB 9149 LD R20,Y+
6BC 9508 RET
FILE: E:\Shuaihu\AVR\8880\timer.c
(0001) #include <iom8v.h>
(0002) #include "main.h"
(0003) #include "shell.h"
(0004) #include "8880.h"
(0005) #include "serial.h"
(0006) void timer1_init(void)
(0007) {
(0008) TCCR1B = 0x00; //stop
_timer1_init:
6BD 2422 CLR R2
6BE BC2E OUT 0x2E,R2
(0009) TCNT1H = 0xE3; //setup
6BF EE83 LDI R24,0xE3
6C0 BD8D OUT 0x2D,R24
(0010) TCNT1L = 0xE1;
6C1 EE81 LDI R24,0xE1
6C2 BD8C OUT 0x2C,R24
(0011) OCR1AH = 0x1C;
6C3 E18C LDI R24,0x1C
6C4 BD8B OUT 0x2B,R24
(0012) OCR1AL = 0x1F;
6C5 E18F LDI R24,0x1F
6C6 BD8A OUT 0x2A,R24
(0013) OCR1BH = 0x1C;
6C7 E18C LDI R24,0x1C
6C8 BD89 OUT 0x29,R24
(0014) OCR1BL = 0x1F;
6C9 E18F LDI R24,0x1F
6CA BD88 OUT 0x28,R24
(0015) ICR1H = 0x1C;
6CB E18C LDI R24,0x1C
6CC BD87 OUT 0x27,R24
(0016) ICR1L = 0x1F;
6CD E18F LDI R24,0x1F
6CE BD86 OUT 0x26,R24
(0017) TCCR1A = 0x00;
6CF BC2F OUT 0x2F,R2
(0018) TIMSK |= 0x04;
6D0 B789 IN R24,0x39
6D1 6084 ORI R24,4
6D2 BF89 OUT 0x39,R24
6D3 9508 RET
_timer1_ovf_isr:
i --> R20
6D4 920A ST R0,-Y
6D5 921A ST R1,-Y
6D6 922A ST R2,-Y
6D7 923A ST R3,-Y
6D8 924A ST R4,-Y
6D9 925A ST R5,-Y
6DA 926A ST R6,-Y
6DB 927A ST R7,-Y
6DC 928A ST R8,-Y
6DD 929A ST R9,-Y
6DE 930A ST R16,-Y
6DF 931A ST R17,-Y
6E0 932A ST R18,-Y
6E1 933A ST R19,-Y
6E2 938A ST R24,-Y
6E3 939A ST R25,-Y
6E4 93AA ST R26,-Y
6E5 93BA ST R27,-Y
6E6 93EA ST R30,-Y
6E7 93FA ST R31,-Y
6E8 B60F IN R0,0x3F
6E9 920A ST R0,-Y
6EA 934A ST R20,-Y
6EB 935A ST R21,-Y
(0019) }
(0020)
(0021) int x=0;
(0022) #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
(0023) void timer1_ovf_isr(void)
(0024) {
(0025) int i;
(0026) //TIMER1 has overflowed
(0027) TCNT1H = 0xE3; //reload counter high value
6EC EE83 LDI R24,0xE3
6ED BD8D OUT 0x2D,R24
(0028) TCNT1L = 0xE1; //reload counter low value
6EE EE81 LDI R24,0xE1
6EF BD8C OUT 0x2C,R24
(0029) switch (sysoption.calling)
6F0 9140 0203 LDS R20,sysoption+1
6F2 2755 CLR R21
6F3 3041 CPI R20,1
6F4 E0E0 LDI R30,0
6F5 075E CPC R21,R30
6F6 F029 BEQ 0x06FC
6F7 3042 CPI R20,2
6F8 E0E0 LDI R30,0
6F9 075E CPC R21,R30
6FA F109 BEQ 0x071C
6FB C028 RJMP 0x0724
(0030) { case 1:
(0031) if (sysoption.timer==40){
6FC 9180 0205 LDS R24,sysoption+3
6FE 3288 CPI R24,0x28
6FF F4B1 BNE 0x0716
(0032) M8880_Handdown;
700 98AD CBI 0x15,5
(0033) for (i=0;i<10;i++) delay(0xffff);
701 2744 CLR R20
702 2755 CLR R21
703 EF0F LDI R16,0xFF
704 EF1F LDI R17,0xFF
705 DC59 RCALL _delay
706 5F4F SUBI R20,0xFF
707 4F5F SBCI R21,0xFF
708 304A CPI R20,0xA
709 E0E0 LDI R30,0
70A 075E CPC R21,R30
70B F3BC BLT 0x0703
(0034) serial_send(noresponse);
70C 9100 018A LDS R16,noresponse
70E 9110 018B LDS R17,noresponse+1
710 DF44 RCALL _serial_send
(0035) sysoption.calling=0;
711 2422 CLR R2
712 9220 0203 STS sysoption+1,R2
(0036) TCCR1B=0x0;
714 BC2E OUT 0x2E,R2
(0037) }else sysoption.timer++;
715 C00E RJMP 0x0724
716 9180 0205 LDS R24,sysoption+3
718 5F8F SUBI R24,0xFF
719 9380 0205 STS sysoption+3,R24
(0038) break;
71B C008 RJMP 0x0724
(0039) case 2:
(0040) sysoption.calling=3;
71C E083 LDI R24,3
71D 9380 0203 STS sysoption+1,R24
(0041) serial_send("answered");
71F EF09 LDI R16,0xF9
720 E011 LDI R17,1
721 DF33 RCALL _serial_send
(0042) TCCR1B=0;
722 2422 CLR R2
723 BC2E OUT 0x2E,R2
(0043) break;
FILE: <library>
724 9159 LD R21,Y+
725 9149 LD R20,Y+
726 9009 LD R0,Y+
727 BE0F OUT 0x3F,R0
728 91F9 LD R31,Y+
729 91E9 LD R30,Y+
72A 91B9 LD R27,Y+
72B 91A9 LD R26,Y+
72C 9199 LD R25,Y+
72D 9189 LD R24,Y+
72E 9139 LD R19,Y+
72F 9129 LD R18,Y+
730 9119 LD R17,Y+
731 9109 LD R16,Y+
732 9099 LD R9,Y+
733 9089 LD R8,Y+
734 9079 LD R7,Y+
735 9069 LD R6,Y+
736 9059 LD R5,Y+
737 9049 LD R4,Y+
738 9039 LD R3,Y+
739 9029 LD R2,Y+
73A 9019 LD R1,Y+
73B 9009 LD R0,Y+
73C 9518 RETI
_strcmp:
73D 2FE0 MOV R30,R16
73E 2FF1 MOV R31,R17
73F 2FA2 MOV R26,R18
740 2FB3 MOV R27,R19
741 9101 LD R16,Z+
742 911D LD R17,X+
743 1B01 SUB R16,R17
744 F419 BNE 0x0748
745 2311 TST R17
746 F7D1 BNE 0x0741
747 2700 CLR R16
748 0B11 SBC R17,R17
749 9508 RET
_strcpy:
74A 2FA0 MOV R26,R16
74B 2FB1 MOV R27,R17
74C 2FE2 MOV R30,R18
74D 2FF3 MOV R31,R19
74E 9001 LD R0,Z+
74F 920D ST R0,X+
750 2000 TST R0
751 F7E1 BNE 0x074E
752 9508 RET
_strlen:
753 2FE0 MOV R30,R16
754 2FF1 MOV R31,R17
755 27AA CLR R26
756 27BB CLR R27
757 9001 LD R0,Z+
758 2000 TST R0
759 F011 BEQ 0x075C
75A 9611 ADIW R26,1
75B CFFB RJMP 0x0757
75C 2F0A MOV R16,R26
75D 2F1B MOV R17,R27
75E 9508 RET
push_arg4:
75F 933A ST R19,-Y
760 932A ST R18,-Y
push_arg2:
761 931A ST R17,-Y
762 930A ST R16,-Y
763 9508 RET
pop_xgset003C:
764 90A9 LD R10,Y+
765 90B9 LD R11,Y+
766 90C9 LD R12,Y+
767 90D9 LD R13,Y+
768 9508 RET
push_xgsetF0FC:
769 937A ST R23,-Y
76A 936A ST R22,-Y
push_xgset30FC:
76B 935A ST R21,-Y
76C 934A ST R20,-Y
push_xgset00FC:
76D 92FA ST R15,-Y
76E 92EA ST R14,-Y
push_xgset003C:
76F 92DA ST R13,-Y
770 92CA ST R12,-Y
771 92BA ST R11,-Y
772 92AA ST R10,-Y
773 9508 RET
push_xgset300C:
774 935A ST R21,-Y
775 934A ST R20,-Y
776 92BA ST R11,-Y
777 92AA ST R10,-Y
778 9508 RET
pop_xgset300C:
779 90A9 LD R10,Y+
77A 90B9 LD R11,Y+
77B 9149 LD R20,Y+
77C 9159 LD R21,Y+
77D 9508 RET
push_xgsetF000:
77E 937A ST R23,-Y
77F 936A ST R22,-Y
780 935A ST R21,-Y
781 934A ST R20,-Y
782 9508 RET
pop_xgsetF000:
783 9149 LD R20,Y+
784 9159 LD R21,Y+
785 9169 LD R22,Y+
786 9179 LD R23,Y+
787 9508 RET
push_xgsetF00C:
788 937A ST R23,-Y
789 936A ST R22,-Y
78A 935A ST R21,-Y
78B 934A ST R20,-Y
78C 92BA ST R11,-Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -