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

📄 detectaphone.lst

📁 一个关于窃听器源代码(使用PROTEUS串口例子)
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0230 2422      CLR	R2
    0231 9220006F  STS	OkFlag,R2
    0233 D313      RCALL	pop_gset3
    0234 9508      RET
_Put_AT_String:
  count                --> R20
  atlen                --> R22
  atc                  --> R10
    0235 D31B      RCALL	push_gset3
    0236 2F62      MOV	R22,R18
    0237 0158      MOVW	R10,R16
(0154) 
(0155) }
(0156) 
(0157) /*-----------------------------------------------------------------------*/
(0158) /////////////////////////  从内存发送AT命令串  ////////////////////////////
(0159) /*-----------------------------------------------------------------------*/
(0160) void Put_AT_String(unsigned char *atc, unsigned char atlen)
(0161) {
(0162)     unsigned char count;
(0163) 		
(0164) 	for(count = 0;count < atlen;count++)
    0238 2744      CLR	R20
    0239 C00D      RJMP	0x0247
(0165) 	{
(0166) 	    TxBuf[count] = *(atc+count);
    023A 2FE4      MOV	R30,R20
    023B 27FF      CLR	R31
    023C 0DEA      ADD	R30,R10
    023D 1DFB      ADC	R31,R11
    023E 8020      LDD	R2,Z+0
    023F EA86      LDI	R24,0xA6
    0240 E090      LDI	R25,0
    0241 2FE4      MOV	R30,R20
    0242 27FF      CLR	R31
    0243 0FE8      ADD	R30,R24
    0244 1FF9      ADC	R31,R25
    0245 8220      STD	Z+0,R2
    0246 9543      INC	R20
    0247 1746      CP	R20,R22
    0248 F388      BCS	0x023A
(0167) 	}
(0168) 	
(0169) 	TxBuf[atlen] = 0x0D;                      // 发送缓冲窜结尾加“回车”
    0249 EA86      LDI	R24,0xA6
    024A E090      LDI	R25,0
    024B 2FE6      MOV	R30,R22
    024C 27FF      CLR	R31
    024D 0FE8      ADD	R30,R24
    024E 1FF9      ADC	R31,R25
    024F E08D      LDI	R24,0xD
    0250 8380      STD	Z+0,R24
(0170) 	TxBuf[atlen + 1] = 0x00;                  // 发送缓冲窜结束符号
    0251 EA87      LDI	R24,0xA7
    0252 E090      LDI	R25,0
    0253 2FE6      MOV	R30,R22
    0254 27FF      CLR	R31
    0255 0FE8      ADD	R30,R24
    0256 1FF9      ADC	R31,R25
    0257 2422      CLR	R2
    0258 8220      STD	Z+0,R2
(0171) 
(0172)     OkFlag = 0;
    0259 9220006F  STS	OkFlag,R2
(0173)     TxStatus = 0;
    025B 9220006E  STS	TxStatus,R2
(0174) 	TxIndex = 1;                              // 发送指针偏移1
    025D E081      LDI	R24,1
    025E 938000A5  STS	TxIndex,R24
(0175) 	TxEnable();                               // 激活发送
    0260 DF93      RCALL	_TxEnable
(0176)     while(!TxStatus);                         // 等代发送结束,发送缓冲指针为零则可以发送
    0261 9020006E  LDS	R2,TxStatus
    0263 2022      TST	R2
    0264 F3E1      BEQ	0x0261
(0177) 	DelayMs(20);
    0265 E104      LDI	R16,0x14
    0266 E010      LDI	R17,0
    0267 D275      RCALL	_DelayMs
(0178) 	while(!OkFlag);                           // 收到模块返回OK,命令结束
    0268 9020006F  LDS	R2,OkFlag
    026A 2022      TST	R2
    026B F3E1      BEQ	0x0268
(0179) 	OkFlag = 0;
    026C 2422      CLR	R2
    026D 9220006F  STS	OkFlag,R2
    026F D2D7      RCALL	pop_gset3
    0270 9508      RET
_PutString:
  count                --> R20
  retflag              --> R22
  length               --> R10
  str                  --> R12
    0271 D2DD      RCALL	push_gset4
    0272 2EA2      MOV	R10,R18
    0273 0168      MOVW	R12,R16
    0274 8568      LDD	R22,Y+8
(0180) }
(0181) /*-----------------------------------------------------------------------*/
(0182) /////////////////////////  向串口发送一串数据  ////////////////////////////
(0183) /*-----------------------------------------------------------------------*/
(0184) void PutString(unsigned char *str, unsigned char length,unsigned char retflag)
(0185) {
(0186)     unsigned char count;
(0187) 
(0188) 	for(count = 0;count < length;count++)
    0275 2744      CLR	R20
    0276 C00D      RJMP	0x0284
(0189) 	{
(0190) 	    TxBuf[count] = *(str+count);
    0277 2FE4      MOV	R30,R20
    0278 27FF      CLR	R31
    0279 0DEC      ADD	R30,R12
    027A 1DFD      ADC	R31,R13
    027B 8020      LDD	R2,Z+0
    027C EA86      LDI	R24,0xA6
    027D E090      LDI	R25,0
    027E 2FE4      MOV	R30,R20
    027F 27FF      CLR	R31
    0280 0FE8      ADD	R30,R24
    0281 1FF9      ADC	R31,R25
    0282 8220      STD	Z+0,R2
    0283 9543      INC	R20
    0284 154A      CP	R20,R10
    0285 F388      BCS	0x0277
(0191) 	}
(0192) 	
(0193) 	TxBuf[length] = 0x0D;                     // 发送缓冲窜结尾加“回车”
    0286 EA86      LDI	R24,0xA6
    0287 E090      LDI	R25,0
    0288 2DEA      MOV	R30,R10
    0289 27FF      CLR	R31
    028A 0FE8      ADD	R30,R24
    028B 1FF9      ADC	R31,R25
    028C E08D      LDI	R24,0xD
    028D 8380      STD	Z+0,R24
(0194) 	TxBuf[length+ 1] = 0x00;                  // 发送缓冲窜结束符号
    028E EA87      LDI	R24,0xA7
    028F E090      LDI	R25,0
    0290 2DEA      MOV	R30,R10
    0291 27FF      CLR	R31
    0292 0FE8      ADD	R30,R24
    0293 1FF9      ADC	R31,R25
    0294 2422      CLR	R2
    0295 8220      STD	Z+0,R2
(0195) 	
(0196)     TxStatus = 0;
    0296 9220006E  STS	TxStatus,R2
(0197) 	TxIndex = 1;                              // 发送指针偏移1
    0298 E081      LDI	R24,1
    0299 938000A5  STS	TxIndex,R24
(0198) 	OkFlag = 0;
    029B 9220006F  STS	OkFlag,R2
(0199) 	TxEnable();
    029D DF56      RCALL	_TxEnable
(0200) 	                                          // 激活发送
(0201)     while(!TxStatus);                         // 等代发送结束,发送缓冲指针为零则可以发送
    029E 9020006E  LDS	R2,TxStatus
    02A0 2022      TST	R2
    02A1 F3E1      BEQ	0x029E
(0202) 	DelayMs(20);
    02A2 E104      LDI	R16,0x14
    02A3 E010      LDI	R17,0
    02A4 D238      RCALL	_DelayMs
(0203)     if(retflag)
    02A5 2366      TST	R22
    02A6 F041      BEQ	0x02AF
(0204)     {	
(0205)         while(!OkFlag);                       // 收到模块返回OK,命令结束
    02A7 9020006F  LDS	R2,OkFlag
    02A9 2022      TST	R2
    02AA F3E1      BEQ	0x02A7
(0206) 		OkFlag = 0;
    02AB 2422      CLR	R2
    02AC 9220006F  STS	OkFlag,R2
(0207) 	}
    02AE C006      RJMP	0x02B5
(0208) 	else
(0209) 	{
(0210)         DelayMs(200);
    02AF EC08      LDI	R16,0xC8
    02B0 E010      LDI	R17,0
    02B1 D22B      RCALL	_DelayMs
(0211) 		OkFlag = 0;
    02B2 2422      CLR	R2
    02B3 9220006F  STS	OkFlag,R2
(0212) 	}
    02B5 D293      RCALL	pop_gset4
    02B6 9508      RET
_DialNum:
  i                    --> R10
  length               --> R20
  count                --> R22
    02B7 D299      RCALL	push_gset3
(0213) }
(0214) ////////////////////////////////////////////////////////////////////////////////
(0215) 
(0216) /*-----------------------------------------------------------------------*/
(0217) //////////////////////////         拨号         ///////////////////////////
(0218) /*-----------------------------------------------------------------------*/
(0219) void DialNum(void)
(0220) {
(0221)     unsigned char i,count=0,length=0;
    02B8 2766      CLR	R22
    02B9 2744      CLR	R20
    02BA C001      RJMP	0x02BC
(0222) 
(0223) 	while ((PhoneNum[count++] != 0))                  // 计算电话号码长度
(0224) 	{
(0225) 	    length++;
    02BB 9543      INC	R20
    02BC 2E26      MOV	R2,R22
    02BD 2433      CLR	R3
    02BE 5F6F      SUBI	R22,0xFF
    02BF E680      LDI	R24,0x60
    02C0 E090      LDI	R25,0
    02C1 2DE2      MOV	R30,R2
    02C2 27FF      CLR	R31
    02C3 0FE8      ADD	R30,R24
    02C4 1FF9      ADC	R31,R25
    02C5 8020      LDD	R2,Z+0
    02C6 2022      TST	R2
    02C7 F799      BNE	0x02BB
(0226) 	}
(0227) 	
(0228) 	TxBuf[0] = 'A';
    02C8 E481      LDI	R24,0x41
    02C9 938000A6  STS	TxBuf,R24
(0229) 	TxBuf[1] = 'T';
    02CB E584      LDI	R24,0x54
    02CC 938000A7  STS	TxBuf+1,R24
(0230) 	TxBuf[2] = 'D';
    02CE E484      LDI	R24,0x44
    02CF 938000A8  STS	TxBuf+2,R24
(0231) 	
(0232) 	i = 3;
    02D1 E083      LDI	R24,3
    02D2 2EA8      MOV	R10,R24
(0233)     for(count=0;count<length;count++)
    02D3 2766      CLR	R22
    02D4 C014      RJMP	0x02E9
(0234) 	{
(0235) 	    TxBuf[i++] = PhoneNum[count];
    02D5 2C2A      MOV	R2,R10
    02D6 2433      CLR	R3
    02D7 2D82      MOV	R24,R2
    02D8 5F8F      SUBI	R24,0xFF
    02D9 2EA8      MOV	R10,R24
    02DA E680      LDI	R24,0x60
    02DB E090      LDI	R25,0
    02DC 2FE6      MOV	R30,R22
    02DD 27FF      CLR	R31
    02DE 0FE8      ADD	R30,R24
    02DF 1FF9      ADC	R31,R25
    02E0 8040      LDD	R4,Z+0
    02E1 EA86      LDI	R24,0xA6
    02E2 E090      LDI	R25,0
    02E3 2DE2      MOV	R30,R2
    02E4 27FF      CLR	R31
    02E5 0FE8      ADD	R30,R24
    02E6 1FF9      ADC	R31,R25
    02E7 8240      STD	Z+0,R4
    02E8 9563      INC	R22
    02E9 1764      CP	R22,R20
    02EA F350      BCS	0x02D5
(0236) 	}
(0237)     
(0238) 	TxBuf[length+3] = ';';
    02EB EA89      LDI	R24,0xA9
    02EC E090      LDI	R25,0
    02ED 2FE4      MOV	R30,R20
    02EE 27FF      CLR	R31
    02EF 0FE8      ADD	R30,R24
    02F0 1FF9      ADC	R31,R25
    02F1 E38B      LDI	R24,0x3B
    02F2 8380      STD	Z+0,R24
(0239) 	TxBuf[length+4] = 0x0D;
    02F3 EA8A      LDI	R24,0xAA
    02F4 E090      LDI	R25,0
    02F5 2FE4      MOV	R30,R20
    02F6 27FF      CLR	R31
    02F7 0FE8      ADD	R30,R24
    02F8 1FF9      ADC	R31,R25
    02F9 E08D      LDI	R24,0xD
    02FA 8380      STD	Z+0,R24
(0240) 	
(0241)     OkFlag = 0;
    02FB 2422      CLR	R2
    02FC 9220006F  STS	OkFlag,R2
(0242)     TxStatus = 0;
    02FE 9220006E  STS	TxStatus,R2
(0243) 	TxIndex = 1;                              // 发送指针偏移1
    0300 E081      LDI	R24,1
    0301 938000A5  STS	TxIndex,R24
(0244) 	TxEnable();                               // 激活发送
    0303 DEF0      RCALL	_TxEnable
(0245)     while(!TxStatus);                         // 等代发送结束,发送缓冲指针为零则可以发送
    0304 9020006E  LDS	R2,TxStatus
    0306 2022      TST	R2
    0307 F3E1      BEQ	0x0304
(0246) 	DelayMs(20);
    0308 E104      LDI	R16,0x14
    0309 E010      LDI	R17,0
    030A D1D2      RCALL	_DelayMs
(0247) 	//while(!OkFlag);                           // 收到模块返回OK,命令结束	
(0248)     OkFlag = 0;
    030B 2422      CLR	R2
    030C 9220006F  STS	OkFlag,R2
    030E D238      RCALL	pop_gset3
    030F 9508      RET
_StringCompare:
  strlen               --> R20
  str2                 --> R18
  str1                 --> R16
    0310 D244      RCALL	push_gset1
    0311 814A      LDD	R20,Y+2
(0249) } 
(0250) 
(0251) /*-----------------------------------------------------------------------*/
(0252) /////////////////////////////  比较两个串 /////////////////////////////////
(0253) /*-----------------------------------------------------------------------*/
(0254) unsigned char StringCompare(volatile unsigned char *str1,const unsigned char *str2,unsigned char strlen)
(0255) {
    0312 C00C      RJMP	0x031F
(0256)     while(strlen--)
(0257) 	{
(0258) 	    if(*str1++ != *str2++) return(FALSE);    // 两个串不相等返回假
    0313 0119      MOVW	R2,R18
    0314 5F2F      SUBI	R18,0xFF
    0315 4F3F      SBCI	R19,0xFF
    0316 01F1      MOVW	R30,R2
    0317 91E4      LPM	R30,0(Z)
    0318 01D8      MOVW	R26,R16
    0319 902D      LD	R2,X+
    031A 018D      MOVW	R16,R26
    031B 162E      CP	R2,R30
    031C F011      BEQ	0x031F
    031D 2700      CLR	R16
    031E C006      RJMP	0x0325
    031F 2E24      MOV	R2,R20
    0320 2433      CLR	R3
    0321 5041      SUBI	R20,1
    0322 2022      TST	R2
    0323 F779      BNE	0x0313
(0259) 	}
(0260) 	return(TRUE);
    0324 E001      LDI	R16,1
    0325 D232      RCALL	pop_gset1
    0326 9508      RET
_Delete_SMS:
  count                --> R20
  num                  --> R22
    0327 D22B      RCALL	push_gset2
    0328 2F60      MOV	R22,R16
(0261) }
(0262) 
(0263) /*-----------------------------------------------------------------------*/
(0264) /////////////////////////////    删除短信    //////////////////////////////
(0265) /*-----------------------------------------------------------------------*/
(0266) void Delete_SMS(unsigned char num)     // 删除SMS,=0删除所有SMS
(0267) {
(0268)     unsigned char count;
(0269) 
(0270) 	for(count = 0;count < AtcmgdLen;count++)      // AT命令窜移入发送缓冲
    0329 2744      CLR	R20
    032A C00F      RJMP	0x033A
(0271) 	{
(0272) 	    TmpBuf[count] = Atcmgd[count];
    032B EE88      LDI	R24,0xE8
    032C E090      LDI	R25,0
    032D 2FE4      MOV	R30,R20
    032E 27FF      CLR	R31
    032F 0FE8      ADD	R30,R24
    0330 1FF9      ADC	R31,R25
    0331 91E4      LPM	R30,0(Z)
    0332 EC87      LDI	R24,0xC7
    0333 E091      LDI	R25,1
    0334 2FA4      MOV	R26,R20
    0335 27BB      CLR	R27
    0336 0FA8      ADD	R26,R24
    0337 1FB9      ADC	R27,R25
    0338 93EC      ST	R30,0(X)
    0339 9543      INC	R20
    033A 3048      CPI	R20,0x8
    033B F378      BCS	0x032B
(0273) 	}
(0274) 		
(0275) 	if(num == ALL)
    033C 3F6F      CPI	R22,0xFF
    033D F4F1      BNE	0x035C
(0276) 	{
(0277) 	   for(count = 1; count < 10; count++)
    033E E041      LDI	R20,1
    033F C009      RJMP	0x0349
(0278) 	   {
(0279) 	       TmpBuf[AtcmgdLen] = count + 0x30;
    0340 2F84      MOV	R24,R20
    0341 5D80      SUBI	R24,0xD0
    0342 938001CF  STS	0x1CF,R24
(0280) 	       Put_AT_String((unsigned char*)TmpBuf,(AtcmgdLen+1));
    0344 E029      LDI	R18,0x9
    0345 EC07      LDI	R16,0xC7
    0346 E011      LDI	R17,1
    0347 DEED      RCALL	_Put_AT_String
    0348 9543      INC	R20
    0349 304A      CPI	R20,0xA
    034A F3A8      BCS	0x0340
(0281) 
(0282) 		}
(0283) 	   TmpBuf[AtcmgdLen] = 0x31;
    034B E381      LDI	R24,0x31
    034C 938001CF  STS	0x1CF,R24
(0284)        for(count = 0; count < 10; count++)
    034E 2744      CLR	R20
    034F C009      RJMP	0x0359
(0285) 	   {
(0286) 	       TmpBuf[AtcmgdLen+1] = count + 0x30;
    0350 2F84      MOV	R24,R20
    0351 5D80      SUBI	R24,0xD0
    0352 938001D0  STS	0x1D0,R24
(0287) 	       Put_AT_String((unsigned char*)TmpBuf,(AtcmgdLen+2));
    0354 E02A      LDI	R18,0xA
    0355 EC07      LDI	R16,0xC7
    0356 E011      LDI	R17,1
    0357 DEDD      RCALL	_Put_AT_String
    0358 9543      INC	R20
    0359 304A      CPI	R20,0xA
    035A F3A8      BCS	0x0350
(0288) 
(0289) 	    }
(0290) 
(0291) 	}
    035B C008      RJMP	0x0364
(0292) 	else
(0293) 	{
(0294) 	    TmpBuf[AtcmgdLen] = num + 0x30;
    035C 2F86      MOV	R24,R22
    035D 5D80      SUBI	R24,0xD0
    035E 938001CF  STS	0x1CF,R24
(0295) 	    Put_AT_String((unsigned char*)TmpBuf,(AtcmgdLen+1));
    0360 E029      LDI	R18,0x9
    0361 EC07      LDI	R16,0xC7
    0362 E011      LDI	R17,1
    0363 DED1      RCALL	_Put_AT_String
(0296) 
(0297) 	}
    0364 D1E0      RCALL	pop_gset2
    0365 9508      RET
_CheckSMS_in:
    0366 9721      SBIW	R28,1
(0298) }
(0299) 
(0300) /*-----------------------------------------------------------------------*/
(0301) ///////////////////////////  检查SMS返回  //////////////////////////////
(0302) /*-----------------------------------------------------------------------*/
(0303) unsigned char CheckSMS_in(void)
(0304) {
(0305) 	while(!RxStatus);                            // 等待接收完成
    0367 9020006D  LDS	R2,RxStatus

⌨️ 快捷键说明

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