AT指令使用函式
阿新 • • 發佈:2019-01-22
/*********************************傳送換行回車函式*******************************/ 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); }