⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8880.lis

📁 使用8880实现DTMF通信及拨号的程序.
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 00C4                   .dbline 73
 00C4           ;        return c;       
 00C4                   .dbline -2
 00C4           L15:
 00C4                   .dbline 0 ; func end
 00C4 0895              ret
 00C6                   .dbsym r c 16 c
 00C6                   .dbend
 00C6                   .dbfunc e M8880_Init _M8880_Init fV
                        .even
 00C6           _M8880_Init::
 00C6                   .dbline -1
 00C6                   .dbline 76
 00C6           ; }
 00C6           ; void M8880_Init(void)
 00C6           ; {
 00C6                   .dbline 77
 00C6           ;        M8880_State.SendCount=0;
 00C6 2224              clr R2
 00C8 20920000          sts _M8880_State,R2
 00CC                   .dbline 78
 00CC           ;        M8880_State.CurSend=sendbuf;
 00CC 80E0              ldi R24,<_sendbuf
 00CE 90E0              ldi R25,>_sendbuf
 00D0 90930200          sts _M8880_State+1+1,R25
 00D4 80930100          sts _M8880_State+1,R24
 00D8                   .dbline 79
 00D8           ;        M8880_State.Sending=0;
 00D8 20920A00          sts _M8880_State+10,R2
 00DC                   .dbline 80
 00DC           ;        M8880_State.RecvIntCount=0;
 00DC 20920300          sts _M8880_State+3,R2
 00E0                   .dbline 81
 00E0           ;        M8880_State.RecvStartPtr=recvbuf;
 00E0 80E0              ldi R24,<_recvbuf
 00E2 90E0              ldi R25,>_recvbuf
 00E4 90930500          sts _M8880_State+4+1,R25
 00E8 80930400          sts _M8880_State+4,R24
 00EC                   .dbline 82
 00EC           ;        M8880_State.RecvEndPtr=recvbuf;
 00EC 90930700          sts _M8880_State+6+1,R25
 00F0 80930600          sts _M8880_State+6,R24
 00F4                   .dbline 83
 00F4           ;        M8880_State.CurRecv=recvbuf;
 00F4 90930900          sts _M8880_State+8+1,R25
 00F8 80930800          sts _M8880_State+8,R24
 00FC                   .dbline 84
 00FC           ;        M8880_DataDDR|=0xf;
 00FC 84B3              in R24,0x14
 00FE 8F60              ori R24,15
 0100 84BB              out 0x14,R24
 0102                   .dbline 85
 0102           ;        M8880_DataPort&=~0xf;
 0102 85B3              in R24,0x15
 0104 807F              andi R24,240
 0106 85BB              out 0x15,R24
 0108                   .dbline 86
 0108           ;        M8880_CtrlPort|=M8880_CS|M8880_RW|M8880_CLK|M8880_RS;
 0108 82B3              in R24,0x12
 010A 806F              ori R24,240
 010C 82BB              out 0x12,R24
 010E                   .dbline 87
 010E           ;        M8880_CtrlDDR|=M8880_CS|M8880_RW|M8880_CLK|M8880_RS;
 010E 81B3              in R24,0x11
 0110 806F              ori R24,240
 0112 81BB              out 0x11,R24
 0114                   .dbline 88
 0114           ;        M8880_ReadState();
 0114 C8DF              rcall _M8880_ReadState
 0116                   .dbline 89
 0116           ;        M8880_WriteCtrl(0x00,0);
 0116 2227              clr R18
 0118 0027              clr R16
 011A 96DF              rcall _M8880_WriteCtrl
 011C                   .dbline 90
 011C           ;        M8880_WriteCtrl(0x00,0);
 011C 2227              clr R18
 011E 0027              clr R16
 0120 93DF              rcall _M8880_WriteCtrl
 0122                   .dbline 91
 0122           ;        M8880_WriteCtrl((M8880_BIT0|M8880_BIT2),-1);
 0122 2FEF              ldi R18,255
 0124 05E0              ldi R16,5
 0126 90DF              rcall _M8880_WriteCtrl
 0128                   .dbline 92
 0128           ;        M8880_ReadState();
 0128 BEDF              rcall _M8880_ReadState
 012A                   .dbline 101
 012A           ; #if M8880_INT==1
 012A           ;        PORTD|=0x8;
 012A           ;        DDRD&=~0x8;
 012A           ;        MCUCR&=~((1<<ISC11)|(1<<ISC10));
 012A           ;        MCUCR|=(1<<ISC11);
 012A           ;        GICR|=(1<<INT1);
 012A           ;        GIFR|=(1<<INT1);
 012A           ; #else
 012A           ;        PORTD|=0x4;
 012A 929A              sbi 0x12,2
 012C                   .dbline 102
 012C           ;        DDRD&=~0x4;
 012C 8A98              cbi 0x11,2
 012E                   .dbline 103
 012E           ;        MCUCR&=~((1<<ISC01)|(1<<ISC00));
 012E 85B7              in R24,0x35
 0130 8C7F              andi R24,252
 0132 85BF              out 0x35,R24
 0134                   .dbline 104
 0134           ;        MCUCR|=(1<<ISC01);
 0134 85B7              in R24,0x35
 0136 8260              ori R24,2
 0138 85BF              out 0x35,R24
 013A                   .dbline 105
 013A           ;        GICR|=(1<<INT0);
 013A 8BB7              in R24,0x3b
 013C 8064              ori R24,64
 013E 8BBF              out 0x3b,R24
 0140                   .dbline 106
 0140           ;        GIFR|=(1<<INT0);
 0140 8AB7              in R24,0x3a
 0142 8064              ori R24,64
 0144 8ABF              out 0x3a,R24
 0146                   .dbline -2
 0146           L16:
 0146                   .dbline 0 ; func end
 0146 0895              ret
 0148                   .dbend
                        .area data(ram, con, rel)
 000E                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 000E           _dec::
 000E                   .blkw 1
                        .area idata
 000E 1D00              .word L23
                        .area data(ram, con, rel)
 0010                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 0010                   .dbsym e dec _dec pc
                        .area vector(rom, abs)
                        .org 2
 0002 A4C0              rjmp _int0_isr
                        .area data(ram, con, rel)
 0010                   .dbfile E:\Shuaihu\AVR\8880\8880.c
                        .area text(rom, con, rel)
 0148                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 0148                   .dbfunc e int0_isr _int0_isr fV
 0148           ;              c -> R10
                        .even
 0148           _int0_isr::
 0148 0A92              st -y,R0
 014A 1A92              st -y,R1
 014C 2A92              st -y,R2
 014E 3A92              st -y,R3
 0150 4A92              st -y,R4
 0152 5A92              st -y,R5
 0154 6A92              st -y,R6
 0156 7A92              st -y,R7
 0158 8A92              st -y,R8
 015A 9A92              st -y,R9
 015C 0A93              st -y,R16
 015E 1A93              st -y,R17
 0160 2A93              st -y,R18
 0162 3A93              st -y,R19
 0164 8A93              st -y,R24
 0166 9A93              st -y,R25
 0168 AA93              st -y,R26
 016A BA93              st -y,R27
 016C EA93              st -y,R30
 016E FA93              st -y,R31
 0170 0FB6              in R0,0x3f
 0172 0A92              st -y,R0
 0174 AA92              st -y,R10
 0176                   .dbline -1
 0176                   .dbline 112
 0176           ; #endif 
 0176           ; }
 0176           ; char *dec="01234567890*#abcd";
 0176           ; #pragma interrupt_handler int0_isr:iv_INT0
 0176           ; void int0_isr(void)
 0176           ; {
 0176                   .dbline 114
 0176           ;   char c;
 0176           ;   c=M8880_ReadState();
 0176 97DF              rcall _M8880_ReadState
 0178 A02E              mov R10,R16
 017A                   .dbline 115
 017A           ;   if (c&M8880_BIT1){
 017A 01FF              sbrs R16,1
 017C 20C0              rjmp L25
 017E           X2:
 017E                   .dbline 115
 017E                   .dbline 116
 017E           ;        M8880_State.SendCount--;
 017E 80910000          lds R24,_M8880_State
 0182 8150              subi R24,1
 0184 80930000          sts _M8880_State,R24
 0188                   .dbline 117
 0188           ;      if (M8880_State.SendCount>0){
 0188 80E0              ldi R24,0
 018A 20900000          lds R2,_M8880_State
 018E 8215              cp R24,R2
 0190 68F4              brsh L27
 0192           X3:
 0192                   .dbline 117
 0192                   .dbline 118
 0192           ;                M8880_State.CurSend++;
 0192 80910100          lds R24,_M8880_State+1
 0196 90910200          lds R25,_M8880_State+1+1
 019A 0196              adiw R24,1
 019C 90930200          sts _M8880_State+1+1,R25
 01A0 80930100          sts _M8880_State+1,R24
 01A4                   .dbline 119
 01A4           ;                M8880_WriteChar(*M8880_State.CurSend);
 01A4 FC01              movw R30,R24
 01A6 0081              ldd R16,z+0
 01A8 2BDF              rcall _M8880_WriteChar
 01AA                   .dbline 120
 01AA           ;        }else{
 01AA 09C0              rjmp L28
 01AC           L27:
 01AC                   .dbline 120
 01AC                   .dbline 121
 01AC           ;               M8880_State.CurSend=sendbuf;
 01AC 80E0              ldi R24,<_sendbuf
 01AE 90E0              ldi R25,>_sendbuf
 01B0 90930200          sts _M8880_State+1+1,R25
 01B4 80930100          sts _M8880_State+1,R24
 01B8                   .dbline 122
 01B8           ;               M8880_State.Sending=0;
 01B8 2224              clr R2
 01BA 20920A00          sts _M8880_State+10,R2
 01BE                   .dbline 123
 01BE           ;        }
 01BE           L28:
 01BE                   .dbline 124
 01BE           ;   }
 01BE           L25:
 01BE                   .dbline 125
 01BE           ;   if ((c&M8880_BIT2)&&((c&M8880_BIT3)==0)){
 01BE A2FE              sbrs R10,2
 01C0 35C0              rjmp L33
 01C2           X4:
 01C2 A3FC              sbrc R10,3
 01C4 33C0              rjmp L33
 01C6           X5:
 01C6                   .dbline 125
 01C6                   .dbline 126
 01C6           ;        if (M8880_State.RecvIntCount>0){
 01C6 80E0              ldi R24,0
 01C8 20900300          lds R2,_M8880_State+3
 01CC 8215              cp R24,R2
 01CE 70F5              brsh L35
 01D0           X6:
 01D0                   .dbline 126
 01D0                   .dbline 127
 01D0           ;                M8880_State.RecvIntCount--;
 01D0 822D              mov R24,R2
 01D2 8150              subi R24,1
 01D4 80930300          sts _M8880_State+3,R24
 01D8                   .dbline 128
 01D8           ;                *M8880_State.CurRecv++=dec[M8880_ReadChar()];
 01D8 25DF              rcall _M8880_ReadChar
 01DA 20900E00          lds R2,_dec
 01DE 30900F00          lds R3,_dec+1
 01E2 E02F              mov R30,R16
 01E4 FF27              clr R31
 01E6 E20D              add R30,R2
 01E8 F31D              adc R31,R3
 01EA 2080              ldd R2,z+0
 01EC E0910800          lds R30,_M8880_State+8
 01F0 F0910900          lds R31,_M8880_State+8+1
 01F4 2192              st Z+,R2
 01F6 F0930900          sts _M8880_State+8+1,R31
 01FA E0930800          sts _M8880_State+8,R30
 01FE                   .dbline 129
 01FE           ;                if (M8880_State.CurRecv==recvbuf+M8880_RECV_BUFSIZE)
 01FE 80E0              ldi R24,<_recvbuf+50
 0200 90E0              ldi R25,>_recvbuf+50
 0202 E817              cp R30,R24
 0204 F907              cpc R31,R25
 0206 31F4              brne L40
 0208           X7:
 0208                   .dbline 130
 0208           ;                       M8880_State.CurRecv=recvbuf;
 0208 80E0              ldi R24,<_recvbuf
 020A 90E0              ldi R25,>_recvbuf
 020C 90930900          sts _M8880_State+8+1,R25
 0210 80930800          sts _M8880_State+8,R24
 0214           L40:
 0214                   .dbline 131
 0214           ;                if (M8880_State.RecvIntCount==0)
 0214 20900300          lds R2,_M8880_State+3
 0218 2220              tst R2
 021A 41F4              brne L45
 021C           X8:
 021C                   .dbline 132
 021C           ;                   M8880_State.RecvEndPtr=M8880_State.CurRecv;
 021C 20900800          lds R2,_M8880_State+8
 0220 30900900          lds R3,_M8880_State+8+1
 0224 30920700          sts _M8880_State+6+1,R3
 0228 20920600          sts _M8880_State+6,R2
 022C           L45:
 022C                   .dbline 133
 022C           ;        }
 022C           L35:
 022C                   .dbline 134
 022C           ;   }
 022C           L33:
 022C                   .dbline -2
 022C           L24:
 022C                   .dbline 0 ; func end
 022C A990              ld R10,y+
 022E 0990              ld R0,y+
 0230 0FBE              out 0x3f,R0
 0232 F991              ld R31,y+
 0234 E991              ld R30,y+
 0236 B991              ld R27,y+
 0238 A991              ld R26,y+

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -