複製代碼
- #include <msp430x14x.h>
- #include "string.h"
- //GPRS管腳定義
- #define GPRS_IGT_HIGH P1DIR|=BIT6,P1OUT|=BIT6//點火引腳 高電平
- #define GPRS_IGT_LOW P1DIR|=BIT6,P1OUT&=~BIT6//點火引腳 低電平
- #define GPRS_RTS_H P1DIR|=BIT2,P1OUT|=BIT2 //RTS輸出高電平
- #define GPRS_RTS_L P1DIR|=BIT2,P1OUT&=~BIT2 //RTS輸出低電平
- #define GPRS_CTS_FLAG P1DIR&=~BIT4 //設置CTS線爲輸入線
- #define GPRS_CTS (P1IN&BIT4)
- #define Len 150
- typedef unsigned int uint;
- typedef unsigned char uchar;
- char recieve_data[150];
- uint count = 0;
- uchar send_error = 0;
- //******************************************************
- //延時函數
- void delay(uint time)
- {
- uint i,j;
- for(i=0;i<1000;i++)
- for(j=0;j<time;j++);
- }
- //******************************************************
- //初始化時鐘
- void int_clk()
- {
- uchar i = 0;
- BCSCTL1&=~XT2OFF; //打開XT振盪器
- BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 1M
- do
- {
- IFG1 &= ~OFIFG; //清除振盪錯誤標誌
- for(i = 0; i < 100; i++)
- _NOP(); //延時等待
- }
- while ((IFG1 & OFIFG) != 0); //如果標誌爲1繼續循環等待
- IFG1&=~OFIFG;
- }
- //*******************************************************
- //串口:初始化函數,接收中斷處理函數、發送數據函數
- //*******************************************************
- //初始化串口1
- void init_Usart1()
- {
- U1CTL |= SWRST; //復位串口
- U1CTL |= CHAR; //8位數據
- U1TCTL |= SSEL1; //選擇SMCLK作爲時鐘信號
- UBR01 = 0x8a;
- UBR11 = 0x00; //使32KHz晶振時波特率爲19200bps
- UMCTL1 = 0xde;
- ME2 |= 0x30; //UART接收模塊允許
- UCTL1 &= ~SWRST; //SWRST復位,USART允許
- IE2 |= URXIE1; //接收中斷允許
- P3SEL = 0xC0; //P3.6 P3.7
- P3DIR = 0X40; //P3.6 輸出,P3.7 輸入
- }
- //******************************************************
- //串口1中斷服務處理函數
- #pragma vector=UART1RX_VECTOR
- __interrupt void UART1_RX_ISR(void)
- {
- char data = 0;
- data = U1RXBUF;
- recieve_data[count++] = data;
- if(count>149)
- {
- count=0;
- }
- }
- //發送一個字符
- void SendByte(uchar data)
- {
- while((IFG2&UTXIFG1)==0);//判斷髮送緩衝區是否結束
- U1TXBUF=data;
- }
- //******************************************************
- //清楚接收存儲區內容
- void GPRS_Clearstring()
- {
- uchar len=0;
- count=0;
- //關閉中斷
- IE2 &= ~URXIE1;//禁止接收中斷
- for(;len<Len;len++)
- recieve_data[len]='\0';
- //使能中斷
- IE2|=URXIE1;//使能接收中斷
- }
- //******************************************************
- //將命令寫入usart數據寄存器
- void Send_Data(char * strptr)
- {
- uchar i,j;
- j = strlen(strptr);
- for(i=0;i<j;i++)
- {
- SendByte(strptr[I]);
- }
- }
- //********************************************************
- //GPRS模塊:啓動函數、關閉函數、初始化函數
- //********************************************************
- //GPRS啓動函數
- void GPRS_Start(void)
- {
- GPRS_IGT_HIGH;
- delay(1);
- GPRS_IGT_LOW;
- delay(100);
- GPRS_IGT_HIGH;
- }
- //******************************************************
- //GPRS關閉函數
- void GPRS_Close(void)
- {
- delay(100);
- Send_Data("AT^SMSO\r\n");
- delay(100);
- }
- //******************************************************
- //GPRS初始化函數
- void GPRS_Init(void)
- {
- Send_Data("AT\\Q3\r\n");//設置成RTS/CTS硬件流控制模式
- delay(1000);
- Send_Data("ATE0\r\n"); //關閉回顯
- delay(100);
- Send_Data("AT+CMGF=1\r\n");//採用文本方式
- delay(100);
- Send_Data("AT+CFUN=7\r\n");//設置循環功耗節省模式7
- delay(100);
- Send_Data("AT+CFUN\?\r\n");//用於查詢設置模式是否成功
- delay(100);
- }
- //******************************************************
- //發送短信函數
- //******************************************************
- void SendMessage(char *num,char *massge)
- {
- char instuct[]="AT+CMGS=\"";
- char numinstuct[27];
- strcpy(numinstuct,instuct); //字符串拷貝函數
- strcat(numinstuct,num); //字符串連接函數
- strcat(numinstuct,"\"\r\n");
- Send_Data(numinstuct); //AT+CMGS=\"13607088025\" 發送接收終端號碼
- Send_Data(massge); //發送短信內容
- SendByte(0x1a); //相當於Ctrl+Z
- }
- //***********************************************************
- //主函數:啓動GPRS模塊,設置爲循環低功耗
- //模式(AT+CFUN=8),發送一條短信,關閉GPRS模塊
- //***********************************************************
- void main()
- {
- WDTCTL=WDTPW+WDTHOLD;//關閉看門狗
- int_clk(); //系統時鐘初始化
- init_Usart1(); //初始化串口
- GPRS_RTS_L; //設置RTS爲低電平,表示單片機一直可以接收數據
- //如果發送數據很大,請按照之前描述的對RTS進行適當處理
- GPRS_Start();
- _EINT();//使能中斷
- delay(2000);
- GPRS_Init();
- Send_Data("AT\r\n");//發送個AT測試下
- SendMessage("13612345678","hello");//發送短信
- GPRS_Close();//關閉模塊
- while(1);
- }
轉自:http://bbs.21ic.com/icview-285499-1-1.html
|