📄 detectaphone.lst
字号:
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 + -