📄 gsm_main.lis
字号:
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 + -