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

📄 gsm_main.lis

📁 实现机于通讯芯片的电话接听 拨出 以及来电振领提示
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0002           ; uchar xk=0;
 0002           ; uchar req_flag=0,start_flag=0,vision_flag=0,cmd_flag=0;//定义来自pc端不同数据的标记
 0002           ; uchar hand[]={0x0f,0x34,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 0002           ; uchar ring[]={0x01,0x36,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 0002           ; uchar telnum[14];//拨出的电话号码
 0002           ; uchar num=0;//电话号码长度
 0002           ; uchar num_end_flag=0;//电话号码结束标记
 0002           ; uchar hkon[]={0x01,0x31,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 0002           ; uchar hkoff[]={0x01,0x30,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 0002           ; uchar mton[]={0x01,0x44,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 0002           ; uchar mtoff[]={0x01,0x43,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 0002           ; uchar idnum[14];
 0002           ; uchar hookon=0,hookoff=0,muteon=0,muteoff=0;
 0002           ; /****************************************************************/
 0002           ; void Delay(uint num )
 0002           ; {      
 0002                   .dbline 29
 0002           ;        uint i;
 0002           ;        for(;num>0;num--)
 0002 0AC0              rjmp L5
 0004           L2:
 0004                   .dbline 30
 0004           ;        {
 0004                   .dbline 31
 0004           ;          i=600;
 0004 48E5              ldi R20,600
 0006 52E0              ldi R21,2
 0008 02C0              rjmp L7
 000A           L6:
 000A                   .dbline 33
 000A                   .dbline 34
 000A 4150              subi R20,1
 000C 5040              sbci R21,0
 000E                   .dbline 35
 000E           L7:
 000E                   .dbline 32
 000E 4030              cpi R20,0
 0010 4507              cpc R20,R21
 0012 D9F7              brne L6
 0014           X0:
 0014                   .dbline 36
 0014           L3:
 0014                   .dbline 29
 0014 0150              subi R16,1
 0016 1040              sbci R17,0
 0018           L5:
 0018                   .dbline 29
 0018 0030              cpi R16,0
 001A 0107              cpc R16,R17
 001C 99F7              brne L2
 001E           X1:
 001E                   .dbline -2
 001E           L1:
 001E 00D0              rcall pop_gset1
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbsym r i 20 i
 0022                   .dbsym r num 16 i
 0022                   .dbend
 0022                   .dbfunc e main _main fV
                        .even
 0022           _main::
 0022                   .dbline -1
 0022                   .dbline 39
 0022           ;          while(i)
 0022           ;          {
 0022           ;            i--;
 0022           ;          }
 0022           ;        }
 0022           ; }
 0022           ; void main()
 0022           ; {
 0022                   .dbline 40
 0022           ;    DDRC |=0x38; //设置SDA SCL MUTE即port3 portc4 portc5为输出
 0022 84B3              in R24,0x14
 0024 8863              ori R24,56
 0026 84BB              out 0x14,R24
 0028                   .dbline 41
 0028           ;    DDRB |=0x20;//设置pwr 即portb5为输出
 0028 BD9A              sbi 0x17,5
 002A                   .dbline 42
 002A           ;    DDRD |=0x04;//设置gsm_rst即portd2为输出
 002A 8A9A              sbi 0x11,2
 002C                   .dbline 45
 002C           ;    
 002C           ;    /*********IIC初始化******************/
 002C           ;    TWBR=0;
 002C 2224              clr R2
 002E 20B8              out 0x0,R2
 0030                   .dbline 46
 0030           ;    TWSR=00;
 0030 21B8              out 0x1,R2
 0032                   .dbline 47
 0032           ;    TWAR=0x20;
 0032 80E2              ldi R24,32
 0034 82B9              out 0x2,R24
 0036                   .dbline 48
 0036           ;    Twi_ACK();
 0036 85EC              ldi R24,197
 0038 86BF              out 0x36,R24
 003A                   .dbline 51
 003A           ;    /***********系统功能初始化***************/
 003A           ;        
 003A           ;    PWRON;
 003A 88B3              in R24,0x18
 003C 8F7D              andi R24,223
 003E 88BB              out 0x18,R24
 0040                   .dbline 52
 0040           ;    PORTD |=0x04;
 0040 929A              sbi 0x12,2
 0042                   .dbline 53
 0042           ;    Delay(500);
 0042 04EF              ldi R16,500
 0044 11E0              ldi R17,1
 0046 DCDF              rcall _Delay
 0048                   .dbline 54
 0048           ;    PORTD &=0xfb;
 0048 82B3              in R24,0x12
 004A 8B7F              andi R24,251
 004C 82BB              out 0x12,R24
 004E                   .dbline 56
 004E           ;    
 004E           ;    USART_Init();
 004E 00D0              rcall _USART_Init
 0050                   .dbline 57
 0050           ;    SREG |= 0x80;
 0050 7894              bset 7
 0052                   .dbline 58
 0052           ;    Delay(1000);
 0052 08EE              ldi R16,1000
 0054 13E0              ldi R17,3
 0056 D4DF              rcall _Delay
 0058                   .dbline 59
 0058           ;    Usart_Command("AT",2);
 0058 22E0              ldi R18,2
 005A 30E0              ldi R19,0
 005C 00E0              ldi R16,<L10
 005E 10E0              ldi R17,>L10
 0060 00D0              rcall _Usart_Command
 0062                   .dbline 60
 0062           ;    Usart_Tx(0x0d);
 0062 0DE0              ldi R16,13
 0064 10E0              ldi R17,0
 0066 00D0              rcall _Usart_Tx
 0068                   .dbline 62
 0068           ;   // Delay(30000);
 0068           ;    Usart_Command("AT+CLIP=1",9); //设置来电显示
 0068 29E0              ldi R18,9
 006A 30E0              ldi R19,0
 006C 00E0              ldi R16,<L11
 006E 10E0              ldi R17,>L11
 0070 00D0              rcall _Usart_Command
 0072                   .dbline 63
 0072           ;    Usart_Tx(0x0d);
 0072 0DE0              ldi R16,13
 0074 10E0              ldi R17,0
 0076 00D0              rcall _Usart_Tx
 0078 3CC1              rjmp L13
 007A           L12:
 007A                   .dbline 65
 007A           ;    while(1)
 007A           ;    {
 007A                   .dbline 66
 007A           ;           if(start_flag) //如果接受到的是0x0f
 007A 20900600          lds R2,_start_flag
 007E 2220              tst R2
 0080 59F0              breq L15
 0082                   .dbline 67
 0082           ;               {
 0082                   .dbline 68
 0082           ;                       start_flag=0;
 0082 2224              clr R2
 0084 20920600          sts _start_flag,R2
 0088                   .dbline 69
 0088           ;                       cmd_num=0;
 0088 20920100          sts _cmd_num,R2
 008C                   .dbline 70
 008C           ;                       data=hand;//准备握手数据
 008C 80E0              ldi R24,<_hand
 008E 90E0              ldi R25,>_hand
 0090 90931D00          sts _data+1,R25
 0094 80931C00          sts _data,R24
 0098                   .dbline 71
 0098           ;               }
 0098           L15:
 0098                   .dbline 72
 0098           ;               if(vision_flag)//接收到请求ID命令
 0098 20900700          lds R2,_vision_flag
 009C 2220              tst R2
 009E 59F0              breq L17
 00A0                   .dbline 73
 00A0           ;               {
 00A0                   .dbline 74
 00A0           ;                       vision_flag=0;
 00A0 2224              clr R2
 00A2 20920700          sts _vision_flag,R2
 00A6                   .dbline 75
 00A6           ;                       cmd_num=0;
 00A6 20920100          sts _cmd_num,R2
 00AA                   .dbline 76
 00AA           ;                       data=idnum;//准备ID数据
 00AA 80E0              ldi R24,<_idnum
 00AC 90E0              ldi R25,>_idnum
 00AE 90931D00          sts _data+1,R25
 00B2 80931C00          sts _data,R24
 00B6                   .dbline 77
 00B6           ;               }
 00B6           L17:
 00B6                   .dbline 78
 00B6           ;               if(req_flag)
 00B6 20900500          lds R2,_req_flag
 00BA 2220              tst R2
 00BC E1F1              breq L19
 00BE                   .dbline 79
 00BE           ;               {
 00BE                   .dbline 80
 00BE           ;                   if(hookon) //Hook on置位
 00BE 20905F00          lds R2,_hookon
 00C2 2220              tst R2
 00C4 51F0              breq L21
 00C6                   .dbline 81
 00C6           ;                       {
 00C6                   .dbline 82
 00C6           ;                               data=hkon;//准备hookon数据
 00C6 80E0              ldi R24,<_hkon
 00C8 90E0              ldi R25,>_hkon
 00CA 90931D00          sts _data+1,R25
 00CE 80931C00          sts _data,R24
 00D2                   .dbline 83
 00D2           ;                               hookon=0;
 00D2 2224              clr R2
 00D4 20925F00          sts _hookon,R2
 00D8                   .dbline 84
 00D8           ;                       }
 00D8 29C0              rjmp L22
 00DA           L21:
 00DA                   .dbline 85
 00DA           ;                       else if(hookoff)//hook off置位
 00DA 20906000          lds R2,_hookoff
 00DE 2220              tst R2
 00E0 51F0              breq L23
 00E2                   .dbline 86
 00E2           ;                       {
 00E2                   .dbline 87
 00E2           ;                               data=hkoff;//准备hook off数据
 00E2 80E0              ldi R24,<_hkoff
 00E4 90E0              ldi R25,>_hkoff
 00E6 90931D00          sts _data+1,R25
 00EA 80931C00          sts _data,R24
 00EE                   .dbline 88
 00EE           ;                               hookoff=0;
 00EE 2224              clr R2
 00F0 20926000          sts _hookoff,R2
 00F4                   .dbline 89
 00F4           ;                       }
 00F4 1BC0              rjmp L24
 00F6           L23:
 00F6                   .dbline 90
 00F6           ;                       else if(muteon) //静音关闭标记置位
 00F6 20906100          lds R2,_muteon
 00FA 2220              tst R2
 00FC 51F0              breq L25
 00FE                   .dbline 91
 00FE           ;                       {
 00FE                   .dbline 92
 00FE           ;                               data=mton;//准备静音数据
 00FE 80E0              ldi R24,<_mton
 0100 90E0              ldi R25,>_mton
 0102 90931D00          sts _data+1,R25
 0106 80931C00          sts _data,R24
 010A                   .dbline 93
 010A           ;                               muteon=0;
 010A 2224              clr R2
 010C 20926100          sts _muteon,R2
 0110                   .dbline 94
 0110           ;                       }
 0110 0DC0              rjmp L26
 0112           L25:
 0112                   .dbline 95
 0112           ;                       else if(muteoff)//静音打开标记置位
 0112 20906200          lds R2,_muteoff
 0116 2220              tst R2
 0118 49F0              breq L27
 011A                   .dbline 96
 011A           ;                       {
 011A                   .dbline 97
 011A           ;                               data=mtoff;//准备静音打开数据
 011A 80E0              ldi R24,<_mtoff
 011C 90E0              ldi R25,>_mtoff
 011E 90931D00          sts _data+1,R25
 0122 80931C00          sts _data,R24
 0126                   .dbline 98
 0126           ;                               muteoff=0;
 0126 2224              clr R2
 0128 20926200          sts _muteoff,R2
 012C                   .dbline 99
 012C           ;                       }
 012C           L27:
 012C           L26:
 012C           L24:
 012C           L22:
 012C                   .dbline 100
 012C           ;                       req_flag=0;
 012C 2224              clr R2
 012E 20920500          sts _req_flag,R2
 0132                   .dbline 101
 0132           ;                       cmd_num=0;
 0132 20920100          sts _cmd_num,R2
 0136                   .dbline 102
 0136           ;               }
 0136           L19:
 0136                   .dbline 103
 0136           ;               if(cmd_flag)
 0136 20900800          lds R2,_cmd_flag
 013A 2220              tst R2
 013C 09F4              brne X3
 013E D9C0              rjmp L29
 0140           X3:
 0140                   .dbline 104
 0140           ;               {
 0140                   .dbline 105
 0140           ;                       cmd_flag=0;
 0140 2224              clr R2
 0142 20920800          sts _cmd_flag,R2
 0146                   .dbline 106
 0146           ;                               cmd_num=0;
 0146 20920100          sts _cmd_num,R2
 014A                   .dbline 107
 014A           ;                       if(buf[1]==0x08 && buf[2]==0x31 && buf[3]==0x30 )//如果接受到握手请求[0x01 0x08 0x31 0x30 0xff]
 014A 80911F00          lds R24,_buf+1
 014E 8830              cpi R24,8
 0150 61F4              brne L31
 0152 80912000          lds R24,_buf+2
 0156 8133              cpi R24,49
 0158 41F4              brne L31
 015A 80912100          lds R24,_buf+3
 015E 8033              cpi R24,48
 0160 21F4              brne L31
 0162                   .dbline 108
 0162           ;                               {
 0162                   .dbline 109
 0162           ;                                        PWRON;
 0162 88B3              in R24,0x18
 0164 8F7D              andi R24,223
 0166 88BB              out 0x18,R24
 0168                   .dbline 110
 0168           ;                           }
 0168 C4C0              rjmp L32
 016A           L31:
 016A                   .dbline 111

⌨️ 快捷键说明

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