📄 main.lis
字号:
030A FF27 clr R31
030C E80F add R30,R24
030E F91F adc R31,R25
0310 2082 std z+0,R2
0312 .dbline 191
0312 L60:
0312 .dbline 188
0312 4395 inc R20
0314 L62:
0314 .dbline 188
0314 4A15 cp R20,R10
0316 88F3 brlo L59
0318 .dbline 193
0318 ; {
0318 ; TxBuf[count] = *(str+count);
0318 ; }
0318 ;
0318 ; TxBuf[length] = 0x0D; // 发送缓冲窜结尾加“回车”
0318 80E0 ldi R24,<_TxBuf
031A 90E0 ldi R25,>_TxBuf
031C EA2D mov R30,R10
031E FF27 clr R31
0320 E80F add R30,R24
0322 F91F adc R31,R25
0324 8DE0 ldi R24,13
0326 8083 std z+0,R24
0328 .dbline 194
0328 ; TxBuf[length+ 1] = 0x00; // 发送缓冲窜结束符号
0328 80E0 ldi R24,<_TxBuf+1
032A 90E0 ldi R25,>_TxBuf+1
032C EA2D mov R30,R10
032E FF27 clr R31
0330 E80F add R30,R24
0332 F91F adc R31,R25
0334 2224 clr R2
0336 2082 std z+0,R2
0338 .dbline 196
0338 ;
0338 ; TxStatus = 0;
0338 20920E00 sts _TxStatus,R2
033C .dbline 197
033C ; TxIndex = 1; // 发送指针偏移1
033C 81E0 ldi R24,1
033E 80930000 sts _TxIndex,R24
0342 .dbline 198
0342 ; OkFlag = 0;
0342 20920F00 sts _OkFlag,R2
0346 .dbline 199
0346 ; TxEnable();
0346 56DF rcall _TxEnable
0348 L64:
0348 .dbline 201
0348 L65:
0348 .dbline 201
0348 ; // 激活发送
0348 ; while(!TxStatus); // 等代发送结束,发送缓冲指针为零则可以发送
0348 20900E00 lds R2,_TxStatus
034C 2220 tst R2
034E E1F3 breq L64
0350 .dbline 202
0350 ; DelayMs(20);
0350 04E1 ldi R16,20
0352 10E0 ldi R17,0
0354 00D0 rcall _DelayMs
0356 .dbline 203
0356 ; if(retflag)
0356 6623 tst R22
0358 41F0 breq L67
035A .dbline 204
035A ; {
035A L69:
035A .dbline 205
035A L70:
035A .dbline 205
035A ; while(!OkFlag); // 收到模块返回OK,命令结束
035A 20900F00 lds R2,_OkFlag
035E 2220 tst R2
0360 E1F3 breq L69
0362 .dbline 206
0362 ; OkFlag = 0;
0362 2224 clr R2
0364 20920F00 sts _OkFlag,R2
0368 .dbline 207
0368 ; }
0368 06C0 rjmp L68
036A L67:
036A .dbline 209
036A .dbline 210
036A 08EC ldi R16,200
036C 10E0 ldi R17,0
036E 00D0 rcall _DelayMs
0370 .dbline 211
0370 2224 clr R2
0372 20920F00 sts _OkFlag,R2
0376 .dbline 212
0376 L68:
0376 .dbline -2
0376 L58:
0376 00D0 rcall pop_gset4
0378 .dbline 0 ; func end
0378 0895 ret
037A .dbsym r count 20 c
037A .dbsym r retflag 22 c
037A .dbsym r length 10 c
037A .dbsym r str 12 pc
037A .dbend
037A .dbfunc e DialNum _DialNum fV
037A ; i -> R10
037A ; length -> R20
037A ; count -> R22
.even
037A _DialNum::
037A 00D0 rcall push_gset3
037C .dbline -1
037C .dbline 220
037C ; else
037C ; {
037C ; DelayMs(200);
037C ; OkFlag = 0;
037C ; }
037C ; }
037C ; ////////////////////////////////////////////////////////////////////////////////
037C ;
037C ; /*-----------------------------------------------------------------------*/
037C ; ////////////////////////// 拨号 ///////////////////////////
037C ; /*-----------------------------------------------------------------------*/
037C ; void DialNum(void)
037C ; {
037C .dbline 221
037C ; unsigned char i,count=0,length=0;
037C 6627 clr R22
037E .dbline 221
037E 4427 clr R20
0380 01C0 rjmp L74
0382 L73:
0382 .dbline 224
0382 .dbline 225
0382 4395 inc R20
0384 .dbline 226
0384 L74:
0384 .dbline 223
0384 ;
0384 ; while ((PhoneNum[count++] != 0)) // 计算电话号码长度
0384 262E mov R2,R22
0386 3324 clr R3
0388 6F5F subi R22,255 ; addi 1
038A 80E0 ldi R24,<_PhoneNum
038C 90E0 ldi R25,>_PhoneNum
038E E22D mov R30,R2
0390 FF27 clr R31
0392 E80F add R30,R24
0394 F91F adc R31,R25
0396 2080 ldd R2,z+0
0398 2220 tst R2
039A 99F7 brne L73
039C .dbline 228
039C ; {
039C ; length++;
039C ; }
039C ;
039C ; TxBuf[0] = 'A';
039C 81E4 ldi R24,65
039E 80930100 sts _TxBuf,R24
03A2 .dbline 229
03A2 ; TxBuf[1] = 'T';
03A2 84E5 ldi R24,84
03A4 80930200 sts _TxBuf+1,R24
03A8 .dbline 230
03A8 ; TxBuf[2] = 'D';
03A8 84E4 ldi R24,68
03AA 80930300 sts _TxBuf+2,R24
03AE .dbline 232
03AE ;
03AE ; i = 3;
03AE 83E0 ldi R24,3
03B0 A82E mov R10,R24
03B2 .dbline 233
03B2 ; for(count=0;count<length;count++)
03B2 6627 clr R22
03B4 14C0 rjmp L81
03B6 L78:
03B6 .dbline 234
03B6 .dbline 235
03B6 2A2C mov R2,R10
03B8 3324 clr R3
03BA 822D mov R24,R2
03BC 8F5F subi R24,255 ; addi 1
03BE A82E mov R10,R24
03C0 80E0 ldi R24,<_PhoneNum
03C2 90E0 ldi R25,>_PhoneNum
03C4 E62F mov R30,R22
03C6 FF27 clr R31
03C8 E80F add R30,R24
03CA F91F adc R31,R25
03CC 4080 ldd R4,z+0
03CE 80E0 ldi R24,<_TxBuf
03D0 90E0 ldi R25,>_TxBuf
03D2 E22D mov R30,R2
03D4 FF27 clr R31
03D6 E80F add R30,R24
03D8 F91F adc R31,R25
03DA 4082 std z+0,R4
03DC .dbline 236
03DC L79:
03DC .dbline 233
03DC 6395 inc R22
03DE L81:
03DE .dbline 233
03DE 6417 cp R22,R20
03E0 50F3 brlo L78
03E2 .dbline 238
03E2 ; {
03E2 ; TxBuf[i++] = PhoneNum[count];
03E2 ; }
03E2 ;
03E2 ; TxBuf[length+3] = ';';
03E2 80E0 ldi R24,<_TxBuf+3
03E4 90E0 ldi R25,>_TxBuf+3
03E6 E42F mov R30,R20
03E8 FF27 clr R31
03EA E80F add R30,R24
03EC F91F adc R31,R25
03EE 8BE3 ldi R24,59
03F0 8083 std z+0,R24
03F2 .dbline 239
03F2 ; TxBuf[length+4] = 0x0D;
03F2 80E0 ldi R24,<_TxBuf+4
03F4 90E0 ldi R25,>_TxBuf+4
03F6 E42F mov R30,R20
03F8 FF27 clr R31
03FA E80F add R30,R24
03FC F91F adc R31,R25
03FE 8DE0 ldi R24,13
0400 8083 std z+0,R24
0402 .dbline 241
0402 ;
0402 ; OkFlag = 0;
0402 2224 clr R2
0404 20920F00 sts _OkFlag,R2
0408 .dbline 242
0408 ; TxStatus = 0;
0408 20920E00 sts _TxStatus,R2
040C .dbline 243
040C ; TxIndex = 1; // 发送指针偏移1
040C 81E0 ldi R24,1
040E 80930000 sts _TxIndex,R24
0412 .dbline 244
0412 ; TxEnable(); // 激活发送
0412 F0DE rcall _TxEnable
0414 L84:
0414 .dbline 245
0414 L85:
0414 .dbline 245
0414 ; while(!TxStatus); // 等代发送结束,发送缓冲指针为零则可以发送
0414 20900E00 lds R2,_TxStatus
0418 2220 tst R2
041A E1F3 breq L84
041C .dbline 246
041C ; DelayMs(20);
041C 04E1 ldi R16,20
041E 10E0 ldi R17,0
0420 00D0 rcall _DelayMs
0422 .dbline 248
0422 ; //while(!OkFlag); // 收到模块返回OK,命令结束
0422 ; OkFlag = 0;
0422 2224 clr R2
0424 20920F00 sts _OkFlag,R2
0428 .dbline -2
0428 L72:
0428 00D0 rcall pop_gset3
042A .dbline 0 ; func end
042A 0895 ret
042C .dbsym r i 10 c
042C .dbsym r length 20 c
042C .dbsym r count 22 c
042C .dbend
042C .dbfunc e StringCompare _StringCompare fc
042C ; strlen -> R20
042C ; str2 -> R18,R19
042C ; str1 -> R16,R17
.even
042C _StringCompare::
042C 00D0 rcall push_gset1
042E 4A81 ldd R20,y+2
0430 .dbline -1
0430 .dbline 255
0430 ; }
0430 ;
0430 ; /*-----------------------------------------------------------------------*/
0430 ; ///////////////////////////// 比较两个串 /////////////////////////////////
0430 ; /*-----------------------------------------------------------------------*/
0430 ; unsigned char StringCompare(volatile unsigned char *str1,const unsigned char *str2,unsigned char strlen)
0430 ; {
0430 0CC0 rjmp L89
0432 L88:
0432 .dbline 257
0432 ; while(strlen--)
0432 ; {
0432 .dbline 258
0432 ; if(*str1++ != *str2++) return(FALSE); // 两个串不相等返回假
0432 1901 movw R2,R18
0434 2F5F subi R18,255 ; offset = 1
0436 3F4F sbci R19,255
0438 F101 movw R30,R2
043A E491 lpm R30,Z
043C D801 movw R26,R16
043E 2D90 ld R2,X+
0440 8D01 movw R16,R26
0442 2E16 cp R2,R30
0444 11F0 breq L91
0446 .dbline 258
0446 0027 clr R16
0448 06C0 rjmp L87
044A L91:
044A .dbline 259
044A L89:
044A .dbline 256
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -