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

📄 8880.lis

📁 使用8880实现DTMF通信及拨号的程序.
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module _8880.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\Shuaihu\AVR\8880\8880.c
                        .area data(ram, con, rel)
 0000                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 0000           _noresponse::
 0000                   .blkw 1
                        .area idata
 0000 6100              .word L1
                        .area data(ram, con, rel)
 0002                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 0002                   .dbsym e noresponse _noresponse pc
 0002           _handdown::
 0002                   .blkw 1
                        .area idata
 0002 5700              .word L2
                        .area data(ram, con, rel)
 0004                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 0004                   .dbsym e handdown _handdown pc
 0004           _c_ok::
 0004                   .blkw 1
                        .area idata
 0004 5300              .word L3
                        .area data(ram, con, rel)
 0006                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 0006                   .dbsym e c_ok _c_ok pc
 0006           _c_error::
 0006                   .blkw 1
                        .area idata
 0006 4C00              .word L4
                        .area data(ram, con, rel)
 0008                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 0008                   .dbsym e c_error _c_error pc
 0008           _c_busying::
 0008                   .blkw 1
                        .area idata
 0008 4300              .word L5
                        .area data(ram, con, rel)
 000A                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 000A                   .dbsym e c_busying _c_busying pc
 000A           _calling::
 000A                   .blkw 1
                        .area idata
 000A 3A00              .word L6
                        .area data(ram, con, rel)
 000C                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 000C                   .dbsym e calling _calling pc
 000C           _answering::
 000C                   .blkw 1
                        .area idata
 000C 2F00              .word L7
                        .area data(ram, con, rel)
 000E                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 000E                   .dbsym e answering _answering pc
                        .area text(rom, con, rel)
 0000                   .dbfile E:\Shuaihu\AVR\8880\8880.c
 0000                   .dbfunc e M8880_WriteChar _M8880_WriteChar fV
 0000           ;              c -> R16
                        .even
 0000           _M8880_WriteChar::
 0000                   .dbline -1
 0000                   .dbline 18
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; #include "8880.h"
 0000           ; #include "serial.h"
 0000           ; #include "main.h"
 0000           ; #include "timer.h"
 0000           ; char sendbuf[M8880_SEND_BUFSIZE];
 0000           ; char recvbuf[M8880_RECV_BUFSIZE];
 0000           ; M8880_STATE M8880_State;
 0000           ; char *noresponse="noresponse\n";
 0000           ; char *handdown="handdown\n";
 0000           ; char *c_ok="ok\n";
 0000           ; char *c_error="error\n";
 0000           ; char *c_busying="busying\n";
 0000           ; char *calling="calling\n";
 0000           ; char *answering="answering\n";
 0000           ; void M8880_WriteChar(char c)
 0000           ; {
 0000                   .dbline 19
 0000           ;        M8880_DataPort&=0xf0;                                                          //CLR low 4bit
 0000 85B3              in R24,0x15
 0002 807F              andi R24,240
 0004 85BB              out 0x15,R24
 0006                   .dbline 20
 0006           ;        M8880_CtrlPort&=~(M8880_CS|M8880_RW|M8880_RS);         //CLR CS  RW  RS hold CLK
 0006 82B3              in R24,0x12
 0008 8F74              andi R24,79
 000A 82BB              out 0x12,R24
 000C                   .dbline 21
 000C           ;        M8880_DataPort|=(c&0xf);                                                       //Write Data
 000C 802F              mov R24,R16
 000E 8F70              andi R24,15
 0010 25B2              in R2,0x15
 0012 282A              or R2,R24
 0014 25BA              out 0x15,R2
 0016                   .dbline 22
 0016           ;        M8880_CtrlPort&=~M8880_CLK;                                            //CLR CLK
 0016 9698              cbi 0x12,6
 0018                   .dbline 23
 0018           ;        NOP();                                                                                         //wait a few time
 0018 0000              nop
 001A                   .dbline 24
 001A           ;        NOP();
 001A 0000              nop
 001C                   .dbline 25
 001C           ;        M8880_CtrlPort|=M8880_CS|M8880_RW|M8880_CLK|M8880_RS;  //set CS RW CLK RS 
 001C 82B3              in R24,0x12
 001E 806F              ori R24,240
 0020 82BB              out 0x12,R24
 0022                   .dbline -2
 0022           L8:
 0022                   .dbline 0 ; func end
 0022 0895              ret
 0024                   .dbsym r c 16 c
 0024                   .dbend
 0024                   .dbfunc e M8880_ReadChar _M8880_ReadChar fc
 0024           ;              c -> R16
                        .even
 0024           _M8880_ReadChar::
 0024                   .dbline -1
 0024                   .dbline 28
 0024           ; }
 0024           ; char M8880_ReadChar()
 0024           ; {
 0024                   .dbline 30
 0024           ;        char c;
 0024           ;        M8880_DataDDR&=0xf0;                                                           //set direction to input
 0024 84B3              in R24,0x14
 0026 807F              andi R24,240
 0028 84BB              out 0x14,R24
 002A                   .dbline 31
 002A           ;        M8880_CtrlPort&=~(M8880_CS|M8880_RS);                          //CLR CS RS hold RW CLK
 002A 82B3              in R24,0x12
 002C 8F75              andi R24,95
 002E 82BB              out 0x12,R24
 0030                   .dbline 32
 0030           ;        M8880_CtrlPort&=~M8880_CLK;                                            //CLR CLK
 0030 9698              cbi 0x12,6
 0032                   .dbline 33
 0032           ;        NOP();                                                                                         //waite a few time
 0032 0000              nop
 0034                   .dbline 34
 0034           ;        NOP();
 0034 0000              nop
 0036                   .dbline 35
 0036           ;        c=M8880_DataPIN&0xf;                                                           //ReadData
 0036 03B3              in R16,0x13
 0038 0F70              andi R16,15
 003A                   .dbline 36
 003A           ;        M8880_CtrlPort|=M8880_CS|M8880_RW|M8880_CLK|M8880_RS;  //set CS RW CLK RS
 003A 82B3              in R24,0x12
 003C 806F              ori R24,240
 003E 82BB              out 0x12,R24
 0040                   .dbline 37
 0040           ;        M8880_DataDDR|=0X0F;                                                           //restore direction
 0040 84B3              in R24,0x14
 0042 8F60              ori R24,15
 0044 84BB              out 0x14,R24
 0046                   .dbline 38
 0046           ;        return c;
 0046                   .dbline -2
 0046           L9:
 0046                   .dbline 0 ; func end
 0046 0895              ret
 0048                   .dbsym r c 16 c
 0048                   .dbend
 0048                   .dbfunc e M8880_WriteCtrl _M8880_WriteCtrl fV
 0048           ;           flag -> R18
 0048           ;              c -> R16
                        .even
 0048           _M8880_WriteCtrl::
 0048                   .dbline -1
 0048                   .dbline 41
 0048           ; }
 0048           ; void M8880_WriteCtrl(char c,char flag)
 0048           ; {
 0048                   .dbline 42
 0048           ;        M8880_DataPort&=0xf0;                                                          //clear low 4bit
 0048 85B3              in R24,0x15
 004A 807F              andi R24,240
 004C 85BB              out 0x15,R24
 004E                   .dbline 43
 004E           ;        M8880_CtrlPort&=~(M8880_CS|M8880_RW);                          //CLR CS  RW  HOLD RS CLK
 004E 82B3              in R24,0x12
 0050 8F7C              andi R24,207
 0052 82BB              out 0x12,R24
 0054                   .dbline 44
 0054           ;        if (flag)                                                                                      //if we need to write CRB
 0054 2223              tst R18
 0056 39F0              breq L11
 0058           X0:
 0058                   .dbline 45
 0058           ;                M8880_DataPort|=((c&0xf)|M8880_BIT3);                  //so we need to set bit3
 0058 802F              mov R24,R16
 005A 8F70              andi R24,15
 005C 8860              ori R24,8
 005E 25B2              in R2,0x15
 0060 282A              or R2,R24
 0062 25BA              out 0x15,R2
 0064 05C0              rjmp L12
 0066           L11:
 0066                   .dbline 47
 0066           ;        else                                                                                           //else
 0066           ;                M8880_DataPort|=(c&(0xf&(~M8880_BIT3)));               //we need to clear bit3
 0066 802F              mov R24,R16
 0068 8770              andi R24,7
 006A 25B2              in R2,0x15
 006C 282A              or R2,R24
 006E 25BA              out 0x15,R2
 0070           L12:
 0070                   .dbline 48
 0070           ;        M8880_CtrlPort&=~M8880_CLK;                                            //CLR CLK
 0070 9698              cbi 0x12,6
 0072                   .dbline 49
 0072           ;        NOP();                                                                                         //wait a few time
 0072 0000              nop
 0074                   .dbline 50
 0074           ;        NOP();
 0074 0000              nop
 0076                   .dbline 51
 0076           ;        M8880_CtrlPort|=M8880_CS|M8880_RW|M8880_CLK|M8880_RS;          //set CS RW CLK RS
 0076 82B3              in R24,0x12
 0078 806F              ori R24,240
 007A 82BB              out 0x12,R24
 007C                   .dbline 52
 007C           ;        if (flag){                                                                             //if we need to write CRB ...
 007C 2223              tst R18
 007E 91F0              breq L13
 0080           X1:
 0080                   .dbline 52
 0080                   .dbline 53
 0080           ;               M8880_DataPort&=0xf0;
 0080 85B3              in R24,0x15
 0082 807F              andi R24,240
 0084 85BB              out 0x15,R24
 0086                   .dbline 54
 0086           ;               M8880_CtrlPort&=~(M8880_CS|M8880_RW);
 0086 82B3              in R24,0x12
 0088 8F7C              andi R24,207
 008A 82BB              out 0x12,R24
 008C                   .dbline 55
 008C           ;               M8880_DataPort|=(c>>4);
 008C 802F              mov R24,R16
 008E 8295              swap R24
 0090 8F70              andi R24,#0x0F
 0092 25B2              in R2,0x15
 0094 282A              or R2,R24
 0096 25BA              out 0x15,R2
 0098                   .dbline 56
 0098           ;               M8880_CtrlPort&=~M8880_CLK;
 0098 9698              cbi 0x12,6
 009A                   .dbline 57
 009A           ;               NOP();
 009A 0000              nop
 009C                   .dbline 58
 009C           ;               NOP();
 009C 0000              nop
 009E                   .dbline 59
 009E           ;               M8880_CtrlPort|=M8880_CS|M8880_RW|M8880_CLK|M8880_RS;  //set CS RW CLK
 009E 82B3              in R24,0x12
 00A0 806F              ori R24,240
 00A2 82BB              out 0x12,R24
 00A4                   .dbline 60
 00A4           ;        }
 00A4           L13:
 00A4                   .dbline -2
 00A4           L10:
 00A4                   .dbline 0 ; func end
 00A4 0895              ret
 00A6                   .dbsym r flag 18 c
 00A6                   .dbsym r c 16 c
 00A6                   .dbend
 00A6                   .dbfunc e M8880_ReadState _M8880_ReadState fc
 00A6           ;              c -> R16
                        .even
 00A6           _M8880_ReadState::
 00A6                   .dbline -1
 00A6                   .dbline 63
 00A6           ; }
 00A6           ; char M8880_ReadState(void)
 00A6           ; {
 00A6                   .dbline 65
 00A6           ;        char c;
 00A6           ;        M8880_DataDDR&=0xf0;
 00A6 84B3              in R24,0x14
 00A8 807F              andi R24,240
 00AA 84BB              out 0x14,R24
 00AC                   .dbline 66
 00AC           ;        M8880_CtrlPort&=~(M8880_CS);
 00AC 9598              cbi 0x12,5
 00AE                   .dbline 67
 00AE           ;        M8880_CtrlPort&=~M8880_CLK;
 00AE 9698              cbi 0x12,6
 00B0                   .dbline 68
 00B0           ;        NOP();
 00B0 0000              nop
 00B2                   .dbline 69
 00B2           ;        NOP();
 00B2 0000              nop
 00B4                   .dbline 70
 00B4           ;        c=M8880_DataPIN&0xf;
 00B4 03B3              in R16,0x13
 00B6 0F70              andi R16,15
 00B8                   .dbline 71
 00B8           ;        M8880_CtrlPort|=M8880_CS|M8880_RW|M8880_CLK|M8880_RS;  //set CS RW CLK
 00B8 82B3              in R24,0x12
 00BA 806F              ori R24,240
 00BC 82BB              out 0x12,R24
 00BE                   .dbline 72
 00BE           ;        M8880_DataDDR|=0X0F;
 00BE 84B3              in R24,0x14
 00C0 8F60              ori R24,15
 00C2 84BB              out 0x14,R24

⌨️ 快捷键说明

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