?? 家庭無線報警系統.asm
字號:
LCALL PDOK;判斷手機是否回答OK?
JZ ATE0OK;如果沒有檢測到OK,重復發,收到OK時A==FFH,否則A==0。
RET
;讀出授權電話號碼及密碼,寫入內存中
XRSJ:
MOV DPTR,#2000
LCALL DELAYXMS
LCALL CPBR;讀出授權電話AT+CPBR=1
MOV A,#31H
LCALL FS
LCALL HC
LCALL DCSJ
JNC XRSJ1
;手機號碼暫存放在50H-5BH的內存中
MOV R3,#11;定義接收手機號碼的數據長度
MOV R0,#50H;數據在內存的存放位置
LCALL GPSSJ;調用接收串口數據子程序
MOV R3,#16;跳過16個數據
LCALL TGSJ;調用跳過串口數據子程序
LCALL SJHCR;調用手機號從暫存50H-5BH中存入74H-7FH
;讀出密碼AT+CPBR=2
LCALL CPBR
MOV A,#32H
LCALL FS
LCALL HC
LCALL DCSJ
JNC XRSJ1
;密碼"車輛報警"存放在5CH-73H的內存中
MOV R3,#24;定義接收手機號碼的數據長度
MOV R0,#5CH;數據在內存的存放位置
LCALL GPSSJ;調用接收串口數據子程序
MOV R3,#16;跳過16個數據
LCALL TGSJ;調用跳過串口數據子程序
RET
;手機號從暫存50H-5BH中存入74H-7FH
SJHCR:
MOV 74H,51H;3
MOV 75H,50H;1
MOV 76H,53H;1
MOV 77H,52H;5
MOV 78H,55H;1
MOV 79H,54H;0
MOV 7AH,57H;3
MOV 7BH,56H;8
MOV 7CH,59H;6
MOV 7DH,58H;2
MOV 7EH,#46H;F
MOV 7FH,5AH;2
RET
DCSJ:
;+CPBR: 1,"13906079959",129,""
MOV R3,#12;跳過12個數據
LCALL TGSJ;調用跳過串口數據子程序
XRSJ1:
RET
;寫入授權電話號碼及密碼
BCDM:
; AT+CPBW=1,"13906079959"
DDH:;寫入授權電話號碼
LCALL CPBW
MOV A,#31H
LCALL FS
MOV A,#2CH
LCALL FS
MOV A,#22H;"
LCALL FS
LCALL CSJHM;調用存向SIM卡存入手機號碼
MOV A,#22H;"
LCALL FS
LCALL HC
LCALL PDOK
JZ DDH
;寫入密碼
;AT+CPBW=2,"8F 66 8F 86 62 A5 8B 66"
XMM:
LCALL CPBW
MOV A,#"2"
LCALL FS
MOV A,#",";
LCALL FS
MOV A,#22H;"
LCALL FS
;寫入"******"6個漢字 從內存5CH-73H一共24個內存
MOV R3,#24;定義發送的數據總長度為24個
MOV R0,#5CH;數據從內存的5CH開始
LCALL HZSZ;調用發送內存數據的子程序
MOV A,#22H
LCALL FS
LCALL HC
LCALL PDOK
JZ XMM
RET
;向SIM卡存入手機號碼時要每兩位調反一下
CSJHM:
MOV A,75H
LCALL FS
MOV A,74H
LCALL FS
MOV A,77H
LCALL FS
MOV A,76H
LCALL FS
MOV A,79H
LCALL FS
MOV A,78H
LCALL FS
MOV A,7BH
LCALL FS
MOV A,7AH
LCALL FS
MOV A,7DH
LCALL FS
MOV A,7CH
LCALL FS
MOV A,7FH
LCALL FS
RET
JCDYH:
CLR RI;清除有串口數據標志
LCALL PDRI;2秒內檢測串口是否有數據返回?
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#0DH,WD;判斷串口數據
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#0AH,WD;判斷串口數據
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#3EH,WD;判斷串口數據
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#20H,WD;判斷串口數據
CLR RI;軟件清除串口中斷標記
;判斷手機是不是回答>代碼? 0D 0A 3E 20
MOV A,#0FFH;檢測到>,對A置1
RET
WD:CLR A;沒有檢測到>,對A清零
CLR RI;清除有串口數據標志
RET
;檢測手機是否回答OK?
PDOK:
LCALL PDDA;檢測手機是否回答0D/0A
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#4FH,SB;判斷串口數據 O
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#4BH,SB;判斷串口數據 K
LCALL PDDA;檢測手機是否回答0D/0A
;判斷是不是手機回答的OK代碼? 0D 0A 4F 4B 0D 0A
MOV A,#0FFH;檢測到OK,對A置1
RET
;檢測手機是否回答0D/0A?
PDDA:
CLR RI;清除有串口數據標志
LCALL PDRI;2秒內檢測串口是否有數據返回?
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#0DH,SB;判斷串口數據
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#0AH,SB;判斷串口數據
CLR RI;軟件清除串口中斷標記
RET
SB:CLR A;沒有檢測到OK,對A清零
CLR RI;清除有串口數據標志
RET
;發送AT+CLCC,來電顯示
;00 43 00 4C 00 43 00 43
CLCC:
LCALL ATC
MOV A,#4CH
LCALL FS
MOV A,#43H
LCALL FS
MOV A,#43H
LCALL FS
LCALL HC;回車!
RET
;發送AT+CPAS查詢手機狀態子程序 AT+CPAS 報告移動設備的錯誤 +CMEERROR:﹤XXX﹥
;+CMSERROR:﹤XXX﹥ ERROR
CPAS:
LCALL ATC;發AT+C
MOV A,#50H;P
LCALL FS
MOV A,#41H;A
LCALL FS
MOV A,#53H;S
LCALL FS
LCALL HC;回車!
;手機狀態子程序
;跳過9個內存
MOV R3,#9;定義接收數據的總長度 0D 0A 2B 43 50 41 53 3A 20 33 0D 0A
LCALL TGSJ;調用接收串口數據子程序
MOV R0,#25H;數據在內存的存放位置
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
MOV @R0,A;收到33
INC R0;內存單元地址
;跳過8個內存
MOV R3,#8;定義接收數據的總長度
LCALL TGSJ;調用接收串口數據子程序
RET
;發送AT+CMGS=R7 R6 R5,發送短信
;00 43 00 4D 00 47 00 53 00 3D
CMGS:
LCALL ATC
MOV A,#"M";M
LCALL FS
MOV A,#"G";G
LCALL FS
MOV A,#"S";S
LCALL FS
MOV A,#"=";=
LCALL FS
MOV A,R7
LCALL FS
MOV A,R6
LCALL FS
MOV A,R5
JZ TGA
LCALL FS
TGA:
LCALL HC;回車!
LCALL JCDYH;調用等待手機回答“>”的子程序
JNC CSJ;檢測到>,轉入CSJ
MOV DPTR,#2000;延時2秒
LCALL DelayXmS
LJMP CMGS
CSJ:
MOV DPTR,#TAB11
MOV R0,#12
LCALL DXZT;調用發固定的短信字頭0011000D9168子程序
MOV R0,#74H;手機號碼存放首址
LCALL JSFSJ;調用發送短信接收方手機號碼子程序13906079959
LCALL DYZXSJ;調用下部固定數據0008A9
RET
;發送短信固定字頭0011000D9168子程序
DXZT:;0011000D9168
MOV R3,#0
FZT:
MOV A,R3
MOVC A,@A+DPTR
LCALL FS
INC R3
DJNZ R0,FZT
RET
;發送短信接收方手機號碼子程序
JSFSJ:
MOV A,@R0
LCALL FS
INC R0
CJNE R0,#80H,JSFSJ
RET
;發送短信中間固定數據000801子程序
DYZXSJ:
MOV A,#"0"
LCALL FS
MOV A,#"0"
LCALL FS
MOV A,#"0"
LCALL FS
MOV A,#"8"
LCALL FS
MOV A,#"0"
LCALL FS
MOV A,#"1"
LCALL FS
RET
;短信發送檢測,+CMGS: 138
FSCG:
CLR RI;清除有串口數據標志
LCALL PDDXRI;5秒內檢測串口是否有數據返回?
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#0DH,SBB;判斷串口數據
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#0AH,SBB;判斷串口數據
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#2BH,SBB;判斷串口數據+
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#43H,SBB;判斷串口數據C
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#4DH,SBB;判斷串口數據M
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#47H,SBB;判斷串口數據G
CLR RI;軟件清除串口中斷標記
LCALL PDRI;等待下一個串口數據
MOV A,SBUF;將串口寄存器中接收到的數據給A
CJNE A,#53H,SBB;判斷串口數據S
CLR RI;軟件清除串口中斷標記
;檢測到"CMGS"的ASCII碼--------
;跳過5個內存(: 116)
MOV R3,#5;定義接收數據的總長度
LCALL TGSJ;調用接收串口數據子程序
MOV A,#0FFH
LJMP FSCG1
SBB:LCALL SB;對ACC清零
FSCG1:
RET
/*;發送ATD,撥打電話13906079959
ATD:
LCALL FAT
MOV A,#44H
LCALL FS
MOV A,75H
LCALL FS
MOV A,74H
LCALL FS
MOV A,77H
LCALL FS
MOV A,76H
LCALL FS
MOV A,79H
LCALL FS
MOV A,78H
LCALL FS
MOV A,7BH
LCALL FS
MOV A,7AH
LCALL FS
MOV A,7DH
LCALL FS
MOV A,7CH
LCALL FS
MOV A,7FH
LCALL FS
MOV A,#3BH
LCALL FS
LCALL HC;回車!
RET*/
;發送"恭喜您!您已經獲得家庭報警系統的控制權限!"短消息的子程序
FDX:
MOV R7,#"7";短信長度60+15=75
MOV R6,#"5"
MOV R5,#00H
LCALL CMGS;發送AT+CMGS=75短信長度子程序
;發送漢字的字數(24+6個漢字)60---3CH
MOV A,#"3"
LCALL FS
MOV A,#"C"
LCALL FS
;準備發送"恭喜您!您已經獲得家庭報警系統的控制權限!密碼:"漢字
MOV DPTR,#TAB1
MOV R1,#96;發送24個漢字
LCALL FSS;調用發送漢字的子程序
;發送"家庭報警"4個漢字 從內存5CH-73H一共16個內存
MOV R3,#24;定義發送的數據總長度為16個
MOV R0,#5CH;數據從內存的64H開始
LCALL HZSZ;調用發送內存數據的子程序
MOV A,#1AH;發送16進制的1A結束字符
LCALL FS
LCALL FSCG;調用短信發送檢測子程序
RET
;發送"大門已被打開,請檢查!"短消息的子程序
FDMBJ:
MOV R7,#33H;短信長度22+15=37
MOV R6,#37H
MOV R5,#00H
LCALL CMGS;發送AT+CMGS=37短信長度子程序
;發送漢字的字數(11個漢字)22---16H
MOV A,#31H
LCALL FS
MOV A,#36H
LCALL FS
;準備發送"大門已被打開,請檢查!"
MOV DPTR,#TAB2
MOV R1,#44;發送11個漢字
LCALL FSS;調用發送漢字的子程序
MOV A,#1AH;發送16進制的1A結束字符
LCALL FS
LCALL FSCG;調用短信發送檢測子程序
JNZ FDMBJ1
MOV DPTR,#500
LCALL DELAYXMS
LJMP FDMBJ
FDMBJ1:
RET
;發送"家里有人走動,請注意!"短消息的子程序(紅外報警)
FHWBJ:
MOV R7,#33H;短信長度22+15=37
MOV R6,#37H
MOV R5,#00H
LCALL CMGS;發送AT+CMGS=37短信長度子程序
;發送漢字的字數(11個漢字)22---16H
MOV A,#31H
LCALL FS
MOV A,#36H
LCALL FS
;準備發送"家里有人走動,請注意!"
MOV DPTR,#TAB3
MOV R1,#44;發送11個漢字*4
LCALL FSS;調用發送漢字的子程序
MOV A,#1AH;發送16進制的1A結束字符
LCALL FS
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -