📄 gsm.lst
字号:
0137 F409 BNE 0x0139
0138 C0C1 RJMP 0x01FA
(0104) {
(0105) cmd_flag=0;
0139 2422 CLR R2
013A 92200068 STS cmd_flag,R2
(0106) cmd_num=0;
013C 92200061 STS cmd_num,R2
(0107) if(buf[1]==0x08 && buf[2]==0x31 && buf[3]==0x30 )//如果接受到握手请求[0x01 0x08 0x31 0x30 0xff]
013E 918000FB LDS R24,buf+1
0140 3088 CPI R24,0x8
0141 F461 BNE 0x014E
0142 918000FC LDS R24,buf+2
0144 3381 CPI R24,0x31
0145 F441 BNE 0x014E
0146 918000FD LDS R24,buf+3
0148 3380 CPI R24,0x30
0149 F421 BNE 0x014E
(0108) {
(0109) PWRON;
014A B388 IN R24,0x18
014B 7D8F ANDI R24,0xDF
014C BB88 OUT 0x18,R24
(0110) }
014D C0AC RJMP 0x01FA
(0111) else if (buf[1]==0x06 && buf[2]==0x34 &&buf[3]==0xff) //软件Mute键
014E 918000FB LDS R24,buf+1
0150 3086 CPI R24,6
0151 F481 BNE 0x0162
0152 918000FC LDS R24,buf+2
0154 3384 CPI R24,0x34
0155 F461 BNE 0x0162
0156 918000FD LDS R24,buf+3
0158 3F8F CPI R24,0xFF
0159 F441 BNE 0x0162
(0112) {
(0113) muteon=1;
015A E081 LDI R24,1
015B 938000C1 STS muteon,R24
(0114) Delay(15);
015D E00F LDI R16,0xF
015E E010 LDI R17,0
015F DF51 RCALL _Delay
(0115) PWROFF;
0160 9AC5 SBI 0x18,5
(0116) }
0161 C098 RJMP 0x01FA
(0117) else if (buf[1]==0x06 && buf[2]==0x35 &&buf[3]==0xff) //软件Mute按下
0162 918000FB LDS R24,buf+1
0164 3086 CPI R24,6
0165 F481 BNE 0x0176
0166 918000FC LDS R24,buf+2
0168 3385 CPI R24,0x35
0169 F461 BNE 0x0176
016A 918000FD LDS R24,buf+3
016C 3F8F CPI R24,0xFF
016D F441 BNE 0x0176
(0118) {
(0119) muteoff=1;
016E E081 LDI R24,1
016F 938000C2 STS muteoff,R24
(0120) Delay(15);
0171 E00F LDI R16,0xF
0172 E010 LDI R17,0
0173 DF3D RCALL _Delay
(0121) PWROFF;
0174 9AC5 SBI 0x18,5
(0122) }
0175 C084 RJMP 0x01FA
(0123) else if (buf[1]==0x06 && buf[2]==0x31 &&buf[3]==0xff) //按下hook on键
0176 918000FB LDS R24,buf+1
0178 3086 CPI R24,6
0179 F4C1 BNE 0x0192
017A 918000FC LDS R24,buf+2
017C 3381 CPI R24,0x31
017D F4A1 BNE 0x0192
017E 918000FD LDS R24,buf+3
0180 3F8F CPI R24,0xFF
0181 F481 BNE 0x0192
(0124) {
(0125) Usart_Command("ata",3); //设置来电显示
0182 E023 LDI R18,3
0183 E030 LDI R19,0
0184 EC0B LDI R16,0xCB
0185 E010 LDI R17,0
0186 DF05 RCALL _Usart_Command
(0126) Usart_Tx(0x0d);
0187 E00D LDI R16,0xD
0188 E010 LDI R17,0
0189 DEF0 RCALL _Usart_Tx
(0127) hookon=1;
018A E081 LDI R24,1
018B 938000BF STS hookon,R24
(0128) Delay(15);
018D E00F LDI R16,0xF
018E E010 LDI R17,0
018F DF21 RCALL _Delay
(0129) PWROFF;
0190 9AC5 SBI 0x18,5
(0130) }
0191 C068 RJMP 0x01FA
(0131) else if (buf[1]==0x06 && buf[2]==0x32 && buf[3]==0xff)//按下hook off键
0192 918000FB LDS R24,buf+1
0194 3086 CPI R24,6
0195 F4C1 BNE 0x01AE
0196 918000FC LDS R24,buf+2
0198 3382 CPI R24,0x32
0199 F4A1 BNE 0x01AE
019A 918000FD LDS R24,buf+3
019C 3F8F CPI R24,0xFF
019D F481 BNE 0x01AE
(0132) {
(0133) Usart_Command("ath",3); //设置来电显示
019E E023 LDI R18,3
019F E030 LDI R19,0
01A0 EC07 LDI R16,0xC7
01A1 E010 LDI R17,0
01A2 DEE9 RCALL _Usart_Command
(0134) Usart_Tx(0x0d);
01A3 E00D LDI R16,0xD
01A4 E010 LDI R17,0
01A5 DED4 RCALL _Usart_Tx
(0135) hookoff=1;
01A6 E081 LDI R24,1
01A7 938000C0 STS hookoff,R24
(0136) Delay(15);
01A9 E00F LDI R16,0xF
01AA E010 LDI R17,0
01AB DF05 RCALL _Delay
(0137) PWROFF;
01AC 9AC5 SBI 0x18,5
(0138) }
01AD C04C RJMP 0x01FA
(0139) else if (buf[1]==0x02) //拨号
01AE 918000FB LDS R24,buf+1
01B0 3082 CPI R24,2
01B1 F009 BEQ 0x01B3
01B2 C047 RJMP 0x01FA
(0140) {
(0141) for(xk=0;xk<18;xk++)
01B3 2422 CLR R2
01B4 92200064 STS xk,R2
01B6 C024 RJMP 0x01DB
(0142) {
(0143) if(buf[xk+2]==0xff)
01B7 D21F RCALL 0x03D7
01B8 8180 LDD R24,Z+0
01B9 3F8F CPI R24,0xFF
01BA F421 BNE 0x01BF
(0144) {
(0145) num_end_flag=1;
01BB E081 LDI R24,1
01BC 93800086 STS num_end_flag,R24
(0146) break;
01BE C021 RJMP 0x01E0
(0147) }
(0148) if(buf[xk+2] !=0x01 && buf[xk+2] !=0x02)
01BF D217 RCALL 0x03D7
01C0 8180 LDD R24,Z+0
01C1 3081 CPI R24,1
01C2 F099 BEQ 0x01D6
01C3 D213 RCALL 0x03D7
01C4 8180 LDD R24,Z+0
01C5 3082 CPI R24,2
01C6 F079 BEQ 0x01D6
01C7 D20F RCALL 0x03D7
(0149) {
(0150) telnum[num]=buf[xk+2];
01C8 8020 LDD R2,Z+0
01C9 EE8A LDI R24,0xEA
01CA E090 LDI R25,0
01CB 91E00085 LDS R30,num
01CD 27FF CLR R31
01CE 0FE8 ADD R30,R24
01CF 1FF9 ADC R31,R25
01D0 8220 STD Z+0,R2
(0151) num++;
01D1 91800085 LDS R24,num
01D3 5F8F SUBI R24,0xFF
01D4 93800085 STS num,R24
01D6 91800064 LDS R24,xk
01D8 5F8F SUBI R24,0xFF
01D9 93800064 STS xk,R24
01DB 91800064 LDS R24,xk
01DD 3182 CPI R24,0x12
01DE F408 BCC 0x01E0
01DF CFD7 RJMP 0x01B7
(0152) }
(0153) }
(0154) if(num_end_flag)
01E0 90200086 LDS R2,num_end_flag
01E2 2022 TST R2
01E3 F0B1 BEQ 0x01FA
(0155) {
(0156) Usart_Command("ATD",3);
01E4 E023 LDI R18,3
01E5 E030 LDI R19,0
01E6 EC03 LDI R16,0xC3
01E7 E010 LDI R17,0
01E8 DEA3 RCALL _Usart_Command
(0157) Usart_Command(telnum,num);
01E9 91200085 LDS R18,num
01EB 2733 CLR R19
01EC EE0A LDI R16,0xEA
01ED E010 LDI R17,0
01EE DE9D RCALL _Usart_Command
(0158) Usart_Tx(';');
01EF E30B LDI R16,0x3B
01F0 E010 LDI R17,0
01F1 DE88 RCALL _Usart_Tx
(0159) Usart_Tx(0x0d);
01F2 E00D LDI R16,0xD
01F3 E010 LDI R17,0
01F4 DE85 RCALL _Usart_Tx
(0160) num_end_flag=0;
01F5 2422 CLR R2
01F6 92200086 STS num_end_flag,R2
(0161) num=0;
01F8 92200085 STS num,R2
01FA CEF3 RJMP 0x00EE
01FB 9508 RET
_TWI_ISR:
01FC 922A ST R2,-Y
01FD 923A ST R3,-Y
01FE 930A ST R16,-Y
01FF 931A ST R17,-Y
0200 938A ST R24,-Y
0201 939A ST R25,-Y
0202 93EA ST R30,-Y
0203 93FA ST R31,-Y
0204 B62F IN R2,0x3F
0205 922A ST R2,-Y
FILE: C:\DOCUME~1\Rooger\桌面\GSM_PHONE\iic.c
(0001) /************************************iic.c**************************
(0002) *iic.c负责同上层软件之间的通讯
(0003) *iic在NPI中处于两种工作方式 从机接收模式以及从机发送模式
(0004) *从机接收模式 在通讯过程中 应答主机请求 并将数据保存到相应数组以便主程序判断
(0005) *从机发送模式 通过pwr拉高请求主机接收数据 然后根据主机应答发送数据
(0006) ********************************************************************/
(0007) #include <iom8v.h>
(0008) #include <macros.h>
(0009) #include "iic.h"
(0010) #include "define.h"
(0011)
(0012) extern uchar buf[15]; //pc同i2c交互数据存放处
(0013) extern uchar cmd;//i2c数据缓存
(0014) extern uchar cmd_num;//i2c数据计数
(0015) extern uchar flag; //
(0016) extern uchar *data;
(0017) extern uchar j;
(0018) extern uchar req_flag,start_flag,vision_flag,cmd_flag;
(0019) //*****************************************************************************/
(0020) #pragma interrupt_handler TWI_ISR:18
(0021) void TWI_ISR(void)
(0022) {
(0023) //TWI被控接收器模式中断处理
(0024) switch (TestAck())
0206 B101 IN R16,0x01
0207 2711 CLR R17
0208 7F08 ANDI R16,0xF8
0209 7010 ANDI R17,0
020A 3900 CPI R16,0x90
020B E0E0 LDI R30,0
020C 071E CPC R17,R30
020D F409 BNE 0x020F
020E C0F0 RJMP 0x02FF
020F E980 LDI R24,0x90
0210 E090 LDI R25,0
0211 1780 CP R24,R16
0212 0791 CPC R25,R17
0213 F40C BGE 0x0215
0214 C030 RJMP 0x0245
0215 3700 CPI R16,0x70
0216 E0E0 LDI R30,0
0217 071E CPC R17,R30
0218 F409 BNE 0x021A
0219 C067 RJMP 0x0281
021A E780 LDI R24,0x70
021B E090 LDI R25,0
021C 1780 CP R24,R16
021D 0791 CPC R25,R17
021E F084 BLT 0x022F
021F 3600 CPI R16,0x60
0220 E0E0 LDI R30,0
0221 071E CPC R17,R30
0222 F409 BNE 0x0224
0223 C057 RJMP 0x027B
0224 3600 CPI R16,0x60
0225 E0E0 LDI R30,0
0226 071E CPC R17,R30
0227 F40C BGE 0x0229
0228 C15A RJMP 0x0383
0229 3608 CPI R16,0x68
022A E0E0 LDI R30,0
022B 071E CPC R17,R30
022C F409 BNE 0x022E
022D C050 RJMP 0x027E
022E C154 RJMP 0x0383
022F 3800 CPI R16,0x80
0230 E0E0 LDI R30,0
0231 071E CPC R17,R30
0232 F409 BNE 0x0234
0233 C053 RJMP 0x0287
0234 E880 LDI R24,0x80
0235 E090 LDI R25,0
0236 1780 CP R24,R16
0237 0791 CPC R25,R17
0238 F034 BLT 0x023F
0239 3708 CPI R16,0x78
023A E0E0 LDI R30,0
023B 071E CPC R17,R30
023C F409 BNE 0x023E
023D C046 RJMP 0x0284
023E C144 RJMP 0x0383
023F 3808 CPI R16,0x88
0240 E0E0 LDI R30,0
0241 071E CPC R17,R30
0242 F409 BNE 0x0244
0243 C07F RJMP 0x02C3
0244 C13E RJMP 0x0383
0245 3B00 CPI R16,0xB0
0246 E0E0 LDI R30,0
0247 071E CPC R17,R30
0248 F409 BNE 0x024A
0249 C12F RJMP 0x0379
024A EB80 LDI R24,0xB0
024B E090 LDI R25,0
024C 1780 CP R24,R16
024D 0791 CPC R25,R17
024E F0B4 BLT 0x0265
024F 3A00 CPI R16,0xA0
0250 E0E0 LDI R30,0
0251 071E CPC R17,R30
0252 F409 BNE 0x0254
0253 C12D RJMP 0x0381
0254 EA80 LDI R24,0xA0
0255 E090 LDI R25,0
0256 1780 CP R24,R16
0257 0791 CPC R25,R17
0258 F034 BLT 0x025F
0259 3908 CPI R16,0x98
025A E0E0 LDI R30,0
025B 071E CPC R17,R30
025C F409 BNE 0x025E
025D C0DD RJMP 0x033B
025E C124 RJMP 0x0383
025F 3A08 CPI R16,0xA8
0260 E0E0 LDI R30,0
0261 071E CPC R17,R30
0262 F409 BNE 0x0264
0263 C113 RJMP 0x0377
0264 C11E RJMP 0x0383
0265 3C00 CPI R16,0xC0
0266 E0E0 LDI R30,0
0267 071E CPC R17,R30
0268 F409 BNE 0x026A
0269 C113 RJMP 0x037D
026A EC80 LDI R24,0xC0
026B E090 LDI R25,0
026C 1780 CP R24,R16
026D 0791 CPC R25,R17
026E F034 BLT 0x0275
026F 3B08 CPI R16,0xB8
0270 E0E0 LDI R30,0
0271 071E CPC R17,R30
0272 F409 BNE 0x0274
0273 C107 RJMP 0x037B
0274 C10E RJMP 0x0383
0275 3C08 CPI R16,0xC8
0276 E0E0 LDI R30,0
0277 071E CPC R17,R30
0278 F409 BNE 0x027A
0279 C105 RJMP 0x037F
027A C108 RJMP 0x0383
(0025) {
(0026) //从机接收
(0027) case SR_SLA_ACK: //SR_SLA_ACK=0x60; SLA+W已经被接收ACK 已返回
(0028) {
(0029) Twi_ACK();
027B EC85 LDI R24,0xC5
027C BF86 OUT 0x36,R24
(0030) break;
027D C107 RJMP 0x0385
(0031) }
(0032) case MT_SR_SLA_ACK://MT_SR_SLA_ACK=0x68;SLA+R/W 作为主机的仲裁失败;自己的SLA+W 已经被接收,ACK 已返回
(0033) {
(0034) Twi_ACK();
027E EC85 LDI R24,0xC5
027F BF86 OUT 0x36,R24
(0035) break;
0280 C104 RJMP 0x0385
(0036) }
(0037) case SR_ALL_ACK://SR_ALL_ACK=0x70;接收到广播地址,ACK 已返回
(0038) {
(0039) Twi_ACK();
0281 EC85 LDI R24,0xC5
0282 BF86 OUT 0x36,R24
(0040) break;
0283 C101 RJMP 0x0385
(0041) }
(0042) case MT_SR_ALL_ACK://MT_SR_ALL_ACK=0x78;SLA+R/W 作为主机的仲裁失败;接收到广播地址,ACK 已返回
(0043) {
(0044) Twi_ACK();
0284 EC85 LDI R24,0xC5
0285 BF86 OUT 0x36,R24
(0045) break;
0286 C0FE RJMP 0x0385
(0046) }
(0047) case SR_DATA_ACK://SR_DATA_ACK=0X80;以前以自己的 SLA+W 被寻址;数据已经被接收,ACK 已返回
(0048) {
(0049) cmd=TWDR;
0287 B023 IN R2,0x03
0288 92200060 STS cmd,R2
(0050) buf[cmd_num]=cmd;
028A EF8A LDI R24,0xFA
028B E090 LDI R25,0
028C 91E00061 LDS R30,cmd_num
028E 27FF CLR R31
028F 0FE8 ADD R30,R24
0290 1FF9 ADC R31,R25
0291 8220 STD Z+0,R2
(0051) cmd_num++;
0292 91800061 LDS R24,cmd_num
0294 5F8F SUBI R24,0xFF
0295 93800061 STS cmd_num,R24
(0052) if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
0297 90200060 LDS R2,cmd
0299 2022 TST R2
029A F441 BNE 0x02A3
029B 3082 CPI R24,2
029C F431 BNE 0x02A3
(0053) {
(0054) PWRON;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -