新闻中心

EEPW首页>嵌入式系统>设计应用> GPRS模块发送信息代码

GPRS模块发送信息代码

作者: 时间:2016-11-17 来源:网络 收藏
#include

//SIM300测试灯接口

本文引用地址: //m.amcfsurvey.com/article/201611/315464.htm

sbitLED_S0= P1^7;
sbit LED_S1= P1^6;
sbit LED_S2= P1^5;

//BELL接口
sbit BELL= P1^4; //这里以P1.4口的LED指示灯代替蜂鸣器接口
sbit LED_S7= P1^0; //AT+CPIN命令失败

//串口接收数组
#define RxIn 90//定义接收的数组长度为90
unsigned char idata SystemBuf[RxIn]; //储存出口接收数据
unsigned char Rx=0;

//AT指令表
unsigned char code AT[]="AT";//握手信号
unsigned char code ATZ[]="ATZ";//设备初始化
unsigned char code ATE0V1[]="ATE0V1";//关回显设置命令返回OK/V1 0/V0
unsigned char code AT_IPR[]="AT+IPR=9600"; //波特率设置
unsigned char code AT_CPIN[]="AT+CPIN?";//查询SIM卡状态
unsigned char code AT_CSQ[] ="AT+CSQ";//查询信号
unsigned char code ATH[]="ATH";//呼叫挂起
unsigned char code AT_COPS[]="AT+COPS?";//查询网络运营商
unsigned char code AT_CDSNORIP[]="AT+CDNSORIP=0";//GPRS IP 方式
unsigned char code AT_CIPHEAD[]="AT+CIPHEAD=1"; //GPRS 接收方式
unsigned char code AT_CIPSTART[]="AT+CIPSTART="TCP","218.109.58.100","2003"";//GPRS连接方式GPRS连接地址(根据用户实际IP修改)GPRS连接的端口
unsigned char code AT_CIPSEND[]="AT+CIPSEND";//GPRS发送信息命令
unsigned char code AT_CIPCLOSE[]="AT+CIPCLOSE";//TCP连接关闭
unsigned char code AT_CIPSHUT[]="AT+CIPSHUT";//GPRS连接关闭
unsigned char code ATA[]="ATA";//来电接听

//定时TIMER0用
unsigned int timercount;//50MS定时器,
unsigned char timer_1S_cnt;
unsigned char timer_10S_cnt;
unsigned char timer_S_cnt;

//SIM300函数声明
void Delay_ms(unsigned i);

void UART_init(void);
void GSM_init(void);
void sendchar(unsigned char ch);
void sendstring(unsigned char *p);
void sys_init(void);
void clear_SystemBuf(void);
void BELL_UP(void);
unsigned char strsearch(unsigned char *ptr2,unsigned char *ptr1_at);//查字符串*ptr2在*ptr1中的位置

//延时函数
void delayms(unsigned int ii)//1ms延时函数
{
unsigned int i,x;
for (x=0;x {
for (i=0;i<100;i++);
}
}

void delay(unsigned int i)
{
while(i!=0)
{
i--;
}
}


/*********************************************************************
** 函数名称: strsearch ()
** 函数功能: 在指定的数组里连续找到相同的内容
** 入口参数: ptr2要查找的内容, ptr1当前数组
** 出口参数: 0-没有 找到 >1 查找到
*********************************************************************/
unsigned char strsearch(unsigned char *ptr2,unsigned char *ptr1_at)//查字符串*ptr2在*ptr1中的位置
//本函数是用来检查字符串*ptr2是否完全包含在*ptr1中
//返回: 0 没有找到
//1-255 从第N个字符开始相同
{
unsigned char i,j,k;
unsigned char flag;
if(ptr2[0]==0) return(0);
flag=0;
for(i=0,j=0;i {
if(ptr1_at[i]==ptr2[j])
{//第一个字符相同
for(k=i;k {
if(ptr2[j]==0)//比较正确
return(i+1); //返回值是整数,不含0
if(ptr1_at[k]!=ptr2[j]) break;
}
j=0;
}
}
return(0);
}
/******************************************************************************************************************
//////////////////////函数void BELL();实现功能:////////////////////////////////////////////////////////////////////
*****************************************************************************************************************/
void BELL_UP()
{
BELL=0;
Delay_ms(2000);
BELL=1;
Delay_ms(2000);
}
/******************************************************************************************************************
//////////////////////函数void sendchar(uchar ch);实现功能:发送一字节数据//////////////////////////////////////////
*****************************************************************************************************************/
void sendchar(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
/*****************************************************************************************************************
//////////////////////函数void sendstring(uchar *p);实现功能:通过串口发送字符串//////////////////////////////////
*****************************************************************************************************************/
void sendstring(unsigned char *p)
{
while(*p)
{
sendchar(*p);
p++;
}
sendchar(0x0D);
sendchar(0x0A);
}
/*****************************************************************************************************************
////////////////////////////////函数void Delay_ms(unsigned int i);实现功能:进行毫秒延时///////////////////////////////////
*****************************************************************************************************************/
void Delay_ms(unsigned int i)
{
unsigned int j;

for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}

}
//---延时US------------------------------
void dmsec (unsigned int count)
{
unsigned int i;
while (count)
{
i =300;
while (i>0) i--;
count--;
}
}
/************************************************************************************************
********************************系统初始化*******************************************************
************************************************************************************************/
void sys_init(void)//UART TIMER0初始化
{
TH0 = 0xB8;
TL0 = 0x00; //20ms的时钟基准
//串口中断
TI=0;
RI=0;
SCON=0x50; //选用方式1
TMOD=0x20;
TMOD = (TMOD & 0xf0) | 1;//MODE 1
TH1=0xfd; //波特率为9600
TL1=0xfd;
PCON=0x00; //倍频0x80
IE = 0xb0; // EA XX ET2 ES ET0 EX0 ET1 EX1
TR1=1; //enable TIMER1
ES=1; //开串口开断
TR0=1; //串口接收中断
ET0=0; //T0 中断
ET1=0; // T1 中断
EA=1;
timer_1S_cnt=0;

}


/******************************************************************************************************************
///////////////////函数void GSM_INIT(void);实现功能:初始化模块///////////////////////////////
******************************************************************************************************************/
void GSM_init(void)
{
Delay_ms(5000); //
Delay_ms(5000);
Delay_ms(5000); //等待模块启动并联网
while(1)
{
clear_SystemBuf();
sendstring(AT);
Delay_ms(1000);
if((SystemBuf[5]==O)&&(SystemBuf[6]==K))//判断是否模块初始化成功,成功的话模块会回复"OK"给单片机
{//如果单片机没有收到OK,就继续发送初始化指令/
LED_S0=~LED_S0;break; //P1.7指示灯亮
}
Delay_ms(1000);
}
sendstring(ATZ);//初始化
Delay_ms(1000);
sendstring(AT_IPR);//9600
Delay_ms(1000);
sendstring(ATE0V1);//关闭回显设置DCE为OK方式
Delay_ms(1000);
while(1)
{
clear_SystemBuf();
sendstring(AT_CPIN);//查询SIM卡状态
Delay_ms(1000);
// MOUDULE -> MCU
//[0D][0A]
//+CPIN: READY[0D][0A]
//[0D][0A]
//OK[0D][0A]
if((SystemBuf[18]==O)&&(SystemBuf[19]==K))
{
LED_S1=~LED_S1;break; //P1.6指示灯亮
}
Delay_ms(1000);//READY??
LED_S7=~LED_S7;

}
//GPRS初始化
//其他采用模块默认设置
sendstring(AT_CDSNORIP);Delay_ms(1000); //选择域名还是IP方式,这里我们采用IP模式
sendstring(AT_CIPHEAD); Delay_ms(1000); //接收的数据带+IPD字符串
}
/****************************************************************************************************************/
///////////////////////////////////////void clear_SystemBuf();清除串口接收缓冲区/////////////////////////////////
/****************************************************************************************************************/
void clear_SystemBuf()
{
for(Rx=0;Rx {
SystemBuf[Rx]=0x00;
}
Rx=0;
}
/******************************************************************************************************************
///////////////////函数void receive(void)interrupt4 using 1;实现功能:通过串口接收数据////////////////////////////
******************************************************************************************************************/
void receive(void) interrupt 4 using 1
{
if(RI)
{
if(Rx {
SystemBuf[Rx]=SBUF;
Rx++;
}
RI=0;

}
}



关键词:GPRS模块发送信

评论


技术专区

关闭