當前位置:名人名言大全網 - 短信平臺 - 89C51單片機控制GSM模塊TC35的程序(C語言的)

89C51單片機控制GSM模塊TC35的程序(C語言的)

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

#define RxIn 90 //定義接收的數組長度為90

uchar code AT[]="AT"; //握手信號

uchar code ATE[]="ATE"; //關回顯

uchar code AT_CNMI[]="AT+CNMI=2,1";//設置這組參數來了新信息直接顯示到串口,不作存儲

uchar code AT_CSCA[]="AT+CSCA=\"+8613800571500\"";//設置服務中心號碼

uchar code AT_CMGF[]="AT+CMGF=1";//設置短信的格式為text格式

uchar code AT_CMGR[]="AT+CMGR=";//讀取短信指令

uchar code AT_CMGS[]="AT+CMGS=";//發送短信指令

uchar code AT_CMGD[]="AT+CMGD=";//發送短信指令

uchar code successfully[]="Operate Successfully!";//發送操作成功信息到目標號碼

uchar code fail[]="Operate failed,try again!"; //發送操作失敗信息到目標號碼

uchar AT_delete[12];

uchar AT_Read[12]; //用來存儲發送讀取短信指令

uchar AT_SendNumber[25]; //用來存儲發送短信號碼指令

uchar numberbuf[3]; //用來保存短信條數

uchar idata SystemBuf[RxIn]; //儲存出口接收數據

uchar CommandBuf[6]; //用來儲存指令

uchar idata state[17]; //用來存儲IO口狀態

uchar idata state1[17]; //用來存儲IO口狀態

uchar Rx=0;

uint temp; //記錄狀態

uchar temp1; // 用於記錄P0口狀態

uchar temp2; // 用於記錄P2口狀態

bit check=0; //查詢標誌位

bit receiveready=0; //接收短信標誌位

bit sendready=0; //發送短信準備標誌位

bit send=0; //發送短信標誌位

bit flag=0; //指令標誌位

sbit P3_7=P3^7;//啟動GSM的啟動線連IGT

sbit realy0=P0^0;//繼電器1

sbit key1=P2^0; //開關1

sbit key2=P2^1; //開關2

/******************************************************************************************************************/

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////函數void Delay_ms(uint i);實現功能:進行毫秒延時///////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/******************************************************************************************************************/

void Delay_ms(uint i)

{

unsigned int j;

for(;i>0;i--){

for(j=0;j<125;j++)

{;}

}

}

/******************************************************************************************************************/

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////函數void Start_GSM(void);實現功能:對TC35進行啟動,開啟TC35///////////////////////////////////

//功能詳述:單片機上的P3_7管腳是跟TC35的IGT管腳相連;需要啟動TC35,必須在 15腳(/IGT)加時長至少為100ms的低電平信號,

///且該信號下降沿時間小於1ms。啟動後,15 腳的信號應保持高電平.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/******************************************************************************************************************/

void Start_GSM(void)

{

P3_7=0;

Delay_ms(1000);

P3_7=1;

Delay_ms(1000);

}

/******************************************************************************************************************/

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////函數void UART_init;實現功能:對串口進行初始化////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/******************************************************************************************************************/

void UART_init (void)

{

TMOD=0x20; //選擇定時器1

PCON=0x00; ///波特率不加倍

SCON=0x50; //串行工作方式1允許串行接收

TH1=0xFD; //晶振位11.0592MHZ,選擇波特率為9600

TL1=0xFD; //在相應計數器上賦值

EA=1; //總中斷開啟

ES=1; //串行中斷開啟

TR1=1; //開啟定時器1

}

/******************************************************************************************************************/

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////函數void sendchar(uchar ch);實現功能:發送壹字節數據////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/******************************************************************************************************************/

void sendchar(uchar ch)

{

SBUF=ch;

while(TI==0);

TI=0;

}

/******************************************************************************************************************/

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////函數void sendstring(uchar *p);實現功能:通過串口發送字符串/////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/******************************************************************************************************************/

void sendstring(uchar *p)

{

while(*p)

{

sendchar(*p);

p++;

}

sendchar(0x0D);

sendchar(0x0A);

}

/******************************************************************************************************************/

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////函數void receive(void) interrupt 4 using 1;實現功能:通過串口接收數據///////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/******************************************************************************************************************/

void receive(void) interrupt 4 using 1

{

if(RI)

{

if(Rx<RxIn)

{

SystemBuf[Rx]=SBUF;

Rx++;

}

RI=0;

}

}

/******************************************************************************************************************/

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////函數void GSM_INIT(void);實現功能:初始化TC35模塊///////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/******************************************************************************************************************/

void GSM_INIT(void)

{

LOOP:

Delay_ms(1000);

sendstring(AT);

Delay_ms(1000);

sendstring(ATE);

Delay_ms(1000);

sendstring(AT_CNMI);

Delay_ms(1000);

sendstring(AT_CSCA);

Delay_ms(1000);

for(Rx=0;Rx<RxIn;Rx++)

{

SystemBuf[Rx]=0x00;

}

Rx=0;

sendstring(AT_CMGF);

Delay_ms(1000);

if((SystemBuf[2]=='O')&&(SystemBuf[3]=='K')) //判斷是否模塊初始化成功,成功的話模塊會回復"OK"給單片機

{ //如果單片機沒有收到OK,就繼續發送初始化指令/

for(Rx=0;Rx<RxIn;Rx++)

{

SystemBuf[Rx]=0x00;

}

Rx=0;

}

else

{

for(Rx=0;Rx<RxIn;Rx++)

{

SystemBuf[Rx]=0x00;

}

Rx=0;

goto LOOP;

}

}

/*******