?? gsm.c
字號:
#include <pic.h>
#define uchar unsigned char
//typedef unsigned char uchar;
//**************************************************GSM指令定義****************************************************************/
uchar const cm0[]="AT\r\n";
uchar const cm1[]="ATE0\r\n"; //ATE0關閉回顯,我還不回白什么是回顯??
uchar const cm2[]="AT+CMGF=0\r\n"; //AT+CMGF=0 采用PDU格式,長度11
uchar const cm3[]="AT+CNMI=2,2,0,0,1\r\n"; //AT+CNMI=2,2,0,0,1 設置接收顯示
uchar cmcd[] = "AT+CMGS=20"; //AT+CMGS=143, PDU數據串長度為143 溫度值兩位 xxx 長度11
uchar const cmhh[]="\r\n";
uchar const cmlt[]="0891683110101705F01100"; //短信中心號碼及設置聯通 22
uchar const cmyd[]="0891683108501305F01100"; //短信中心號碼及設置移動 22
uchar cmnr[]="0008A7064F60597DFF01"; //發送的內容長度為128=80H
uchar cmdf[]="0B8151895223554"; //對方手機號碼 18
uchar const end=0x1a; //短信結束標志->
uchar buffer[30];
//bit send_gsm_flag=0,en_gsm=1;
//********************************************延時程序********************************************************************/
void delayms(unsigned int x,unsigned int y) //延時ms級的程序,延時時間為:(3*y+4)*x+10=?
{
unsigned char z;
do{
z=y;
// do{;}while(--z);
while(--z); //此句與上一句等效!
}while(--x);
asm("nop");
}
void delayus(unsigned char x) //延時us級的程序,延時時間為:3*x+9=?
{
unsigned char d;
d=x;
while(--d){;}
asm("nop");
}
//*****************************************************UART初始化************************************************************/
void usart_init()
{
TRISC6=0; //RC6:TX為發送口
TRISC7=1; //RC7:RX為接收口
SYNC=0;//異步方式
BRGH=1;//高波特率
TXEN=1;//使能串行發送
//TXSTA=0x24; //使能發送,高波特率異步方式
RCSTA=0x90; //串口使能,連續接收
SPBRG=0x19; //設置波特率9600
}
/*********************************************************************************************************************
*UART串口發送函數
*函數名:void tx_dat(uchar len,uchar stemp[])
*說明:通過串口發送數據串
************************************************************************************************************************/
void tx_dat(uchar len,uchar const stemp[])
{
uchar i=0;
TXEN=1;//打開串行發送
for(i=0;i<len;i++)
{
TXIE=0;//串行中斷允許控制位,發送中斷關閉
RCIE=0;//接收中斷關閉
TXREG=stemp[i];
delayms(50,10);
}
TXEN=0;//關閉串行發送
}
/***********************************************************************
*UART串口發送函數
*函數名:void send_one_byte(uchar tx_data)
*說明:通過串口發送字節數據
*************************************************************************/
void send_one_byte(uchar tx_data)
{ TXEN=1;
TXIE=0;//串行中斷允許控制位,發送中斷關閉
RCIE=0;//接收中斷關閉
TXREG=tx_data;
while(TXIF==0);
delayms(50,10);
TXEN=0;
}
/*void convert(uchar const cm[]) //從ROM到RAM的轉換函數
{uchar i;
for(i=0;cm[i]!=0x00;i++)
buffer[i]=cm[i];
}
*/
/*******************************************************************
*GSM初始化程序
*函數名:void gsm_initial()
*說明:初始化GSM
*************************************************************************/
void gsm_initial()
{
tx_dat(4,cm0); //AT\r\n 長度4
delayms(10000,10000);
tx_dat(6,cm1); //ATE0\r\n 長度6關閉回顯
delayms(10000,10000);
tx_dat(11,cm2); //AT+CMGF=0\r\n 長度11
delayms(10000,10000);
tx_dat(19,cm3); //AT+CNMI=2,2,0,0,1 長度19
delayms(10000,10000);
}
/***********************************************************************
*向GSM發送數據函數
*函數名:void send_to_gsm()
*說明:向GSM發送含有溫度數據的短息數據
*************************************************************************/
void send_to_gsm()
{// uchar b20_num,j;
/* if(changenumber_flag==1)
{
for(j=0;j<11;j++)
read_eeprom[j]=ISP_READ(0x28,0x00+j); //讀取EEPROM
ISP_DISABLE(); //關閉ISP功能
change_mobilenumber();//更改手機號碼
}
*/
tx_dat(10,cmcd); //AT+CMGS=, PDU數據串長度為 溫度值兩位 xx 長度11/10
tx_dat(2,cmhh); //\r\n
delayms(10000,10000); //進行延時
tx_dat(22,cmyd); //短信中心號碼及設置聯通或移動 22
tx_dat(16,cmdf); //對方手機號碼 18
tx_dat(20,cmnr); //00080006發送的內容長度為192=c0
send_one_byte(end); //短信結束標志->
tx_dat(2,cmhh); //\r\n
}
main()
{di();
usart_init();
gsm_initial();
send_to_gsm();
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -