本帖最后由 人生沙畫 于 2016-5-5 15:16 编辑
/*
//本代码使用STC89C52
单片机
//晶振11.0592MHz下测试
//测试使用的板子
*/
#include "main.h"
#include "uart.h"
#include "string.h"
//****************************************************
//主函数
//****************************************************
void main()
{
LED1= 0 ;
ATSTAT();
Delay_ms(2000);
//ATSMSFA();
//Delay_ms(2000);
ATSMSDEL();
Delay_ms(2000);
while(1)
{
ATSMSJIE();
Delay_ms(2000);
ATSMSDEL();
}
}
void ATSTAT() //初始化串口并与GSM握手
{
Uart_Init();//初始化串口是9600
Uart2_Init();//初始化串口是9600
Delay_ms(2000);
UartPrintf("AT
");//先发AT,让GSM模块自动获取波特率为9600
Uart2Printf("AT
");//先发AT,让GSM模块自动获取波特率为9600
Delay_ms(2000);
UartPrintf("AT&F
");
Uart2Printf("AT&F
"); //先发AT,让GSM模块出厂默认设置
Delay_ms(2000);
UartPrintf("AT+CMGF=1
");
Uart2Printf("AT+CMGF=1
"); //GSM模块方以本模式
Delay_ms(2000);
UartPrintf("AT+CSCS="GSM"
");
Uart2Printf("AT+CSCS="GSM"
"); //GSM模块以GSM字符集发送
Delay_ms(2000);
UartPrintf("AT+CNMI=2,1
");
Uart2Printf("AT+CNMI=2,1
"); //开启新短信提示
}
void ATSMSFA(sjhm,dxnr)
{
UartPrintf("AT+CMGF=1
");
Uart2Printf("AT+CMGF=1
"); //GSM模块方以本模式
Delay_ms(2000);
UartPrintf("AT+CSMP=17,167,0,8
"); //发送中英文文本模式短信
Uart2Printf("AT+CSMP=17,167,0,8
");
Delay_ms(2000);
UartPrintf("AT+CSCS="UCS2"
"); //以GSM字符集发送
Uart2Printf("AT+CSCS="UCS2"
");
Delay_ms(2000);
UartPrintf("AT+CMGS="00310033003700360036003600340032003700320031"
"); //电话号码 此处修改参考 GSM使用手册
Uart2Printf("AT+CMGS="00310033003700360036003600340032003700320031"
"); //电话号码 此处修改参考 GSM使用手册
Delay_ms(2000);
UartPrintf("5F53524D6E295EA6003200355EA65F53524D6E7F5EA6003700300025"); //短信内容 此处修改参考 GSM使用手册
Uart2Printf("5F53524D6E295EA6003200355EA65F53524D6E7F5EA6003700300025"); //短信内容 此处修改参考 GSM使用手册
Delay_ms(2000);
UartPrintASCII(0x1a); //发送A字节
Uart2PrintASCII(0x1a);
}
void ATSMSJIE()
{
if(strstr(RX_Buffer,"+CM
ti")!=NULL) //缓存中有+CMTI字符
{
UartPrintf("youduanxinxile
");
Delay_ms(2000);
Uart2Printf("AT+CMGR=1
"); //读取1号位置的短信
Delay_ms(2000);
UartPrintf("duquduanxinxi
");
//isReceiveOKOrTimeout();
Delay_ms(2000);
if(strstr(RX_Buffer,"k1")!=NULL)
{
LED1=1;
UartPrintf("dakai
");
}else{
UartPrintf("dusibai1
");
}
}
}
void ATSMSDEL()
{
Uart2Printf("AT+CMGD=1,4
");
Delay_ms(2000);
//isReceiveOKOrTimeout();
Delay_ms(2000);
//UartPrintf("delete SMS OK
");
}
void isReceiveOKOrTimeout()
{
unsigned int count = 0;
int i = 0;
while(count < 60000) //要接收到0K或者超时跳出
{
i++;
if( i == 10)
{
i = 0;count++;
}
if(flagReceive){
flagReceive = 0;
if(
RX_Buffer[0] == 'O'
&& RX_Buffer[1] == 'K'
&& RX_Buffer[2] == '
'
&& RX_Buffer[3] == '
'
)
UartPrintf("duquOK-----------------
");
break;
}
}
}
//****************************************************
//MS延时函数(11.0592M晶振下测试)
//****************************************************
void Delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<1230;j++);
}
就是这段代码读取不了短信内容
void ATSMSJIE()
{
if(strstr(RX_Buffer,"+CMTI")!=NULL) //缓存中有+CMTI字符
{
UartPrintf("youduanxinxile ");
Delay_ms(2000);
Uart2Printf("AT+CMGR=1 "); //读取1号位置的短信
Delay_ms(2000);
UartPrintf("duquduanxinxi ");
//isReceiveOKOrTimeout();
Delay_ms(2000);
if(strstr(RX_Buffer,"k1")!=NULL)
{
LED1=1;
UartPrintf("dakai ");
}else{
UartPrintf("dusibai1 ");
}
}
}
一周热门 更多>