1. 程式人生 > >AT指令使用函式

AT指令使用函式

/*********************************傳送換行回車函式*******************************/
void Send_LR(void)
{
	Send_Hex(0x0D);	
	Send_Hex(0x0A);	
}
/*************************************清除串列埠快取資料函式*************************************/
void CLR_Buf1(void)
{
	unsigned int k;
    for(k=0;k<Buf1_Max;k++)      //將快取內容清零
    {
		Buf_First_Serial[k] = 0x30;
	}
    First_Int = 0;              //接收字串的起始儲存位置
}
/*****************************************發AT指令函式****************************************/
void Second_AT_Command(unsigned char *b)
{
    ES = 0;                  //關串列埠中斷
    for (b; *b!='\0';b++)
   	{
       	SBUF = *b;
       	while(TI!=1);    	//等待發送完成
		TI = 0;          	//清除傳送中斷標誌位
	}	   
	ES = 1;                  //開串列埠中斷
	Send_LR();
}
/**************************************等待模組註冊成功函式***********************************/
void Wait_CREG(void)
{
	unsigned char i;
	unsigned int k;
	i = 0;
	CLR_Buf1();
    while(i == 0)        			
	{
		CLR_Buf1();        
		Send_ASCII("AT+CREG?");
		Send_LR();
		delay_ms(1000);  						
	    for(k=0;k<Buf1_Max;k++)      			
    	{
			if(Buf_First_Serial[k] == ':')
			{
				if((Buf_First_Serial[k+4] == '1')||(Buf_First_Serial[k+4] == '5'))
				{
					i = 1;
				   	break;
				}
			}
		}
	}
}

/*******************************************撥打電話函式***************************************/
void ATD_num(void)
{
	unsigned char i;
	Send_ASCII("ATD");								//撥打電話指令
	//語音電話相關指令:ATA是接電話指令,ATH是掛電話指令
	for(i=0;i<11;i++)
	{
		Send_Hex(Phone_num[i]);
	}
	Send_ASCII(";");
	//手機號後面要加分號
	Send_LR();										//傳送換行回車
	delay_ms(1000);
}
/*******************************************結束通話電話函式***************************************/
void ATH_num(void)
{
	Send_ASCII("ATH");								//撥打電話指令
	Send_LR();										//傳送換行回車
	delay_ms(1000);
}


/************************************** 串列埠初始化 *******************************************/
void Init_Com(void)
{	
	SCON = 0x50; 	//設定串列埠工作方式為1   
	TMOD = 0x20; 	//定時器T1工作方式2 
	TH1 = 0xFD; 	//定時器初值:9600波特率
	TL1 = 0XFD;
	TR1 = 1; 		//啟動定時器1 
	EA = 1; 		//開啟總中斷
	ES = 1; 		//開啟串列埠中斷
}
/**************************************傳送字元(十六進位制)函式*********************************/

void Send_Hex(unsigned char c)         
{
    ES = 0;                  //關串列埠中斷
    SBUF = c;
    while(TI!=1);            //等待發送完成
    TI = 0;                  //清除傳送中斷標誌位
	ES = 1;                  //開串列埠中斷
}

/***************************************傳送字元(ASCII)函式**********************************/
void Send_ASCII(unsigned char *b)         
{
    ES = 0;                  //關串列埠中斷
    for (b; *b!='\0';b++)
   	{
       	SBUF = *b;
       	while(TI!=1);    //等待發送完成
		TI = 0;          //清除傳送中斷標誌位
	}	   
	ES = 1;                  //開串列埠中斷
}
 /*****************************************對模組進行初始化*************************************/
void Init_Module(void)
{
	Second_AT_Command("ATE0");								//取消回顯
	delay_ms(500);
	Second_AT_Command("AT+CNMI=2,2");						//新簡訊到來時直接通過串列埠輸出不做儲存
	delay_ms(500);
	Second_AT_Command("AT+CMGF=1");							//TEXT模式
	delay_ms(500);
	CLR_Buf1();
}

void Send_Message()   //傳送簡訊
{
	   unsigned char i;
	   Send_ASCII("AT+CMGS=\"+86");
		
	    for(i = 0;i < 11;i++)
		{
			 Send_Hex(Phone_num[i]);
		}
		Send_ASCII("\"");
	   Send_LR();													
	   delay_ms(1000);
	   Send_ASCII(msg);										//傳送內容
	   Send_Hex(0x1A);												//傳送十六進位制數1A
	   Send_LR();													
	   delay_ms(5000);
	   LCD_Clear(); 
}
void ATA_num()    //接聽電話
{
	   Send_ASCII("ATA");							
	   Send_LR() ;										
	   delay_ms(1000);
}