新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > GPRS模塊發送信息代碼

        GPRS模塊發送信息代碼

        作者: 時間:2016-11-17 來源:網絡 收藏
        #include

        //SIM300測試燈接口

        本文引用地址:http://www.104case.com/article/201611/315464.htm

        sbit LED_S0= P1^7;
        sbit LED_S1= P1^6;
        sbit LED_S2= P1^5;

        //BELL接口
        sbit BELL= P1^4; //這里以P1.4口的LED指示燈代替蜂鳴器接口
        sbit LED_S7= P1^0; //AT+CPIN命令失敗

        //串口接收數組
        #define RxIn 90//定義接收的數組長度為90
        unsigned char idata SystemBuf[RxIn]; //儲存出口接收數據
        unsigned char Rx=0;

        //AT指令表
        unsigned char code AT[]="AT";//握手信號
        unsigned char code ATZ[]="ATZ";//設備初始化
        unsigned char code ATE0V1[]="ATE0V1";//關回顯設置命令返回OK/V1 0/V0
        unsigned char code AT_IPR[]="AT+IPR=9600"; //波特率設置
        unsigned char code AT_CPIN[]="AT+CPIN?";//查詢SIM卡狀態
        unsigned char code AT_CSQ[] ="AT+CSQ";//查詢信號
        unsigned char code ATH[]="ATH";//呼叫掛起
        unsigned char code AT_COPS[]="AT+COPS?";//查詢網絡運營商
        unsigned char code AT_CDSNORIP[]="AT+CDNSORIP=0";//GPRS IP 方式
        unsigned char code AT_CIPHEAD[]="AT+CIPHEAD=1"; //GPRS 接收方式
        unsigned char code AT_CIPSTART[]="AT+CIPSTART="TCP","218.109.58.100","2003"";//GPRS連接方式GPRS連接地址(根據用戶實際IP修改)GPRS連接的端口
        unsigned char code AT_CIPSEND[]="AT+CIPSEND";//GPRS發送信息命令
        unsigned char code AT_CIPCLOSE[]="AT+CIPCLOSE";//TCP連接關閉
        unsigned char code AT_CIPSHUT[]="AT+CIPSHUT";//GPRS連接關閉
        unsigned char code ATA[]="ATA";//來電接聽

        //定時TIMER0用
        unsigned int timercount;//50MS定時器,
        unsigned char timer_1S_cnt;
        unsigned char timer_10S_cnt;
        unsigned char timer_S_cnt;

        //SIM300函數聲明
        void Delay_ms(unsigned i);

        void UART_init(void);
        void GSM_init(void);
        void sendchar(unsigned char ch);
        void sendstring(unsigned char *p);
        void sys_init(void);
        void clear_SystemBuf(void);
        void BELL_UP(void);
        unsigned char strsearch(unsigned char *ptr2,unsigned char *ptr1_at);//查字符串*ptr2在*ptr1中的位置

        //延時函數
        void delayms(unsigned int ii)//1ms延時函數
        {
        unsigned int i,x;
        for (x=0;x{
        for (i=0;i<100;i++);
        }
        }

        void delay(unsigned int i)
        {
        while(i!=0)
        {
        i--;
        }
        }


        /*********************************************************************
        ** 函數名稱: strsearch ()
        ** 函數功能: 在指定的數組里連續找到相同的內容
        ** 入口參數: ptr2要查找的內容, ptr1當前數組
        ** 出口參數: 0-沒有 找到 >1 查找到
        *********************************************************************/
        unsigned char strsearch(unsigned char *ptr2,unsigned char *ptr1_at)//查字符串*ptr2在*ptr1中的位置
        //本函數是用來檢查字符串*ptr2是否完全包含在*ptr1中
        //返回: 0 沒有找到
        //1-255 從第N個字符開始相同
        {
        unsigned char i,j,k;
        unsigned char flag;
        if(ptr2[0]==0) return(0);
        flag=0;
        for(i=0,j=0;i{
        if(ptr1_at[i]==ptr2[j])
        {//第一個字符相同
        for(k=i;k {
        if(ptr2[j]==0)//比較正確
        return(i+1); //返回值是整數,不含0
        if(ptr1_at[k]!=ptr2[j]) break;
        }
        j=0;
        }
        }
        return(0);
        }
        /******************************************************************************************************************
        //////////////////////函數void BELL();實現功能:////////////////////////////////////////////////////////////////////
        *****************************************************************************************************************/
        void BELL_UP()
        {
        BELL=0;
        Delay_ms(2000);
        BELL=1;
        Delay_ms(2000);
        }
        /******************************************************************************************************************
        //////////////////////函數void sendchar(uchar ch);實現功能:發送一字節數據//////////////////////////////////////////
        *****************************************************************************************************************/
        void sendchar(unsigned char ch)
        {
        SBUF=ch;
        while(TI==0);
        TI=0;
        }
        /*****************************************************************************************************************
        //////////////////////函數void sendstring(uchar *p);實現功能:通過串口發送字符串//////////////////////////////////
        *****************************************************************************************************************/
        void sendstring(unsigned char *p)
        {
        while(*p)
        {
        sendchar(*p);
        p++;
        }
        sendchar(0x0D);
        sendchar(0x0A);
        }
        /*****************************************************************************************************************
        ////////////////////////////////函數void Delay_ms(unsigned int i);實現功能:進行毫秒延時///////////////////////////////////
        *****************************************************************************************************************/
        void Delay_ms(unsigned int i)
        {
        unsigned int j;

        for(;i>0;i--)
        {
        for(j=0;j<125;j++)
        {;}
        }

        }
        //---延時US------------------------------
        void dmsec (unsigned int count)
        {
        unsigned int i;
        while (count)
        {
        i =300;
        while (i>0) i--;
        count--;
        }
        }
        /************************************************************************************************
        ********************************系統初始化*******************************************************
        ************************************************************************************************/
        void sys_init(void)//UART TIMER0初始化
        {
        TH0 = 0xB8;
        TL0 = 0x00; //20ms的時鐘基準
        //串口中斷
        TI=0;
        RI=0;
        SCON=0x50; //選用方式1
        TMOD=0x20;
        TMOD = (TMOD & 0xf0) | 1;//MODE 1
        TH1=0xfd; //波特率為9600
        TL1=0xfd;
        PCON=0x00; //倍頻0x80
        IE = 0xb0; // EA XX ET2 ES ET0 EX0 ET1 EX1
        TR1=1; //enable TIMER1
        ES=1; //開串口開斷
        TR0=1; //串口接收中斷
        ET0=0; //T0 中斷
        ET1=0; // T1 中斷
        EA=1;
        timer_1S_cnt=0;

        }


        /******************************************************************************************************************
        ///////////////////函數void GSM_INIT(void);實現功能:初始化模塊///////////////////////////////
        ******************************************************************************************************************/
        void GSM_init(void)
        {
        Delay_ms(5000); //
        Delay_ms(5000);
        Delay_ms(5000); //等待模塊啟動并聯網
        while(1)
        {
        clear_SystemBuf();
        sendstring(AT);
        Delay_ms(1000);
        if((SystemBuf[5]==O)&&(SystemBuf[6]==K))//判斷是否模塊初始化成功,成功的話模塊會回復"OK"給單片機
        {//如果單片機沒有收到OK,就繼續發送初始化指令/
        LED_S0=~LED_S0;break; //P1.7指示燈亮
        }
        Delay_ms(1000);
        }
        sendstring(ATZ);//初始化
        Delay_ms(1000);
        sendstring(AT_IPR);//9600
        Delay_ms(1000);
        sendstring(ATE0V1);//關閉回顯設置DCE為OK方式
        Delay_ms(1000);
        while(1)
        {
        clear_SystemBuf();
        sendstring(AT_CPIN);//查詢SIM卡狀態
        Delay_ms(1000);
        // MOUDULE -> MCU
        //[0D][0A]
        //+CPIN: READY[0D][0A]
        //[0D][0A]
        //OK[0D][0A]
        if((SystemBuf[18]==O)&&(SystemBuf[19]==K))
        {
        LED_S1=~LED_S1;break; //P1.6指示燈亮
        }
        Delay_ms(1000);//READY??
        LED_S7=~LED_S7;

        }
        //GPRS初始化
        //其他采用模塊默認設置
        sendstring(AT_CDSNORIP);Delay_ms(1000); //選擇域名還是IP方式,這里我們采用IP模式
        sendstring(AT_CIPHEAD); Delay_ms(1000); //接收的數據帶+IPD字符串
        }
        /****************************************************************************************************************/
        ///////////////////////////////////////void clear_SystemBuf();清除串口接收緩沖區/////////////////////////////////
        /****************************************************************************************************************/
        void clear_SystemBuf()
        {
        for(Rx=0;Rx{
        SystemBuf[Rx]=0x00;
        }
        Rx=0;
        }
        /******************************************************************************************************************
        ///////////////////函數void receive(void) interrupt 4 using 1;實現功能:通過串口接收數據////////////////////////////
        ******************************************************************************************************************/
        void receive(void) interrupt 4 using 1
        {
        if(RI)
        {
        if(Rx{
        SystemBuf[Rx]=SBUF;
        Rx++;
        }
        RI=0;

        }
        }



        關鍵詞: GPRS模塊發送信

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 民县| 武邑县| 晋中市| 金溪县| 安陆市| 大丰市| 油尖旺区| 临武县| 策勒县| 牡丹江市| 濮阳市| 旬阳县| 偏关县| 南昌县| 潼南县| 蒙阴县| 西昌市| 宁乡县| 弋阳县| 星子县| 瑞安市| 高雄市| 贺州市| 余姚市| 酒泉市| 米易县| 明水县| 威信县| 绩溪县| 柯坪县| 澄江县| 高平市| 玛曲县| 阿拉善右旗| 肇庆市| 类乌齐县| 稷山县| 土默特右旗| 犍为县| 兰西县| 绥棱县|