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