久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3167|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+手機(jī)報(bào)警器制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-3-4 00:57 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
(一)、系統(tǒng)簡介
下面是用西門子3508手機(jī)開發(fā)的報(bào)警系統(tǒng),采用AT89C2051單片機(jī),晶振11.0592MHZ,通訊速率19200,單片機(jī)與手機(jī)之間采用TTL串口通訊。該系統(tǒng)的優(yōu)點(diǎn)是不需要網(wǎng)線,沒有流量,當(dāng)電源切斷后還可以用手機(jī)電池繼續(xù)供電,小巧隱蔽不易被小偷發(fā)現(xiàn),缺點(diǎn)是需要手機(jī)sim卡,會產(chǎn)生一定費(fèi)用,比如月租費(fèi)。報(bào)警方式有2種,一是向預(yù)置的聯(lián)系人發(fā)短信,二是向預(yù)置的聯(lián)系人打電話,發(fā)短信會產(chǎn)生費(fèi)用,打電話可以不接,振鈴當(dāng)做報(bào)警音,不會產(chǎn)生費(fèi)用。本系統(tǒng)還可以遠(yuǎn)程控制家電,通過發(fā)短信的方式發(fā)送控制命令,根據(jù)短信的不同控制不同的裝置。本系統(tǒng)還可以作為溫度監(jiān)測、報(bào)警應(yīng)用。系統(tǒng)外觀如下圖,因電路簡單,電路板直接放到了電話機(jī)充電器外殼里。

(二)、工作原理
Siemens 3508手機(jī)底部預(yù)留了數(shù)據(jù)線接口一共12腳分別定義為:1)充電IN-(充電負(fù)級或DATA地)、2)AUDIO_L(耳機(jī)左聲道)、3)充電IN+(充電正級)、4)DC+(3.6V供電正極)、5)DATA_OUT(數(shù)據(jù)輸出)、6)DATA_IN(數(shù)據(jù)輸入)、7)MODE(線控MIC模式選擇)、8)CTRL(線控按鍵輸入端)、9)GND(話筒地)、10)MIC_IN(話筒正極)、11)AUDIO_R(耳機(jī)右聲道)、12)AUDIO_GD(音頻地)。其中5、6腳正是我們需要的串口數(shù)據(jù)通信發(fā)送和接收端,5腳接單片機(jī)的串口輸入端,6腳接單片機(jī)的串口輸出端,1腳地接電路板的地。如下圖所示:


電路原理圖如下圖,電路非常簡單,一片單片機(jī),一個(gè)無線接收模塊和一個(gè)無線發(fā)射模塊。單片機(jī)采用AT89C2051用于和手機(jī)通訊,單片機(jī)接收到無線接收模塊RX3400經(jīng)PT2272譯碼后的報(bào)警信息后,向預(yù)置的電話號碼發(fā)送短信程序或向預(yù)置的手機(jī)號碼打電話,還可以通過其它手機(jī)向該裝置發(fā)短信,接收到短信后,單片機(jī)程序解析短信命令,通過PT2262編碼、無線輸出短信命令來控制家用電器。pnp三極管Q2用于控制PT2272的電源,LED顯示工作狀態(tài)。實(shí)際應(yīng)用時(shí)要注意熱釋紅外報(bào)警器的編碼與接收模塊的編碼(A8接地,其它懸空)要相同,熱釋紅外報(bào)警器的震蕩電阻與接收模塊震蕩電阻要配套,你所控制的家用電器的無線接收模塊與本機(jī)的發(fā)射模塊編碼和震蕩電阻也要配合好。
另外,如果手頭上沒有西門子3508手機(jī),有其它型號的西門子手機(jī),只要有串口端子都可以應(yīng)用,但是要查清其它型號手機(jī)的串口端子編號以便和單片機(jī)串口連接,也可以買華為或中興的手機(jī)模塊,或者是西門子的手機(jī)模塊也可以。

(三)、預(yù)置手機(jī)電話號碼
本裝置需要預(yù)置2個(gè)接收報(bào)警信息的手機(jī)號碼,以便于有報(bào)警時(shí),向這2個(gè)手機(jī)號發(fā)短信或打電話,預(yù)置的方法是,直接操作西門子手機(jī)菜單,刪除所有通訊錄中的電話號,再重新錄入2個(gè)報(bào)警用的電話號,或者把通訊錄的第一、第二個(gè)電話號改成要接收報(bào)警的手機(jī)號。第二種方法是下載SiMoCoSetup228程序,安裝在XP系統(tǒng)上,連接手機(jī),在微機(jī)上刪除通訊錄或錄入新的電話號,SiMoCoSetup228程序不支持win7。SiMoCoSetup228程序是西門子手機(jī)連接微機(jī)用的。
(四)、AT命令
利用GSM手機(jī)的串行接口,單片機(jī)向手機(jī)收發(fā)一系列的AT命令,就能達(dá)到控制GSM模塊收發(fā)短消息的目的。必須注意的是,用單片機(jī)實(shí)現(xiàn)時(shí),編程必須注意它發(fā)送指令與接收到的響應(yīng)都是字符的ASCII碼。用單片機(jī)控制GSM模塊收發(fā)短信息所涉及到的AT指令見下表。
ASCI碼指令
功能
手機(jī)回答
AT回車
握手
OK
ATE
簡化顯示
OK
AT+CLCC

+CLCC:1,1,4,0,0,"05133082087",129
AT+CNMI=1,1,2
AT+CNMI=[[,[,[,[,]]]]]
設(shè)置收到短消息提示
OK+CMTI:“SM”,4
4表示手機(jī)內(nèi)短消息數(shù)量
ATD05133082087;
撥打05133082087電話
AT+CMGL=0
讀取電話上全部未讀過的SMS消息ok
AT+CMGL=2
列出已有的短信息+CMGL:1,2,,10
AT+CMGL=4
讀取全部SMS消息     +CMGL: 1,1,,24
AT+CMGR
讀取短信息
AT+CMGD=0
刪除全部短信息
AT+CMGR=X回車
讀取第X條短消息
AT+CMGF=0回車
用PDU格式

來電話!

RING  +CLIP: 13306285091,129
AT+CMGS=6
發(fā)送短消息的字節(jié)數(shù)
>
AT+CMGR=1
AT+CPMS="MT","SM"
讀取第1條短信1表示讀取第幾條短信
+CMGR:2,,10
0891683108403505F0110000813208F4024E86
經(jīng)常用到的一些AT指令舉例:
1、AT+IPR?(查詢模塊的波特率)
模塊會返回+IPR:9600之格式的信息,9600即波特率,注意9600與冒號之間是有空格的;
2、AT+IPR=9600;&W(設(shè)置模塊的固定波特率)
此命令寫一次之后就可以了,simcom支持掉電保護(hù),之后此模塊波特率就一直為9600了,成功返回OK,錯(cuò)誤返回ERROR,說明命令格式錯(cuò)誤;
3、AT+CLIP=1(顯示來電號碼)
顯示來電號碼,如果沒有這條指令,則來電話模塊只送出ring,不送出號碼;
4、ATH(掛斷電話)
這個(gè)就不用多說了,送出就掛斷電話,在Benq里還可以做完全斷開gprs網(wǎng)絡(luò)用;
5、ATA(接聽電話)
接聽電話,也不用多說了,來電話發(fā)這個(gè)給模塊就可以接聽了;
6、AT+CMGS=(發(fā)送短信的長度)
當(dāng)然你也可以不用發(fā)=號,則可以寫任意長度短信(模塊支持長度范圍內(nèi));
7、AT+CMGL=0(讀取新sms)
返回+CMGL:21(如果有短消息的話)之格式的信息,后面回車換行跟著就是短信內(nèi)容了;
8、AT+CMGD=(刪除第幾條短信)
后面是幾就刪除第幾條短信咯;;
9、AT+CSCA?(讀取sms服務(wù)中心號碼)
返回+CSCA:"+8613800532500",145之格式的信息,我是青島的,所以返回是這個(gè)號碼;
10、AT+CCLK?(讀取日期時(shí)間)
返回+CCLK:"03/01/01,16:07:46+00"之格式的信息;
11、AT+CSQ(讀取信號強(qiáng)度)
返回+CSQ:20,0之格式的信息,20為有用的值對我來說,信號強(qiáng)度;
12、AT+CBC(讀取電池電量)
返回 返回+CBC:0,100,,, 格式的信息,0模塊由電池供電,1 模塊裝有電池,但不由電池供電,2模塊沒有電池,3 模塊電源無效,禁止呼叫,1-100表示電量百分比。

                        (五)、軟件設(shè)計(jì)2011-12-13修改
;采用AT89C2051單片機(jī),晶振11.0592MHZ,通訊速率19200,采用TTL串口通訊
;20H,21H,22H存報(bào)警狀態(tài),26h保存接收的短信號,25h保存手機(jī)狀態(tài)23h24h定時(shí)器占用
;短信內(nèi)容緩存在48H-57Hde內(nèi)存中,也是顯示區(qū)
;短信中心的號碼存放在58H-63Hde內(nèi)存中
;密碼存放在64H-73Hde內(nèi)存中
;手機(jī)號碼存放在74H-7Fde內(nèi)存中                                                     
;P1.3 2262控制端
;P1.4 2262數(shù)據(jù)輸入端
;P1.5 2262數(shù)據(jù)輸入端
;P1.6 2262數(shù)據(jù)輸入端
;P1.7 2262數(shù)據(jù)輸入端
;P3.0串行接收端(RXD
;P3.1串行發(fā)射端(TXD
XL EQU P1.2;2272電源控制端
JSF EQU P1.3;2262發(fā)射控制端
BF EQU P3.3;布防
JS EQU P3.4;解鎖
;CD EQU P3.2;定義充電控制端
BJ EQU P3.5;定義報(bào)警觸發(fā)控制端
DD EQU P3.7;工作狀態(tài)LED顯示

;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
                         ORG 0000H
                        AJMP MAIN;轉(zhuǎn)入主程序
                        ORG 0003H ;外部中斷P3.2INT0入口地址
                        RETI
                        ORG 000BH;中斷陷阱
                         LJMP CT
                        RETI
                        ORG 0013H;中斷陷阱
                         RETI
                        ORG 0023H
                       ; AJMP UARTI
                        RETI
;以下為初始化程序
MAIN:
            MOVSCon,#50h; 方式1,REN=1.SM0SM1SM2REN,TB8RB8TI,RI
            MOV TMOD,#21H;波特率發(fā)生器T1工作在模式2
            MOV TH1,#0FDH;預(yù)置初值(按照波特率9600BPS預(yù)置初值)
            MOV TL1,#0FDH;預(yù)置初值(按照波特率9600BPS預(yù)置初值)
            ORL PCON,#80H ;SMOD=1倍頻
            SETB TR1;啟動定時(shí)器T1
            MOV   TH0,#10H  ;3.6864M最大定時(shí)213.3ms1000h定時(shí)200ms
             MOV   TL0, #00H
            MOV 42H,#31H;開機(jī)即布防20=1
            MOV P1,#80H
            MOV DPTR,#1000;延時(shí)5
            LCALL DelayXmS
            SETBJSF     ;關(guān)閉2262te
;           CLRDY      ;2272供電
             cpl dd;
ML:         LCALL ATEOK;開機(jī)發(fā)送ATE指令
             LCALL CNMI ;發(fā)送(AT+CNMI=1,1,0,0,1),短信到達(dá)TE
             LCALL SCQBDX;調(diào)用刪除SIM卡中所有短信de子程序
             LCALLCMGL;列出所有短信
             MOV DPTR,#1000;延時(shí)5
             LCALLDelayXmS
             LCALL CBC;SETBCD       ;停止充電
             LCALL XRSJ   ;讀出剛撥出的授權(quán)電話號碼1,寫入內(nèi)存中
             MOV DPTR,#1000;延時(shí)5
             LCALL DelayXmS
             LCALLCSCS       ;+CSCS: "GSM"
             MOV DPTR,#1000;延時(shí)5
               LCALL DelayXmS
               LCALL CPBS1  ;AT+CPBR=?
               MOV DPTR,#1000;延時(shí)5
               LCALL DelayXmS
               LCALL CPBR;AT+CPBR=1,23
               MOV A,#31H ;1
               LCALL FS
               MOV A,#2CH ;,
               LCALL FS
               MOV A,#32H ;AT+CPBR=1,23+CPBR: 1,"13136868158",129,"1"
               LCALL FS   ;+CPBR:2,"13836305876",129,"2"
               MOV A,#33H
               LCALL FS
               LCALL HC
               MOVDPTR,#8000;延時(shí)5AT+CMGR=1
               LCALL DelayXmS
               LCALL CPMS   ;AT+CPMS="MT","SM"
               MOV DPTR,#1000;延時(shí)5AT+CMGR=1
               LCALL DelayXmS
               LCALL CMGR1
               LCALL SPST
               CLR XL
               ORL0A8H, #82H;允許定時(shí)器0中斷
               MOV   24H,#00H
               SETB TR0
;***************下面是主程序*******************************
KKS:           JNBBJ,BJ8         ;檢查熱釋紅外報(bào)警器動作
                JBRI,UARTI      ;檢測短信,有短信轉(zhuǎn)UARTI
                JB BF,KKS2      ;檢查布防,如果布防轉(zhuǎn)kks2
                JNBJS,KKS       ;解鎖
                MOV 42H,#31H ;解鎖信息存42h單元
                AJMP KKS1
KKS2:           MOV 42H,#33H;42存布防信息
KKS1:           LCALL SPST
                 AJMP KKS

BJ8:             MOVA,42H      
                 CJNEA,#33H,  KKS ;沒有布防返回
                 CLRTR0                 ;已經(jīng)布防,向預(yù)存電話號打電話報(bào)警
                 SETB XL
                 LCALL XRSJ   ;讀出授權(quán)電話號碼1,寫入內(nèi)存中
                 LCALLATD    ;打電話
                 MOV DPTR,#5000;延時(shí)5
                 LCALL DelayXmS
               MOV DPTR,#5000
               LCALL DELAYXMS
               MOV DPTR,#5000
               LCALL DELAYXMS
               LCALLCHUP             ;掛斷電話
FDX2:          MOV DPTR,#5000
               LCALL DELAYXMS
               LCALL CPBR;讀出授權(quán)電話AT+CPBR=1
               MOVA,#32H       ;2
               LCALL XRSJ0;讀出授權(quán)電話號碼2,寫入內(nèi)存中

               MOV DPTR,#9000;5000;延時(shí)5
               LCALL DelayXmS
               LCALLATD    ;打電話
               MOV DPTR,#9000;延時(shí)5
               LCALLDelayXmS
               LCALL CHUP
               CLR XL;;停止2272供電
               MOV 42H,#31H
BAOJIN3:       AJMP ML;KKS
;**********************************************
UARTI:                 CLR TR0
                       CLR RI;清楚串口中斷標(biāo)志
                       LCALL PDDA;調(diào)用串口接收0D/0A數(shù)據(jù)子程序
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
CJNE A,#2BH,EXITT;判斷串口數(shù)據(jù)+PDR  ;"+"    ;+CMTI:"SM",7短信到達(dá)存放位置
                       CLRRI;軟件清除串口中斷標(biāo)記
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
                       CJNE A,#43H,EXITT;判斷串口數(shù)據(jù);"C"
                       CLR RI;軟件清除串口中斷標(biāo)記
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A 西門子2118接到短信后返回+CMTI: "SM",2
                       CJNE A,#4DH,EXITT;判斷串口數(shù)據(jù)M         S57返回+CMGR:0,,29    +CMTI: "ME",19
                       CLR RI;軟件清除串口中斷標(biāo)記
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
                       CJNE A,#54H,EXITT;判斷串口數(shù)據(jù)T   47=G     T=54
                       CLR RI;軟件清除串口中斷標(biāo)記
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
                       CJNEA,#49H,EXITT;判斷串口數(shù)據(jù)I   52=R      I=49
                       CLR RI;軟件清除串口中斷標(biāo)記
;檢測到"CMTI"deASCII--------
;跳過7個(gè)內(nèi)存(: "SM",
                       MOV R3,#7;定義接收數(shù)據(jù)de總長度        5
                       LCALL TGSJ;調(diào)用接收串口數(shù)據(jù)子程序
;短信序號存放在26H中,刪除后只有126H=1
                       MOV R0,#26H;數(shù)據(jù)在內(nèi)存de存放位置
                       CLR RI;軟件清除串口中斷標(biāo)記
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
                       MOV@R0,A
                       LCALL DXNR;解析短信內(nèi)容
                       JNB F0,EXITT
EXITT1:              CLR RI
                     AJMP ML
PDRD:            ; LCALL RING;電話呼入提示
EXITT:            CLR RI;軟件清除串口中斷標(biāo)記,退出串口中斷
                  SETB TR0
                  AJMP KKS




調(diào)用的子程序:
ATEOK:
               MOV DPTR,#500
               LCALL DELAYXMS
;發(fā)送ATE指令!
               LCALL AT1  ;"AT"
               MOV A,#45H;ASCIIE發(fā)送到串口去
               LCALL FS
               LCALL HC;回車!
               LCALL PDOK;判斷手機(jī)shi否回答OK?
               JZ ATEOK;如果沒有檢測到OK,重復(fù)發(fā)
               RET
PDOK:          LCALL PDDA
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#4FH,SB;判斷串口數(shù)據(jù) "O"=4F
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#4BH,SB;判斷串口數(shù)據(jù)"K"=4BH
               LCALL PDDA
;判斷是不是手機(jī)回答的OK代碼?0D 0A 4F 4B 0D 0A
               MOV A,#0FFH;檢測到OK,A1
               RET

;檢測手機(jī)shi否回答0D/0A?
PDDA:          CLR RI;清除有串口數(shù)據(jù)標(biāo)志
               LCALL PDRI;2秒內(nèi)檢測串口shi否有數(shù)據(jù)返回?
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#0DH,SB;判斷串口數(shù)據(jù)
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#0AH,SB;判斷串口數(shù)據(jù)
               CLR RI;軟件清除串口中斷標(biāo)記
               RET
SB:            CLR A;沒有檢測到OK,A清零
               CLR RI;清除有串口數(shù)據(jù)標(biāo)志
               RET

PDRI:          SETB REN;占用R4/R5/R1
              MOV R1,#60;300毫秒超時(shí)退出!
PBZ:          MOV R4,#200
DY2:          MOV R5,#25
DY1:          JB RI,KKQ;檢測到RI1就退出
              DJNZ R5,DY1;25微秒檢測一次
              JB RI,KKQ;檢測到RI1就退出
              SETB C;程序正常時(shí)C=1
              DJNZ R4,DY2;內(nèi)循環(huán)50毫秒
              DJNZ R1,PBZ;超時(shí)退出
              CLR C;對串口接收超時(shí)退出C=0
              CLR RI;清除有串口數(shù)據(jù)標(biāo)志
KKQ:          RET
;讀出授權(quán)電話號碼及密碼,寫入內(nèi)存中
XRSJ:
               MOV DPTR,#2000
               LCALL DELAYXMS
               LCALL CPBR;讀出授權(quán)電話ATCPBR=1
               MOVA,#31H       ;1
XRSJ0:         LCALL FS
               LCALL HC
XRS:               CLR RI;軟件清除串口中斷標(biāo)記  ;;;;;;
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)    ;;;;;;;;
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A;;;;;;;;;;;
               CJNEA,#22H,XRS      ;;;;;;;;;;
;手機(jī)號碼存放在74H-7Fde內(nèi)存中
               MOV R3,#12;定義接收手機(jī)號碼de數(shù)據(jù)長度
               MOV R0,#74H;數(shù)據(jù)在內(nèi)存de存放位置
               LCALL GPSSJ;調(diào)用接收串口數(shù)據(jù)子程序
               MOV R3,#16;跳過16個(gè)數(shù)據(jù)
               LCALL TGSJ;調(diào)用跳過串口數(shù)據(jù)子程序
               CLRRI;軟件清除串口中斷標(biāo)記;;;;;;;;;;
               RET
;發(fā)送ATCPBR=1
CPBR:
               LCALL ATC
               MOVA,#50H     ;P
               LCALL FS
               MOVA,#42H     ;B
               LCALL FS
               MOV A,#52H     ;R
               LCALL FS
               MOVA,#3DH     ;=
               LCALL FS
               RET

;發(fā)送ATCPMS="MT","SM"  AT CPMS="MT","SM"
CPMS:
               LCALL ATC
                MOV R2,#13
               MOV DPTR,#TABCPMS
XX1:           CLRA
               MOVC A,@A DPTR
               LCALL FS;
               INC DPTR
               DJNZ R2,XX1
               LCALL HC;回車!
               RET

;接收短信授權(quán)后的手機(jī)號碼子程序
GPSSJ:
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV @R0,A
               INC R0;內(nèi)存單元地址
               DJNZ R3,GPSSJ;判斷shi否已經(jīng)收全部數(shù)據(jù)?
               RET

FS:            CLR    ES
               MOV SBUF,A
               JNB    TI,    $
               CLR    TI
               SETB   ES
               RET
;跳過接收數(shù)據(jù)的子程序(專門針對PDU碼數(shù)據(jù))
TGSJ:
               SETB C
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               JNCXPAS;如果檢測到發(fā)生超時(shí)退出,就跳出這段程序
               DJNZ R3,TGSJ;判斷是否已經(jīng)收全部數(shù)據(jù)?
XPAS:          RET
;發(fā)送HC回車指令!
HC:
               MOV A,#0DH
               LCALL FS
               MOV A,#0AH
               LCALL FS
               RET
;發(fā)送AT指令!
AT1:
                 MOV A,#41H;ASCIIA發(fā)送到串口去
                 LCALL FS
                 MOV A,#54H;ASCIIT發(fā)送到串口去
                 LCALL FS
                 RET
;發(fā)送ATC,應(yīng)答
ATC:
               LCALL AT1
               MOVA,#2BH     ;
               LCALLFS
               MOVA,#43H    ;C
               LCALL FS
               RET
;入口參數(shù):DPTR=MS(毫秒1-65535mS
DELAYXMS:

               MOV A,DPH
               MOV R7,#01
               JZ DF1
               MOV R7,DPH
DF1:           MOV A,DPl
               MOV R6,#1
               JZ DEL1
               MOV R6,DPl
DEL1:          MOV B,#0
               DJNZ B,$
               DJNZ B,$
               DJNZ R6,DEL1
               DJNZ R7,DF1
               RET
JCDYH:
               CLR RI;清除有串口數(shù)據(jù)標(biāo)志
               LCALL PDRI;2秒內(nèi)檢測串口shi否有數(shù)據(jù)返回?
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#0DH,WD;判斷串口數(shù)據(jù)
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#0AH,WD;判斷串口數(shù)據(jù)
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#3EH,WD;判斷串口數(shù)據(jù)
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#20H,WD;判斷串口數(shù)據(jù)
               CLR RI;軟件清除串口中斷標(biāo)記
               ;判斷手機(jī)shishi回答>代碼?0D 0A 3E 20
               MOV A,#0FFH;檢測到>,A1
               RET
WD:            CLR A;沒有檢測到>,A清零
               CLR RI;清除有串口數(shù)據(jù)標(biāo)志
               RET
CSJ:
               RET
;手機(jī)號碼存放在74H-7Fde內(nèi)存中
JSFSJ:          ;3131868651F8
               MOVA,75H    ;3
               LCALL FS
               MOVA,74H    ;1
               LCALL FS
               MOVA,77H    ;3
               LCALL FS
               MOVA,76H    ;1
               LCALL FS
               MOVA,79H    ;8
               LCALL FS
               MOVA,78H    ;6
               LCALL FS
               MOV A,7BH    ;8
               LCALL FS
               MOVA,7AH    ;6
               LCALL FS
               MOVA,7DH    ;5
               LCALL FS
               MOVA,7CH    ;1
               LCALL FS
               MOVA,#46H    ;F
               LCALL FS
               MOVA,7EH;#38H   ;8
               LCALL FS
               RET

;發(fā)送短信中間固定數(shù)據(jù)00080子程序
DYZXSJ:
               MOV A,#30H
               LCALL FS
               MOV A,#30H
               LCALL FS
               MOV A,#30H
               LCALLFS
               MOV A,#38H
               LCALL FS
               MOV A,#30H
               LCALL FS
               RET

;**********************************************
DXNR:;來信電話號碼和信息內(nèi)容存儲在64H-6FH,48H-
               MOV DPTR,#333
               LCALL DELAYXMS
               LCALL CMGR;調(diào)用讀短信子程序
               LCALL JCXMGR
               MOV R3,#28D;跳過42個(gè)數(shù)據(jù);跳過4 1226個(gè)內(nèi)存 CMGR:0,,29
               LCALL TGSJ;調(diào)用跳過串口數(shù)據(jù)子程序26時(shí)是36=628的時(shí)候是33=3
               LCALLDXJC      ;保存發(fā)短信的電話號碼
DXJS:          MOV R3,#20d;定義接收數(shù)據(jù)de總長度   20=35
               LCALL TGSJ;調(diào)用接收串口數(shù)據(jù)子程序 18=38
;查詢信息 54084E0A75356E90合上電源35H,34H,30H,38H,34H,45H,30H,41H,37H,35H,33H,35H,36H,45H,39H,30H
               MOV R3,#16D   ;保存短信內(nèi)容
               MOV R0,#48H
PDCX:         CLR RI
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV @R0,A
               INC R0
               DJNZ R3, PDCX
               CLR RI;軟件清除串口中斷標(biāo)記
               MOV R3,#6;跳過8個(gè)數(shù)據(jù)
               LCALLTGSJ;調(diào)用跳過串口數(shù)據(jù)子程序
               SETBF0         ;;;;;;;;
               LCALLDHJC1      ;比較來信電話號碼與電話中授權(quán)的第一個(gè)電話號是否一致
               JNBF0,DX        ;電話號碼對了,檢查短信內(nèi)容是否對
               MOV DPTR,#3000 ;第一個(gè)電話號碼不對,檢查第二個(gè)對不對,先讀出第二個(gè)授權(quán)電話
               LCALLDELAYXMS ;延時(shí)等待串口數(shù)據(jù)走完
               LCALL CPBR;讀出授權(quán)電話ATCPBR=1
               MOVA,#32H       ;2
               LCALL XRSJ0;讀出授權(quán)電話號碼2,寫入內(nèi)存中
               SETBF0         ;;;;;;;;
               LCALLDHJC1     ;檢測電話號碼
               JNBF0,DX
               MOV DPTR,#3000  ;2個(gè)電話號碼不對,檢查第3個(gè)對不對,先讀出第3個(gè)授權(quán)電話
               LCALL DELAYXMS
               LCALL CPBR;讀出授權(quán)電話ATCPBR=1
               MOVA,#33H       ;2
               LCALL XRSJ0;讀出授權(quán)電話號碼2,寫入內(nèi)存中
               SETB F0
               LCALL DHJC1;檢測電話號碼
               JNB F0,DX
               AJMP XSSJ2
DX:              MOV DPTR,#1000
                 LCALL DELAYXMS
                 MOV DPTR,#TAB1
                 SETB F0
                 ACALL DXBJ
                 JBF0,DXNR1
                MOV 42H,#31H;合上電源操作時(shí)觸發(fā)了BJ端(紅外報(bào)警)所以置判斷標(biāo)志42H=55用于解除報(bào)警,如果再啟動報(bào)警必須發(fā)“開始布防”短信
XSSJ1:          MOV A,#10H
XSSJ:           CLR TR1
                MOV P1,A   ;P3.3=0  開始發(fā)射
                CPL DD
               MOV DPTR,#9000
               LCALL DELAYXMS
                SETBJSF    ;停止發(fā)射
                CPL DD
               SETB TR1
XSSJ2:           RET
DHJC1:         MOV R0,#64H ;dhjc發(fā)來短信的電話號碼存放在64h-6fh
               MOV R1,#74H ;XSSJ讀取的存入手機(jī)卡的電話號號碼,存放在74h-7fh
               MOV R2,#10;應(yīng)該12位電話號,只檢測10位就夠了
DHJC2:         MOV A,@R0
               XRL A,@R1
               JNZ DHJC3
               INC R0
               INC R1
               DJNZ R2,DHJC2
               CLR F0
              ; MOV 80H,#6DH
DHJC3:         RET
;**********************************************
DXNR1:;信息內(nèi)容2檢測”關(guān)閉電源“
                 MOV DPTR,#TAB2
                 SETB F0
                 ACALL DXBJ
                 JB F0,DXNR7;2
                 MOV A,#00H
                 AJMP XSSJ
;DXNR2:;信息內(nèi)容3檢測“打開電燈"
;                 MOV DPTR,#TAB3
;                 ACALL DXBJ
;                 JB F0,DXNR3
;                 MOV A,#40H
;                 AJMP XSSJ
;DXNR3:;信息內(nèi)容4檢測”關(guān)閉電燈“
;                 MOV DPTR,#TAB4
;                 ACALL DXBJ
;                 JB F0,DXNR4
;                 MOV A,#80H
;                 AJMP XSSJ
;DXNR4:;信息內(nèi)容5檢測”開始運(yùn)行“
;                 MOV DPTR,#TAB5
;                 ACALL DXBJ
;                 JB F0,DXNR5
;                 SETBCD       ;開始充電
;                 MOV A,#10H
;                 AJMP XSSJ
;DXNR5:;信息內(nèi)容6檢測”停止運(yùn)行“
;                 MOV DPTR,#TAB6
;                 ACALL DXBJ
;                 JB F0,DXNR7
;                 CLRCD       ;停止充電
;                 MOV A,#20H
;                 AJMPXSSJ

;DXNR6:;信息內(nèi)容7檢測”數(shù)據(jù)采集
;                 MOV DPTR,#TAB7
;                ACALL DXBJ
;                JB F0,DXNR7
;                MOV DPTR,#1666;延時(shí)5
;                LCALL DelayXmS
;                LCALL CMGS1  ;發(fā)送ATCMGS=021
;                LCALL FSCG;調(diào)用短信發(fā)送檢測子程序,發(fā)送編碼數(shù)據(jù)
               ;  JNZ DXNR6
;                MOV P1,#80H
;                LJMP XSSJ

DXNR7:;信息內(nèi)容8檢測;64A495005E039632撤銷布防
                 MOV DPTR,#TAB9
                 ACALL DXBJ
                 JBF0,DXNR8
                 SETB DD
;                 SETBDY      ;停止2272供電
                 MOV 42H,#31H
                 ;MOV A,#00H
                 LJMP XSSJ2
DXNR8:;信息內(nèi)容9檢測;5F0059CB5E039632開始布防
                 MOV DPTR,#TAB10
                 ACALLDXBJ
                 JB F0,XSSJ2
                 CLR DD
                 MOV 42H,#33H
                 LJMP XSSJ2
DXBJ:          ;  MOV DPTR,#1000
                ; LCALL DELAYXMS
                 MOV R3,#16D
                 MOV R0,#48H
                 CLR A
BK1:             MOVC A,@A DPTR
                 XRL A,@R0
                 JNZ BK2
                 INC DPTR
                 INC R0
                 CLR A
                 DJNZ R3,BK1
                 CLR F0
BK2:             RET
ATE0:
                 LCALL AT1
                 MOV A,#45H
                 LCALL FS
                 MOV A,#30H
                 LCALL FS
                 LCALL HC;回車!
                 RET
;發(fā)送AT CPBW=
CPBW:
               LCALL ATC
               MOV A,#50H
               LCALL FS
               MOV A,#42H
               LCALL FS
               MOV A,#57H
               LCALL FS
               MOV A,#3DH
               LCALL FS
               RET

;發(fā)送AT CNMI=1,1,0,0,1,短信到達(dá)TE
CNMI:
               LCALL ATC
               MOV A,#4EH;4E
               LCALL FS
               MOV A,#4DH;4D
               LCALL FS
               MOV A,#49H;49
               LCALL FS
               MOV A,#3DH;3D
               LCALL FS
               MOVA,#31H;31
               LCALL FS
               MOV A,#2CH;2C
               LCALL FS
               MOV A,#31H;31
               LCALL FS
               MOV A,#2CH;2C
               LCALL FS
               MOV A,#30H;30
               LCALLFS
               MOV A,#2CH;2C
               LCALL FS
               MOV A,#30H;30
               LCALL FS
               MOV A,#2CH;2C
               LCALL FS
               MOV A,#31H;31
               LCALL FS
               LCALL HC;回車!
               LCALL PDOK;判斷手機(jī)shi否回答OK?
               JZ CNMI;如果沒有檢測到OK,重復(fù)發(fā)
               RET

;發(fā)送AT CMGR=26H,讀短信
;00 43 00 4D 00 47 00 52 00 3D
CMGR:
               LCALL ATC
               MOV A,#4DH   ;M
               LCALL FS
               MOVA,#47H   ;G
               LCALL FS
               MOV A,#52H   ;R
               LCALL FS
               MOV A,#3DH   ;=
               LCALL FS
               MOV A,26H    ;126H
               LCALL FS
               LCALL HC;回車!
               RET

;發(fā)送AT CMGL=4列出所有短消息指令!
CMGL:
               LCALL ATC
               MOV A,#4DH
               LCALL FS
               MOV A,#47H
               LCALL FS
               MOV A,#4CH
               LCALL FS
               MOV A,#3DH
               LCALL FS
               MOV A,#34H
               LCALL FS
               LCALL HC;回車!
            ;   LCALLPDOK;判斷手機(jī)shi否回答OK?   ;;;;;;;;;;;
             ;  JZ CMGL;如果沒有檢測到OK,重復(fù)發(fā)   ;;;;;;;;;;;;;;
               RET

;短信發(fā)送檢測, CMGS: 138

FSCG:          CLR RI;清除有串口數(shù)據(jù)標(biāo)志
               LCALL PDDXRI;5秒內(nèi)檢測串口shi否有數(shù)據(jù)返回?
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#0DH,SBB;判斷串口數(shù)據(jù)
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOVA,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#0AH,SBB;判斷串口數(shù)據(jù)
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#2BH,SBB;判斷串口數(shù)據(jù)
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#43H,SBB;判斷串口數(shù)據(jù)C
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#4DH,SBB;判斷串口數(shù)據(jù)M
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#47H,SBB;判斷串口數(shù)據(jù)G
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOVA,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#53H,SBB;判斷串口數(shù)據(jù)S
               CLR RI;軟件清除串口中斷標(biāo)記
;檢測到"CMGS"ASCII--------
;跳過5個(gè)內(nèi)存(:116
              MOV R3,#5;定義接收數(shù)據(jù)的總長度
              LCALL TGSJ;調(diào)用接收串口數(shù)據(jù)子程序
              AJMP FSCG1
SBB:         LCALL SB
FSCG1:        RET
;判斷短信是否發(fā)送成功?超時(shí)退出
PDDXRI:;占用R4/R5/R1
                MOV R1,#5000;5秒超時(shí)退出!
                PBZ1:MOV R4,#200
                DY22:MOV R5,#25
                DY33:JB RI,KKQ1;檢測到RI1就退出
                DJNZ R5,DY33;延時(shí)25微秒檢測一次
                JB RI,KKQ1;檢測到RI1就退出
                SETB C;程序正常時(shí)C=1
                DJNZ R4,DY22;內(nèi)循環(huán)50毫秒
                DJNZ R1,PBZ1;超時(shí)退出
                CLR C;對串口接收超時(shí)退出C=0
                CLR RI;清除有串口數(shù)據(jù)標(biāo)志
KKQ1:RET
;手機(jī)號碼存放在74H-7Fde內(nèi)存中
DXJC:
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL  PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
                MOV65H,A                         ;33h
                CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOVA,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 64H,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 67H,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 66H,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 69H,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 68H,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 6BH,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 6AH,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 6DH,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 6CH,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV 6FH,A
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
DXJC1:         CLR A;沒有檢測到OK,A清零
               CLR RI;清除有串口數(shù)據(jù)標(biāo)志
DXJC2:         RET

JCXMGR:               CLR RI;清楚串口中斷標(biāo)志
                       LCALLPDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
                       CJNE A,#2BH,JCXMGR;PDRD;判斷串口數(shù)據(jù)PDR   ;""    ; CMTI:"SM",7短信到達(dá)存放位置
                       CLR RI;軟件清除串口中斷標(biāo)記
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
                       CJNE A,#43H,JCXMER1;判斷串口數(shù)據(jù);"C"
                       CLR RI;軟件清除串口中斷標(biāo)記
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A 西門子2118接到短信后返回CMTI: "SM",2
                       CJNE A,#4DH,JCXMER1;判斷串口數(shù)據(jù)M         S57返回 CMGR:0,,29    CMTI: "ME",19
                       CLR RI;軟件清除串口中斷標(biāo)記
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
                       CJNE A,#47H,JCXMER1;判斷串口數(shù)據(jù)T   47=G     T=54
                       CLR RI;軟件清除串口中斷標(biāo)記
                       LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
                       MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
                       CJNE A,#52H,JCXMER1;判斷串口數(shù)據(jù)I   52=R      I=49
                       CLR RI;軟件清除串口中斷標(biāo)記
;檢測到"CMTI"deASCII--------
;跳過7個(gè)內(nèi)存(:"SM",
                       MOV R3,#7;定義接收數(shù)據(jù)de總長度        5
                       LCALL TGSJ;調(diào)用接收串口數(shù)據(jù)子程序
JCXMER1:               CLR RI;軟件清除串口中斷標(biāo)記,退出串口中斷
JCXMER2:               RET
;刪除SIM卡中所有短信的子程序
SCQBDX:
               LCALL CMGL
               LCALL PDOK
               JNZ DXSCT
               JNB RI,$
               MOV DPTR,#100
               LCALL DELAYXMS
               MOV R2,#1;;;;;;;;1
DXSC:          LCALL DXSZ;調(diào)用將R2轉(zhuǎn)化成兩位ASCII數(shù)值子程序
;十位為20H,個(gè)位為21H
               LCALL SCDD;調(diào)用刪除短信程序,同一條短信刪除1
               INC R2
               CJNE R2,#26,DXSC;刪除超過25條也退出循環(huán)
DXSCT:         RET
SCDD:          LCALL SCDX;調(diào)用刪除第X條短信指令子程序
               MOV A,20H
               LCALL FS
               MOV A,21H
               LCALL FS
               LCALL HC
               MOV DPTR,#1200  ;1200/3
               LCALL DELAYXMS
               RET

;取出刪除短信條數(shù)的十位/個(gè)位
DXSZ:
               MOVA,R2
               MOV B,#10 ;取出十位和個(gè)位
               DIV AB
               ORL A,#00110000B;調(diào)整為ASCII
               MOV 20H,A ;十位在a
               MOV 21H,B ;個(gè)位在b
               MOV A,21H
               ORL A,#00110000B;調(diào)整為ASCII
               MOV21H,A
               RET

;發(fā)送AT CMGD=刪除第X條短消息指令!
SCDX:
               LCALL ATC
               MOV A,#4DH
               LCALL FS
               MOV A,#47H
               LCALL FS
               MOV A,#44H
               LCALL FS
               MOVA,#3DH
               LCALL FS
               RET

;發(fā)送AT CSCS?
CSCS:
               LCALL ATC
               MOVA,#53H     ;S
               LCALL FS
               MOVA,#43H     ;C
               LCALL FS
               MOVA,#53H     ;S
               LCALL FS
               MOVA,#3FH     ;?
               LCALL FS
               LCALL HC;回車!
               RET
CPBS1:
               LCALL ATC
               MOVA,#50H     ;P
               LCALL FS
               MOVA,#42H     ;B
               LCALL FS
               MOVA,#53H     ;S
               LCALL FS
               MOVA,#3DH     ;=
               LCALL FS
               MOVA,#3FH     ; ?
               LCALL FS
               LCALL HC;回車!
               RET
SPST:         LCALL AT1
               MOV A,#5EH   ;^
               LCALL FS
               MOVA,#53H     ;S
               LCALL FS
               MOVA,#50H     ;P
               LCALL FS
               MOVA,#53H     ;S
               LCALLFS
               MOV A,#54H   ;T
               LCALL FS
               MOV A,#3DH   ;=
               LCALL FS
               MOV A,42H    ;=31OR33
               LCALL FS
               MOV A,#2CH   ;
               LCALL FS
               MOV A,#31H   ;1
               LCALL FS
               LCALL HC;回車!
               LCALL PDOK;判斷手機(jī)shi否回答OK?
               JZ SPST;如果沒有檢測到OK,重復(fù)發(fā)
               RET
CMGR1:
               LCALL ATC
               MOV A,#4DH   ;M
               LCALL FS
               MOV A,#47H   ;G
               LCALL FS
               MOV A,#52H   ;R
               LCALL FS
               MOV A,#3DH   ;=
               LCALL FS
               MOV A,#31H    ;126H
               LCALL FS
               LCALL HC;回車!
               RET
ATD:
               LCALL AT1
               MOV A,#44H   ;D
               LCALL FS
               MOV A,74H   ;1
               LCALL FS
               MOV A,75H   ;3
               LCALL FS
               MOV A,76H   ;1
               LCALL FS
               MOV A,77H
               LCALL FS
               MOV A,78H
               LCALL FS
               MOV A,79H
               LCALL FS
               MOV A,7AH
               LCALL FS
               MOV A,7BH
               LCALL FS
               MOV A,7CH
               LCALL FS
               MOV A,7DH
               LCALL FS
               MOV A,7EH
               LCALL FS
               MOV A,#3BH   ;"; "
               LCALLFS
               LCALL HC;回車!
               RET
CT:      MOV   TH0,#00H  ;11.0592M最大定時(shí)71.1ms1000h定時(shí)200ms
           MOV   TL0, #00H
       CPL DD
            INC   23H
           MOV   A,23H
           CJNE  A, #250, DONE ;71*250=17.7s
           MOV   23H, #00H
            INC   24H
           MOV   A,24H
           CJNE  A,#90H, DONE;50*144=7200s/60=120分鐘檢測一次電池電壓90  65
       MOV   24H, #00H
       CLR TR0
       LCALL CBC
       SETB TR0;
DONE:   RETI
CBC:
               LCALL ATC
               MOVA,#42H     ;B
               LCALL FS
               MOVA,#43H     ;C
               LCALL FS
               LCALL HC
CBC1:          CLR RI;清除有串口數(shù)據(jù)標(biāo)志
               LCALL PDRI;2秒內(nèi)檢測串口shi否有數(shù)據(jù)返回?
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               CJNE A,#2CH,CBC1;判斷串口數(shù)據(jù), AT CBC   返回CBC: 0,100,,,
               CLR RI;軟件清除串口中斷標(biāo)記
               LCALL PDRI;等待下一個(gè)串口數(shù)據(jù)
               MOV A,SBUF;將串口寄存器中接收到de數(shù)據(jù)給A
               MOV R2,A
               XRL A,#31H
              JZ CBC4
              MOV A,R2
              CLR C
              SUBBA,#38H;XRL A,#32H  ;電池容量剩余20%開始充電;
              JC CBC2
CBC4:         CLR CD
              AJMP CBC3
CBC2:         MOV A,R2
              CLR C
              SUBB A,#36H
              JNC CBC3
              SETB CD
CBC3:         CLR RI
               RET
;AT CHUP
CHUP:          LCALL ATC
               MOV A,#48H  ;H
               LCALL FS
               MOV A,#55H  ;U
               LCALL FS
               MOV A,#50H   ;P
               LCALL FS
               LCALL HC;回車!
               RET
;**********************************************
TAB1:DB35H,34H,30H,38H,34H,45H,30H,41H,37H,35H,33H,35H,36H,45H,39H,30H;54084E0A75356E90合上電源
TAB2:DB35H,31H,37H,33H,39H,35H,45H,44H,37H,35H,33H,35H,36H,45H,39H,30H;517395ED75356E90關(guān)閉電源
;TAB3:DB36H,32H,35H,33H,35H,46H,30H,30H,37H,35H,33H,35H,37H,30H,36H,46H;62535F007535706F打開電燈
;TAB4:DB35H,31H,37H,33H,39H,35H,45H,44H,37H,35H,33H,35H,37H,30H,36H,46H;517395ED7535706F關(guān)閉電燈
;TAB5:DB35H,46H,30H,30H,35H,39H,43H,42H,38H,46H,44H,30H,38H,38H,34H,43H;5F0059CB8FD0884C開始運(yùn)行
;TAB6:DB35H,30H,35H,43H,36H,42H,36H,32H,38H,46H,44H,30H,38H,38H,34H,43H;505C6B628FD0884C停止運(yùn)行
;TAB7:DB36H,35H,37H,30H,36H,33H,36H,45H,39H,31H,43H,37H,39H,36H,43H,36H;6570636E91C796C6數(shù)據(jù)采集
;TAB8:DB31H,30H,34H,34H,46H,36H,30H,35H,39H,37H,44H,1AH;你好  1044F60597D
TAB9:DB36H,34H,41H,34H,39H,35H,30H,30H,35H,45H,30H,33H,39H,36H,33H,32H;64A495005E039632撤銷布防
TAB10:DB35H,46H,30H,30H,35H,39H,43H,42H,35H,45H,30H,33H,39H,36H,33H,32H;5F0059CB5E039632開始布防
ASCII:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H;
TABCPMS:DB50H,4DH,53H,3DH,22H,4DH,54H,22H,2CH,22H,53H,4DH,22H;PMS="MT","SM" LCALLATC
END

(六)、發(fā)送PDU短信

  發(fā)送短消息常用Text和PDU(Protocol DataUnit,協(xié)議數(shù)據(jù)單元)模式。使用Text模式收發(fā)短信代碼簡單,實(shí)現(xiàn)起來十分容易,但最大的缺點(diǎn)是不能收發(fā)中文短信;而PDU模式不僅支持中文短信,也能發(fā)送英文短信。西門子手機(jī)模塊只支持PDU格式,所以有必要了解PDU短信的發(fā)送過程。下面以一個(gè)實(shí)例來說明用AT指令發(fā)送PDU短信的全過程,假如我要發(fā)送下面的短信:
接收號碼:+8613602433649
短信內(nèi)容:工作愉快!
短信中心號碼:+8613800200500
1、短信中心號碼處理:用字符串 addr 表示
  1)、將短信息中心號碼去掉+號,看看長度是否為偶數(shù),如果不是,最后添加F
    addr ="+8613800200500" addr =”8613800453500F”
    => addr = "8613800200500F" addr = "8613800453500F"
  2)、將奇數(shù)位和偶數(shù)位交換。
    => addr = "683108200005F0" addr=”683108403500F0”
  3)、將短信息中心號碼前面加上字符9191是國際化的意思
    => addr = "91683108200005F0" addr ="91683108403500F0”
  4)、算出 addr長度,結(jié)果除2,格式化成2位的16進(jìn)制字符串,16 / 2 = 8=> "08"
    => addr = "0891683108200005F0" ,addr ="0891683108403505F0”
2、手機(jī)號碼處理:用字符串 phone表示
  1)、將手機(jī)號碼去掉+號,看看長度是否為偶數(shù),如果不是,最后添加F
    phone ="+8613602433649"
    => phone = "8613602433649F" phone = "8613602433649F "
  2)、將手機(jī)號碼奇數(shù)位和偶數(shù)位交換。
    => phone = "683106423346F9" phone = "683106423346F9"
3、短信息部分處理:用字符串 msg 表示
  1)、把字符串轉(zhuǎn)換為Unicode代碼:例如工作愉快!unicode代碼為 5DE54F5C61095FEBFF01,用轉(zhuǎn)換工具PDUSMS115轉(zhuǎn)換結(jié)果如圖。


  2)、將 msg長度除2,保留兩位16進(jìn)制數(shù),即 5DE54F5C61095FEBFF01 = 20 / 2 => "0A",再加上 msg
    => msg = "0A5DE54F5C61095FEBFF01"
4、組合
  1)、手機(jī)號碼前加上字符串 11000D911100:固定,0D:手機(jī)號碼的長度,不算+號,十六進(jìn)制表示,91:發(fā)送到手機(jī)為91,發(fā)送到小靈通為81),
    phone ="11000D91" + phone
    => 11000D91683106423346F9
  2)、手機(jī)號碼后加上 000800 和剛才的短信息內(nèi)容,000800也寫死就可以了
    phone = phone +"000800" + msg
    11000D91683106423346F9 + 000800 +0A5DE54F5C61095FEBFF01
    => phone =11000D91683106423346F90008000A5DE54F5C61095FEBFF01
  3)、phone長度除以2,格式化成2位的十進(jìn)制數(shù)
    11000D91683106423346F90008000A5DE54F5C61095FEBFF01 =>50 / 2=> 25
5、發(fā)送
要發(fā)送的內(nèi)容為:
0891683108403505F011000D918613131868651F80008000A5DE54F5C61095FEBFF01(換了一個(gè)手機(jī)號)發(fā)送過程是:先利用串口工具連接手機(jī)模塊,AT+CMGF=0 <</span>回車>,點(diǎn)手動發(fā)送(用PDU格式發(fā)送的命令)

  如果返回ok說明通信成功,再發(fā)送短信長度命令:
  AT+CMGS=25<</span>回車>當(dāng)返回“>”號時(shí),發(fā)送0891683108403505F011000D918613131868651F80008000A5DE54F5C61095FEBFF01
,如果返回不是ERROR,恭喜你,發(fā)送成功了。
(七)、PDU模式的短信息編解碼方法
      PDU模式短信息結(jié)構(gòu)中,較難實(shí)現(xiàn)的是對用戶數(shù)據(jù)部分的編/解碼,例如要發(fā)送數(shù)據(jù)為“123456789abc”,經(jīng)過編碼后變成“31 D9 8C 56 B3 DD 70 B9 B0 780C”。例如如果想用短信方式監(jiān)控蔬菜大棚中的溫度,就需要用PDU方式動態(tài)發(fā)送溫度數(shù)字,因?yàn)閿?shù)字是隨機(jī)的,就需要動態(tài)的把0-9的數(shù)字編碼成PDU模式的短信息下面以Test這四個(gè)字符為例講解把TestASCII 碼轉(zhuǎn)換成PDU模式的短信息編解碼方法,如下圖所示。
第一步把字符Test的ASCII碼01010100(T),01100101(e),01110011(s),01110100(t)的最高位去掉變成1010100(T),1100101(e),1110011(s),1110100(t)。
第二步把第二個(gè)字符e的最低位1移到第一個(gè)字符T的最高位,再把第三個(gè)字符s的2個(gè)最低位字符11移到第二個(gè)字符e的最高位,接著把第四個(gè)字符的低3位100移到第三個(gè)字符s的最高位,最后第四個(gè)字符t的最高位補(bǔ)3個(gè)0。完成后的GSM編碼是11010100(T),11110010(e),10011100(s),00001110(t)。
下面是把“123456789abc”轉(zhuǎn)換結(jié)果的示例:


按上面的方法用51匯編語言編寫的程序如下:
ASCTOSMS:    MOV    R0,#30H       ;指向短消息工作緩沖區(qū)首地址
               MOV    R1,#31H       ;指向移位地址
               MOV    R5,#01H       ;移位計(jì)數(shù)器
ASCTOSMS1:    ;左移變成7ASCII
               MOV    A,R5
               MOV    R4,A
               CLR    C
               MOV    A, @R0
               RLC    A
               MOV    @R0, A

               MOV    A,@R1          ;保存要變換的值
               MOV R2,A
ASCTOSMS2:     CLR    C              ;右移取進(jìn)位C
               MOV    A,@R1
               RRC    A
               MOV @R1,A

               MOV    A,@R0          ;右移R4次把C移入R0
               RRC    A
               MOV    @R0,A
               DJNZ   R4,ASCTOSMS2
               MOVA,R2               ;恢復(fù)要變換的值
               MOV @R1,A
               INC    R0
               INC    R1
               INC    R5
               CJNE   R5,#08H,ASCTOSMS1
               RET
使用時(shí),調(diào)用以下函數(shù)就可以了。                    
LCALLDS18B20;用DS18B20溫度傳感器采集溫度數(shù)據(jù)存到30H開始的單元位置。
                MOV DPTR,#3000;延時(shí)5
                LCALL DelayXmS
                LCALL CMGS1  ;發(fā)送AT+CMGS=021,短信長度
                LCALL FSCG    ;調(diào)用短信發(fā)送檢測子程序。發(fā)AT+CREG?命令
;返回:+CREG,判斷發(fā)送短信是否成功。

CMGS1:         ;發(fā)送AT+CMGS=021,發(fā)送短信8位數(shù)字 12345678
               LCALL ATC  ;AT+C
               MOV A,#4DH ;”4D”ASCII碼是M
               LCALL FS
               MOV A,#47H;”47”ASCII碼是G
               LCALL FS
               MOV A,#53H
               LCALL FS
               MOV A,#3DH
               LCALL FS
               MOVA,#30H       ;”0”
               LCALL FS
               MOVA,#32H       “2”
               LCALL FS
               MOVA,#31H       “1”
               LCALL FS
               LCALL HC;回車!
               LCALL JCDYH;調(diào)用等待手機(jī)回答">"de子程序
               JNC CSJ1;檢測到>,轉(zhuǎn)入CSJ1
               MOV DPTR,#680;延時(shí)2
               LCALL DelayXmS
               MOV WDT_CONTR ,#37H;喂狗
               LJMPCMGS1

CSJ1:          MOV DPTR,#2000;延時(shí)2
               LCALL DelayXmS
               LCALL DZZB1;調(diào)用短信中部固定數(shù)據(jù)0011000B81
               LCALL JSFSJ;調(diào)用發(fā)送短信接收方手機(jī)號碼子程序3131868651F8
               LCALL DYZXSJ1;0000A808
               LCALL ASCTOSMS;30--38H單元的12345678=3132333435363738轉(zhuǎn)成PUD
               MOV R2,#7
               MOV R0,#30h
FSSJ:           MOVDPTR,#ASCI;
               MOV A,@R0
               ANL A,#0F0H
               SWAP  A
               MOVC A,@A+DPTR
               LCALLFS;
               MOV A,@R0
               ANL a,#0FH
               MOVC A,@A+DPTR
               LCALL FS;
               INC  R0
               INC  R1
               DJNZ R2,FSSJ
               MOV A,#1AH
               LCALL FS


               RET



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本黄色免费大片 | www精品 | 欧美精品网站 | 午夜欧美 | 国产一区不卡 | 夜夜操天天艹 | 国产精品亚洲综合 | 国产久| 国产三级精品三级在线观看四季网 | 欧美a区 | 天天碰夜夜操 | 日韩av网址在线观看 | 香蕉久久av | 国产最新网址 | 久久麻豆精品 | 国产亚洲精品美女久久久久久久久久 | 一级片免费在线观看 | 欧美成人a | 久久久久亚洲 | 亚洲午夜精品一区二区三区他趣 | 国产精品久久久久久久久久久久久久 | 亚洲1区 | 乳色吐息在线观看 | 欧美国产日韩在线观看成人 | 黄色一级网 | 欧美精品乱码99久久影院 | 涩爱av一区二区三区 | 久久久蜜桃 | 国产一二三区电影 | 伊人春色成人网 | 久久天天躁狠狠躁夜夜躁2014 | 久久久久久91 | 99精彩视频 | 亚洲视频欧美视频 | 99精品在线| 国产亚洲精品一区二区三区 | 丝袜 亚洲 另类 欧美 综合 | 国产精品麻| 综合久久一区 | 一区二区三区四区五区在线视频 | 97精品超碰一区二区三区 |