📄 家庭无线报警系统.lst
字号:
011E D2A2 215 SETB LCD_EN
0120 3125 216 CALL DELAY0
0122 C2A2 217 CLR LCD_EN
0124 22 218 RET
0125 219 DELAY0:
0125 7FFA 220 MOV R7,#250 ;延时500 微秒
0127 DFFE 221 DJNZ R7,$
0129 22 222 RET
223 ;----------------------------------------------------
224 ;写入命令子程序
225 ;----------------------------------------------------
012A 226 WCOM: ;以8位控制方式将命令写至LCD
012A F580 227 MOV P0,A ;写入命令
012C 310F 228 CALL ENABLE
012E 22 229 RET
230 ;----------------------------------------------------
231 ;写入数据子程序
232 ;----------------------------------------------------
012F 233 WDATA: ;以8位控制方式将数据写至LCD
012F F580 234 MOV P0,A ;写入数据
0131 311A 235 CALL ENABLE1
0133 22 236 RET
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
A51 MACRO ASSEMBLER 糭____线__綺蟔__ 01/23/2008 12:02:46 PAGE 5
257
258
259
260
261
262
263
264
265
266 ;**********************************************
267 ;**********************************************
268 ;进入串口中断方式接收
0134 269 UARTI:
0134 C298 270 CLR RI;清楚串口中断标志
0136 120671 271 LCALL PDDA;调用串口接收0D/0A数据子程序
0139 1209DA 272 LCALL PDRI;等待下一个串口数据
013C E599 273 MOV A,SBUF;将串口寄存器中接收到的数据给A
013E B42B45 274 CJNE A,#2BH,PDRD;判断串口数据+
0141 C298 275 CLR RI;软件清除串口中断标记
0143 1209DA 276 LCALL PDRI;等待下一个串口数据
0146 E599 277 MOV A,SBUF;将串口寄存器中接收到的数据给A
0148 B44338 278 CJNE A,#43H,EXITT1;判断串口数据C
014B C298 279 CLR RI;软件清除串口中断标记
014D 1209DA 280 LCALL PDRI;等待下一个串口数据
281 ;+CMTI: "SM",7短信到达存放位置
0150 E599 282 MOV A,SBUF;将串口寄存器中接收到的数据给A
0152 B44D2E 283 CJNE A,#4DH,EXITT1;判断串口数据M
0155 C298 284 CLR RI;软件清除串口中断标记
0157 1209DA 285 LCALL PDRI;等待下一个串口数据
015A E599 286 MOV A,SBUF;将串口寄存器中接收到的数据给A
015C B45424 287 CJNE A,#54H,EXITT1;判断串口数据T
015F C298 288 CLR RI;软件清除串口中断标记
0161 1209DA 289 LCALL PDRI;等待下一个串口数据
0164 E599 290 MOV A,SBUF;将串口寄存器中接收到的数据给A
0166 B4491A 291 CJNE A,#49H,EXITT1;判断串口数据I
0169 C298 292 CLR RI;软件清除串口中断标记
293 ;检测到"+CMTI"的ASCII码--------
294 ;跳过7个内存(: "SM",)
016B 7B07 295 MOV R3,#7;定义接收数据的总长度
016D 120A08 296 LCALL TGSJ;调用接收串口数据子程序
297 ;短信位置,存放在26H中
0170 7826 298 MOV R0,#26H;数据在内存的存放位置
0172 C298 299 CLR RI;软件清除串口中断标记
0174 1209DA 300 LCALL PDRI;等待下一个串口数据
0177 E599 301 MOV A,SBUF;将串口寄存器中接收到的数据给A
0179 F6 302 MOV @R0,A
017A 08 303 INC R0;内存单元地址0
304 ;跳过8个内存
017B 7B08 305 MOV R3,#8;定义接收数据的总长度
017D 120A08 306 LCALL TGSJ;调用接收串口数据子程序
0180 12022F 307 LCALL DXNR;解析短信内容
0183 308 EXITT1:
0183 020189 309 LJMP EXITT
0186 310 PDRD:
0186 12018F 311 LCALL RING;电话呼入提示
0189 312 EXITT:
0189 C298 313 CLR RI;软件清除串口中断标记,退出串口中断
018B 0160 314 AJMP KKS
315
018D 316 RING3:
018D 412A 317 JMP RING1
318 ;**********************************************
018F 319 RING:;电话呼入提示
018F C298 320 CLR RI;清除串口中断标志
0191 E599 321 MOV A,SBUF;将串口寄存器中接收到的数据给A
0193 B452F7 322 CJNE A,#52H,RING3;判断串口数据R
A51 MACRO ASSEMBLER 糭____线__綺蟔__ 01/23/2008 12:02:46 PAGE 6
0196 C298 323 CLR RI;软件清除串口中断标记
0198 1209DA 324 LCALL PDRI;等待下一个串口数据
019B E599 325 MOV A,SBUF;将串口寄存器中接收到的数据给A
019D B449ED 326 CJNE A,#49H,RING3;判断串口数据I
01A0 C298 327 CLR RI;软件清除串口中断标记
01A2 1209DA 328 LCALL PDRI;等待下一个串口数据
01A5 E599 329 MOV A,SBUF;将串口寄存器中接收到的数据给A
01A7 B44EE3 330 CJNE A,#4EH,RING3;判断串口数据N
01AA C298 331 CLR RI;软件清除串口中断标记
01AC 1209DA 332 LCALL PDRI;等待下一个串口数据
01AF E599 333 MOV A,SBUF;将串口寄存器中接收到的数据给A
01B1 B44776 334 CJNE A,#47H,RING1;判断串口数据G
01B4 C298 335 CLR RI;软件清除串口中断标记
01B6 120671 336 LCALL PDDA;调用串口接收0D/0A数据子程序
01B9 900064 337 MOV DPTR,#100;延时0.1秒
01BC 120A56 338 LCALL DelayXmS
339 ;发送AT+CLCC
01BF 12068C 340 LCALL CLCC;调用来电显示指令子程序
341 ;跳过20个内存(: 1,1,4,0,0,")
01C2 7B14 342 MOV R3,#20;定义接收数据的总长度
01C4 120A08 343 LCALL TGSJ;调用跳过数据子程序
01C7 7B0D 344 MOV R3,#13;定义接收数据的总长度为12个
01C9 7844 345 MOV R0,#44H;数据从内存的44H开始依次往后存放
01CB 120A15 346 LCALL GPSSJ;调用接收串口数据子程序
01CE 7B0D 347 MOV R3,#13;跳过13个数据
01D0 120A08 348 LCALL TGSJ;调用跳过串口数据子程序
01D3 7401 349 MOV A,#1 ;显示在第一行
01D5 754054 350 MOV 40H,#"T"
01D8 754145 351 MOV 41H,#"E"
01DB 75424C 352 MOV 42H,#"L"
01DE 75433A 353 MOV 43H,#":"
01E1 7840 354 MOV R0,#40H
01E3 7900 355 MOV R1,#0
01E5 11F5 356 CALL LCD_SHOW;显示来电号码
357 ;检查是否继续呼入
358 ;等待第二次RING电话呼入提示
01E7 C298 359 CLR RI;软件清除串口中断标记
01E9 1209F1 360 LCALL PDDXRI;5秒内检测串口是否有数据返回?
01EC 503C 361 JNC RING1;如果5秒内没检查到铃音,就退出
362 ;震铃大约22S后进入通话状态
363 ;跳过8个内存
01EE 7B08 364 MOV R3,#8;定义接收数据的总长度
01F0 120A08 365 LCALL TGSJ;调用接收串口数据子程序
366 ;**********************************************
01F3 367 PDLYT:
368 ;发送AT+CPAS,模块状态报告
01F3 7A1E 369 MOV R2,#30
01F5 370 ZLYKK1:
01F5 9001F4 371 MOV DPTR,#500;延时0.5秒
01F8 120A56 372 LCALL DelayXmS
01FB 1206A2 373 LCALL CPAS;调用模块状态报告子程序
01FE E525 374 MOV A,25H
0200 B43001 375 CJNE A,#30H,ZL1;挂机后会收到2次30,没挂机收到的是33
0203 22 376 RET;对方挂机就退出
377 ; AJMP ZLYK;如果没有检测到呼入,就进入振铃遥控
0204 378 ZL1:
0204 DAEF 379 DJNZ R2,ZLYKK1
0206 7A0F 380 MOV R2,#15;大约15S后
0208 381 ZLYKK2:
0208 9001F4 382 MOV DPTR,#500;延时0.5秒
020B 120A56 383 LCALL DelayXmS
020E 1206A2 384 LCALL CPAS;调用模块状态报告子程序
0211 E525 385 MOV A,25H
0213 B43002 386 CJNE A,#30H,ZL2
0216 412E 387 AJMP RING2;如果没有检测到呼入,就退出
0218 388 ZL2:
A51 MACRO ASSEMBLER 糭____线__綺蟔__ 01/23/2008 12:02:46 PAGE 7
0218 DAEE 389 DJNZ R2,ZLYKK2;大约22S后应答
390 ;**********************************************
391 ;发送AT+CLCC
021A 12068C 392 LCALL CLCC;调用来电显示指令子程序
393 ;跳过20个内存(: 1,1,4,0,0,")
021D 7B14 394 MOV R3,#20;定义接收数据的总长度
021F 120A08 395 LCALL TGSJ;调用跳过数据子程序
396
0222 1208E5 397 LCALL DHHM;判断来电号码
0225 6007 398 JZ RING2;号码不对(A==0),就退出
399 ; JZ GJ;号码不对(A==0),则调用挂机子程序
400 ; ;跳过13个内存
401 ; MOV R3,#13;定义接收数据的总长度
402 ; LCALL TGSJ;调用接收串口数据子程序
403
0227 1203EC 404 LCALL ATA;应答
022A 405 RING1:
022A 412E 406 AJMP RING2
407
408
409
410
411
412
413
414
415
416
417
418
419
420
022C D297 421 ZLYK1:SETB LED;解防
022E 422 RING2:
022E 22 423 RET
424 ;**********************************************
425 ;**********************************************
022F 426 DXNR:;信息内容检测
022F 9003E8 427 MOV DPTR,#1000
0232 120A56 428 LCALL DELAYXMS
0235 1204A6 429 LCALL CMGR;调用读短信子程序
0238 7B2A 430 MOV R3,#42;跳过42个数据
023A 120A08 431 LCALL TGSJ;调用跳过串口数据子程序
432 ;检测电话号码
023D 7874 433 MOV R0,#74H;电话号码存放地址
023F 7A0C 434 MOV R2,#12;要对比的字节数
0241 71B5 435 ACALL PDDXNR;调用判断串口数据内容
0243 6026 436 JZ DPDSQ;如果电话号码是默认值,就检测信息内容
437 ;跳过20个内存(含0 4)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -