GPRS模塊發(fā)送信息代碼
//SIM300測試燈接口
本文引用地址:http://butianyuan.cn/article/201611/315464.htmsbit LED_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命令失敗
//串口接收數(shù)組
#define RxIn 90//定義接收的數(shù)組長度為90
unsigned char idata SystemBuf[RxIn]; //儲存出口接收數(shù)據(jù)
unsigned char Rx=0;
//AT指令表
unsigned char code AT[]="AT";//握手信號
unsigned char code ATZ[]="ATZ";//設(shè)備初始化
unsigned char code ATE0V1[]="ATE0V1";//關(guān)回顯設(shè)置命令返回OK/V1 0/V0
unsigned char code AT_IPR[]="AT+IPR=9600"; //波特率設(shè)置
unsigned char code AT_CPIN[]="AT+CPIN?";//查詢SIM卡狀態(tài)
unsigned char code AT_CSQ[] ="AT+CSQ";//查詢信號
unsigned char code ATH[]="ATH";//呼叫掛起
unsigned char code AT_COPS[]="AT+COPS?";//查詢網(wǎng)絡(luò)運(yùn)營商
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連接地址(根據(jù)用戶實(shí)際IP修改)GPRS連接的端口
unsigned char code AT_CIPSEND[]="AT+CIPSEND";//GPRS發(fā)送信息命令
unsigned char code AT_CIPCLOSE[]="AT+CIPCLOSE";//TCP連接關(guān)閉
unsigned char code AT_CIPSHUT[]="AT+CIPSHUT";//GPRS連接關(guān)閉
unsigned char code ATA[]="ATA";//來電接聽
//定時(shí)TIMER0用
unsigned int timercount;//50MS定時(shí)器,
unsigned char timer_1S_cnt;
unsigned char timer_10S_cnt;
unsigned char timer_S_cnt;
//SIM300函數(shù)聲明
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中的位置
//延時(shí)函數(shù)
void delayms(unsigned int ii)//1ms延時(shí)函數(shù)
{
unsigned int i,x;
for (x=0;x
for (i=0;i<100;i++);
}
}
void delay(unsigned int i)
{
while(i!=0)
{
i--;
}
}
/*********************************************************************
** 函數(shù)名稱: strsearch ()
** 函數(shù)功能: 在指定的數(shù)組里連續(xù)找到相同的內(nèi)容
** 入口參數(shù): ptr2要查找的內(nèi)容, ptr1當(dāng)前數(shù)組
** 出口參數(shù): 0-沒有 找到 >1 查找到
*********************************************************************/
unsigned char strsearch(unsigned char *ptr2,unsigned char *ptr1_at)//查字符串*ptr2在*ptr1中的位置
//本函數(shù)是用來檢查字符串*ptr2是否完全包含在*ptr1中
//返回: 0 沒有找到
//1-255 從第N個(gè)字符開始相同
{
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])
{//第一個(gè)字符相同
for(k=i;k
if(ptr2[j]==0)//比較正確
return(i+1); //返回值是整數(shù),不含0
if(ptr1_at[k]!=ptr2[j]) break;
}
j=0;
}
}
return(0);
}
/******************************************************************************************************************
//////////////////////函數(shù)void BELL();實(shí)現(xiàn)功能:////////////////////////////////////////////////////////////////////
*****************************************************************************************************************/
void BELL_UP()
{
BELL=0;
Delay_ms(2000);
BELL=1;
Delay_ms(2000);
}
/******************************************************************************************************************
//////////////////////函數(shù)void sendchar(uchar ch);實(shí)現(xiàn)功能:發(fā)送一字節(jié)數(shù)據(jù)//////////////////////////////////////////
*****************************************************************************************************************/
void sendchar(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
/*****************************************************************************************************************
//////////////////////函數(shù)void sendstring(uchar *p);實(shí)現(xiàn)功能:通過串口發(fā)送字符串//////////////////////////////////
*****************************************************************************************************************/
void sendstring(unsigned char *p)
{
while(*p)
{
sendchar(*p);
p++;
}
sendchar(0x0D);
sendchar(0x0A);
}
/*****************************************************************************************************************
////////////////////////////////函數(shù)void Delay_ms(unsigned int i);實(shí)現(xiàn)功能:進(jìn)行毫秒延時(shí)///////////////////////////////////
*****************************************************************************************************************/
void Delay_ms(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
//---延時(shí)US------------------------------
void dmsec (unsigned int count)
{
unsigned int i;
while (count)
{
i =300;
while (i>0) i--;
count--;
}
}
/************************************************************************************************
********************************系統(tǒng)初始化*******************************************************
************************************************************************************************/
void sys_init(void)//UART TIMER0初始化
{
TH0 = 0xB8;
TL0 = 0x00; //20ms的時(shí)鐘基準(zhǔn)
//串口中斷
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;
}
/******************************************************************************************************************
///////////////////函數(shù)void GSM_INIT(void);實(shí)現(xiàn)功能:初始化模塊///////////////////////////////
******************************************************************************************************************/
void GSM_init(void)
{
Delay_ms(5000); //
Delay_ms(5000);
Delay_ms(5000); //等待模塊啟動并聯(lián)網(wǎng)
while(1)
{
clear_SystemBuf();
sendstring(AT);
Delay_ms(1000);
if((SystemBuf[5]==O)&&(SystemBuf[6]==K))//判斷是否模塊初始化成功,成功的話模塊會回復(fù)"OK"給單片機(jī)
{//如果單片機(jī)沒有收到OK,就繼續(xù)發(fā)送初始化指令/
LED_S0=~LED_S0;break; //P1.7指示燈亮
}
Delay_ms(1000);
}
sendstring(ATZ);//初始化
Delay_ms(1000);
sendstring(AT_IPR);//9600
Delay_ms(1000);
sendstring(ATE0V1);//關(guān)閉回顯設(shè)置DCE為OK方式
Delay_ms(1000);
while(1)
{
clear_SystemBuf();
sendstring(AT_CPIN);//查詢SIM卡狀態(tài)
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初始化
//其他采用模塊默認(rèn)設(shè)置
sendstring(AT_CDSNORIP);Delay_ms(1000); //選擇域名還是IP方式,這里我們采用IP模式
sendstring(AT_CIPHEAD); Delay_ms(1000); //接收的數(shù)據(jù)帶+IPD字符串
}
/****************************************************************************************************************/
///////////////////////////////////////void clear_SystemBuf();清除串口接收緩沖區(qū)/////////////////////////////////
/****************************************************************************************************************/
void clear_SystemBuf()
{
for(Rx=0;Rx
SystemBuf[Rx]=0x00;
}
Rx=0;
}
/******************************************************************************************************************
///////////////////函數(shù)void receive(void) interrupt 4 using 1;實(shí)現(xiàn)功能:通過串口接收數(shù)據(jù)////////////////////////////
******************************************************************************************************************/
void receive(void) interrupt 4 using 1
{
if(RI)
{
if(Rx
SystemBuf[Rx]=SBUF;
Rx++;
}
RI=0;
}
}
評論