標題: 單片機控制GSM模塊 [打印本頁]
作者: huangjm4944 時間: 2008-8-25 01:05
標題: 單片機控制GSM模塊
我用單片機控制GSM模塊收發(fā)短信,現(xiàn)在需要用手機向模塊發(fā)送特定的命令,GSM模塊接收到信息后,單片機識別該信息,并講識別的結果通過短信回復,現(xiàn)在我的程序可以識別GSM模塊收到的信息,但是通過向手機回復識別的結果就出問題了,發(fā)送信息總是返回ERROR,有人知道程序的流程嗎?麻煩大家?guī)臀铱纯次业某绦蛴惺裁磫栴}?
發(fā)短信的程序如下:
Sent_Mes(unsigned char *p)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);//發(fā)送AT+
Ser_TXDstring(TC_CMGS,5);//CMGS=
Ser_TxDchar(0x22);//發(fā)送雙引號
Ser_TXDstring(TelNumber,11);
Ser_TxDchar(0x22);//發(fā)送雙引號
gsm_Over();//回車換行
SELInt_on();
ss=0xffffff;
while(Rev_Buf[Rev_count-1]!=0x3e)
{
ss--; //超時返回
if(ss==0)
{return;}
}
SELInt_off();
Ser_TXDstring(p,5);//短信內(nèi)容
Delay5Ms();
Delay5Ms();
Ser_TxDchar(0x1a);//ctrl+z
gsm_Over();//回車換行
SELInt_on();
ss=0xffffff;
while(Rev_Buf[Rev_count]!=0x4B)
{
ss--; //超時返回
if(ss==0)
{return;}
}
if(NewSMS_flag==1)//收到新信息
{
NewSMS_flag=0;
if(Rev_Buf[count+7]==0x53&&Rev_Buf[count+8]==0x4D)//判斷該新短信存儲的位置是否在SIM卡
{
MES_COUNT=Rev_Buf[count+11];//返回該新短信息的序號
}
Read_Mes(MES_COUNT);//讀取控制指令
if(MES_COUNT!=0x31)
MES_COUNT=0x31;
Del_Mes(MES_COUNT);//刪除短信
Cls_Rebuf();
CMD_SHIBIE();//指令識別
MES_COUNT=0;
if(TELNUM_OK)//如果電話號碼正確
{
TELNUM_OK=0;
if(CMD==1)
{
CMD=0;
systemon=1;
Sent_Mes(CMD_1);
Cls_Rebuf();
}
if(CMD==2)
{
CMD=0;
systemon=0;
Sent_Mes(CMD_2);
Cls_Rebuf();
}
}
}
作者: ccc 時間: 2008-8-25 09:03
那手機收到信息了嗎?
作者: huangjm4944 時間: 2008-8-25 11:21
+CMTI: "SM",1
AT+CMGR=1
+CMGR: "REC UNREAD","+8613560405844",,"08/08/25,11:20:49+32"
SYSON
OK
AT+CMGD=1
OK
AT+CMGS="13560405844"
> SYSON
ERROR
以上就是通過串口看到的信息
手機是收不倒信息的
作者: ccc 時間: 2008-8-25 12:57
接一個串口看單片機發(fā)出來的命令是否正確..這是最好的辦法..我不知道你發(fā)AT命令的時候是不是一串一塊發(fā)出去的...比如讀信息AT+CMGR=1,
TC35收到不是..AT命令才會..返回ERROR
作者: huangjm4944 時間: 2008-8-25 14:21
我的發(fā)送程序已經(jīng)貼出來了,中間都有判斷的,只有接收到0x3e之后才發(fā)送信息的
作者: CZY9795 時間: 2017-5-16 15:18
發(fā)送完短信內(nèi)容后,還要發(fā)送0x1A才能啟動一次短信發(fā)送。
作者: CZY9795 時間: 2017-5-16 15:22
不用發(fā)送回車,只發(fā)送0x1a即可
作者: CZY9795 時間: 2017-5-16 15:32
刪除Ser_TxDchar(0x1a);后面的 gsm_Over();,就是說不用發(fā)送回車換行
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |