# include & ltreg52.h & gt
# include & ltintrins.h & gt
#定義uchar無符號字符
#定義uint無符號整數
#define RxIn 90 //定義接收到的數組長度為90。
uchar代碼AT[]= " AT ";//握手信號
uchar代碼ATE[]= " ATE ";//關閉回顯
uchar碼AT _ CNMI[]= " AT+CNMI = 21 ";//設置這組參數,新的信息會直接顯示到串口,不存儲。
uchar碼AT _ CSCA[]= " AT+CSCA = \ "+8613800571500 \ " ";//設置服務中心號碼
uchar碼AT _ CMGF[]= " AT+CMGF = 1 ";//將短信格式設置為文本格式。
uchar代碼AT _ CMGR[]= " AT+CMGR = ";//讀取SMS命令
uchar代碼AT _ CMGS[]= " AT+CMGS = ";//發送短信命令
uchar代碼AT _ CMGD[]= " AT+CMGD = ";//發送短信命令
uchar代碼成功[]=“操作成功!”;//向目標號碼發送操作成功信息。
uchar code fail[]= "操作失敗,再試壹次!";//向目標號碼發送操作失敗信息。
uchar AT _ delete[12];
uchar AT _ Read[12];//用於存儲發送和閱讀短信的指令。
uchar AT _ send number[25];//用於存儲發送短信號碼的指令。
uchar number buf[3];//用於保存消息的數量。
uchar idata system buf[RxIn];//存儲插座接收到的數據。
uchar command buf[6];//用於存儲指令
烏恰爾伊達州[17];//用於存儲IO端口的狀態。
uchar idata state 1[17];//用於存儲IO端口的狀態。
uchar Rx = 0;
單位溫度;//記錄狀態
uchar temp 1;//用於記錄P0端口的狀態。
uchar temp2//用於記錄P2端口狀態。
位校驗= 0;//查詢標誌位
位receive ready = 0;//接收SMS標誌位
位send ready = 0;//發送SMS就緒標誌位
位發送= 0;//發送短信標誌位
位標誌= 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);實現功能:毫秒級延時///////////////////////////////。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/******************************************************************************************************************/
無效延遲_毫秒(uint i)
{
無符號int j;
for(;我& gt0;我- ){
for(j = 0;j & lt125;j++)
}
}
/******************************************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////void Start _ GSM(void);功能:啟動TC35,打開TC35//////////////////////////////。
//功能描述:單片機上的P3_7引腳與TC35的IGT引腳相連;要啟動TC35,必須在15引腳(/IGT)添加壹個持續時間至少為100ms的低電平信號。
///且該信號的下降沿時間小於1 ms,啟動後,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 = 0x 20;//選擇定時器1
PCON = 0x 00;///波特率沒有加倍
SCON = 0x 50;//串行工作模式1允許串行接收。
th 1 = 0x FD;//晶振11.0592MHZ,波特率9600。
TL 1 = 0x FD;//在相應的計數器上賦值
EA = 1;//總中斷開啟
ES = 1;//串行中斷開啟
tr 1 = 1;//啟動計時器1
}
/******************************************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////Void send char(uchirch);函數:發送壹個字節的數據/////////////////////////////////////////////。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/******************************************************************************************************************/
void sendchar(uchar ch)
{
SBUF = ch
while(TI = = 0);
TI = 0;
}
/******************************************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////void sendstring(uchar * p);實現功能:通過串口發送字符串////////////////////////////////。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/******************************************************************************************************************/
void發送字符串(uchar *p)
{
while(*p)
{
send char(* p);
p++;
}
send char(0x0D);
send char(0x0A);
}
/******************************************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////void receive(void)interrupt 4 using 1;實現功能:通過串口接收數據/////////////////////////////////。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/******************************************************************************************************************/
void接收(void)中斷4使用1
{
中頻(RI)
{
如果(Rx & ltRxIn)
{
system buf[Rx]= SBUF;
rx++;
}
RI = 0;
}
}
/******************************************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////void GSM _ INIT(void);功能:初始化TC35模塊//////////////////////////////////。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/******************************************************************************************************************/
void GSM_INIT(void)
{
循環:
delay _ ms(1000);
send string(AT);
delay _ ms(1000);
發送字符串(ATE);
delay _ ms(1000);
send string(AT _ CNMI);
delay _ ms(1000);
send string(AT _ CSCA);
delay _ ms(1000);
for(Rx = 0;Rx & ltRxInRx++)
{
system buf[Rx]= 0x 00;
}
rx = 0;
send string(AT _ CMGF);
delay _ ms(1000);
if((system buf[2]= = ' O ')& amp;& amp(system buf[3]= = ' k ')//判斷模塊是否初始化成功,如果成功,模塊會回復微控制器“OK”。
{//如果微控制器沒有收到OK,它將繼續發送初始化指令/
for(Rx = 0;Rx & ltRxInRx++)
{
system buf[Rx]= 0x 00;
}
rx = 0;
}
其他
{
for(Rx = 0;Rx & ltRxInRx++)
{
system buf[Rx]= 0x 00;
}
rx = 0;
轉到循環;
}
}
/*******