久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2950|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

15單片機(jī)GSM模塊通訊的問題

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 50 黑幣 回復(fù)本帖可獲得 10 黑幣獎(jiǎng)勵(lì)! 每人限 1 次(中獎(jiǎng)概率 50%)
跳轉(zhuǎn)到指定樓層
樓主
ID:232499 發(fā)表于 2017-11-30 23:12 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
請(qǐng)各位大俠看看這個(gè)程序是在51的基礎(chǔ)上修改的修改的部分包括延時(shí)函數(shù)和波特率以及頭文件,發(fā)現(xiàn)在修改前可以通信修改后有數(shù)據(jù)發(fā)出但無法和GSM通訊。使用串口調(diào)試工具查看發(fā)現(xiàn)51和15發(fā)送到串口助手上的數(shù)值是一樣的只是速度快慢有區(qū)別。

  1. #include <STC15F2K60S2.H>
  2. #include <intrins.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include "lcd12864.h"
  6. #define uint  unsigned int
  7. #define uchar unsigned char

  8. #define CALL_YOU_TELNUMBER "***********"//*號(hào)寫入手機(jī)號(hào)碼

  9. #define SEND_MESSA_EN "520ss.ssssss.com"
  10. #define SEND_MESSA_CN "************"//*號(hào)寫入中文對(duì)應(yīng)編碼



  11. sbit Send_ENGLISH_key=P1^3;   //控制發(fā)送英文按鍵
  12. sbit Send_SMS_PDU_key=P1^2;  // 控制發(fā)送中文按鍵

  13. #define MAXCHAR 70      //串口緩沖最大長(zhǎng)度
  14. uchar  GsmRcv[MAXCHAR];

  15. #define MAXMSG  15      //接收短信最大長(zhǎng)度
  16. #define MAXREVMSG MAXMSG+2

  17. sbit JIDIANQI=P1^0; //繼電器
  18. sbit FENGMINGQI=P1^1; //蜂鳴器

  19. uchar j=0;
  20. int g_timeout=0;


  21. void Init_UART(void);
  22. void Init_GSM(void);
  23. void delay(uint ms);
  24. void clearBuff(void);
  25. void send_call(void);
  26. void send_english(void);
  27. void hang_up(void);
  28. void Print_Char(uchar ch);
  29. void Print_Str(uchar *str);
  30. void SendUDPMessage(char* pnum, char* context, void (*sendfun)(char*));
  31. void delay(uint ms);
  32. int Hand(uchar *a);
  33. void led(int i);


  34. void main()
  35. {
  36.     v_Lcd12864Init_f() ;
  37.     v_Lcd12864PutString_f( 2,0, "") ;
  38.     v_Lcd12864PutString_f( 2,1, "′′˼í¨DÅ") ;
  39.     v_Lcd12864PutString_f( 1,2, "") ;
  40.     v_Lcd12864PutString_f( 1,3, "www.csgsm.com") ;

  41.     Init_UART();             //初始化串口
  42.     Init_GSM();                     //初始化GSM
  43.     delay(10);

  44.     Send_ENGLISH_key=1;     //發(fā)英文短信按鍵
  45.     Send_SMS_PDU_key=1;     //發(fā)中文短信按鍵
  46.     clearBuff();

  47.     send_call();            //打電話

  48.     v_Lcd12864Clear_f() ;
  49.     v_Lcd12864PutString_f( 2,1, "") ;
  50.     v_Lcd12864PutString_f( 1,2, "") ;
  51.     v_Lcd12864PutString_f( 1,3, "") ;

  52.     while(1)
  53.     {
  54.         ////////////////////////////////////////////////////////////////////////
  55.         P2=0XFF;
  56.         if(Send_ENGLISH_key==0)     //發(fā)英文短信按鍵
  57.         {
  58.             while(Send_ENGLISH_key==0)
  59.             {
  60.                     P2 &= ~0X04;    //P2.2點(diǎn)亮
  61.             }
  62.             P2 |= 0X01;
  63.             clearBuff();            //清空緩存
  64.             v_Lcd12864Clear_f() ;   //清屏
  65.             v_Lcd12864PutString_f( 0,1, "英文短信發(fā)送....") ;
  66.             send_english();         
  67.             v_Lcd12864PutString_f( 0,1, "短信發(fā)送[OK]") ;
  68.         }
  69.         else if(Send_SMS_PDU_key==0)    //發(fā)中文短信按鍵
  70.         {
  71.             while(Send_SMS_PDU_key==0)
  72.             {
  73.                     P2 &= ~0X08;        //點(diǎn)亮P2.3
  74.             }
  75.             P2 |= 0X02;
  76.             clearBuff();                //清空緩存
  77.             v_Lcd12864Clear_f() ; //清屏
  78.             v_Lcd12864PutString_f( 0,1, "中文短信發(fā)送....") ;
  79.             SendUDPMessage(CALL_YOU_TELNUMBER, SEND_MESSA_CN, Print_Str);   //·¢ËíÖDÎç¶ìDÅoˉêy
  80.             v_Lcd12864PutString_f( 0,1,"短信發(fā)送[OK]") ;
  81.         }


  82.         if(strstr(GsmRcv,"RING")!=NULL)
  83.         {
  84.             FENGMINGQI=0;
  85.             delay(2);
  86.             clearBuff();
  87.             v_Lcd12864Clear_f() ; //清屏
  88.             v_Lcd12864PutString_f( 0,1, "有電話[..]") ;
  89.         }
  90.         else
  91.         {
  92.             FENGMINGQI=1;
  93.         }


  94.         if(strstr(GsmRcv,"+CMTI")!=NULL)    //緩存中有加CMTI字符
  95.         {
  96.             clearBuff();
  97.             while(!Hand("OK"))//與GSM握手判斷是否返回OK
  98.             {
  99.                     Print_Str("AT+CMGF=1\r\n");
  100.                     delay(10);
  101.             }
  102.             clearBuff();

  103.             Print_Str("AT+CMGR=1\r\n");            //讀取1號(hào)位置短信
  104.             delay(50);
  105.             if(strstr(GsmRcv,"k1")!=NULL||strstr(GsmRcv,"K1")!=NULL)
  106.             {
  107.                 v_Lcd12864Clear_f() ; //清屏
  108.                 v_Lcd12864PutString_f( 0,1, "繼電器打開[OK]") ;
  109.                 JIDIANQI=0;
  110.             }
  111.             else if(strstr(GsmRcv,"k0")!=NULL||strstr(GsmRcv,"K0")!=NULL)
  112.             {
  113.                 v_Lcd12864Clear_f() ; //ÇåÆá
  114.                 v_Lcd12864PutString_f( 0,1, "繼電器關(guān)閉[OK]") ;
  115.                 JIDIANQI=1;
  116.             }
  117.             els
  118.             {
  119.                 char pStr[MAXREVMSG];      
  120.                 int n=0;                 
  121.                 memset(pStr,0,MAXREVMSG);

  122.                 v_Lcd12864Clear_f() ;      
  123.                 v_Lcd12864PutString_f( 0,0, "短信內(nèi)容如下:") ;  

  124.                 strncpy(pStr,strstr(GsmRcv+14,"\r\n")+2,MAXREVMSG)
  125.                 n = strlen(strstr(pStr,"\r\n"));                  
  126.                 pStr[MAXREVMSG-n] = '\0';                        
  127.                 v_Lcd12864PutString_f( 0,1, pStr);               
  128.                 v_Lcd12864PutString_f( 0,3, "發(fā)十五字以內(nèi)中文") ;   
  129.             }
  130.             clearBuff();

  131.             while(!Hand("OK")
  132.             {
  133.                     Print_Str("AT+CMGD=1\r\n")
  134.                     delay(50);
  135.             }
  136.             clearBuff();
  137.         }

  138.      
  139.     }
  140. }

  141. void ser() interrupt 4
  142. {

  143.     if(RI==1)
  144.     {  GsmRcv[j]=SBUF;//Ãüáî′æμ½Ãüáîêy×é

  145.         RI=0; //èí¼tÇå3y½óêÕÖD¶Ï
  146.         j++;
  147.     }


  148. }

  149. /*void delay(uint ms)// Ñóê±×ó3ìDò
  150. {
  151.     uchar i;
  152.     while(ms--)
  153.     {
  154.         for(i=0;i<120;i++);
  155.     }
  156. }*/

  157. void delay(uint ms)                //@11.0592MHz
  158. {               
  159.         unsigned char a, b;
  160.     while(ms--)
  161. {
  162.         _nop_();
  163.         _nop_();
  164.         _nop_();
  165.         a = 200;
  166.         b = 200;
  167.         do
  168.         {
  169.                 while (--b);
  170.         } while (--a);
  171.         
  172. }
  173. }

  174. void Print_Char(uchar ch
  175. {
  176.     SBUF=ch;
  177.     while(TI!=1);
  178.     TI=0;
  179. }

  180. void Print_Str(uchar *str
  181. {

  182.     while(*str!='\0')
  183.     {
  184.         Print_Char(*str);
  185.         delay(2);
  186.         str++;
  187.     }

  188. }

  189. /*void Init_UART(void)//9600波特率
  190. {
  191.     SCON = 0x50
  192.     TMOD |= 0x20
  193.     PCON |= 0x80 ;
  194.     TH1 = 0xFA ;
  195.     TL1=0xFA;
  196.     IE |= 0x90 ;   
  197.     TR1 = 1 ;      
  198.     TI=1;
  199.     ES=1;
  200. }*/
  201. void Init_UART(void)//9600波特率
  202. {
  203.         SCON = 0x50;            
  204.         AUXR &= 0xBF;            
  205.         AUXR &= 0xFE;              
  206.         TMOD &= 0x0F;         
  207.         TMOD |= 0x20;              
  208.         TL1 = 0xFD;            
  209.         TH1 = 0xFD;              
  210.         ET1 = 0;            
  211.         TR1 = 1;            
  212.         ES = 1;
  213.         EA = 1;
  214. }

  215. void clearBuff(void)
  216. {
  217.     for(j=0;j<MAXCHAR;j++)
  218.     {
  219.         GsmRcv[j]=0x00;
  220.     }
  221.     j=0;
  222. }

  223. void led(int i)
  224. {
  225.     P2 &= ~i;
  226.     delay(20);
  227.     P2 |= i;
  228.     delay(20);
  229.     P2 &= ~i;
  230. }

  231. int Hand(uchar *a)
  232. {
  233.     delay(10);
  234.     if(strstr(GsmRcv,a)!=NULL)        
  235.     {
  236.         g_timeout=0;
  237.         return 1;
  238.     }
  239.     if(g_timeout>50)
  240.     {
  241.         g_timeout=0;
  242.         return -1;
  243.     }
  244.     g_timeout++;
  245.     return 0;
  246. }


  247. void Init_GSM(void)
  248. {
  249.     clearBuff();         
  250.     Print_Str("AT&F\r\n");
  251.     led(0x01);            

  252.     while(strstr(GsmRcv,"OK")==NULL)   
  253.     {
  254.         delay(10);
  255.         led(0x01);
  256.         clearBuff();
  257.         Print_Str("AT&F\r\n");
  258.     }

  259.     led(0x02);      
  260.     {
  261.         clearBuff();
  262.         Print_Str("AT+CREG?\r\n");
  263.         led(0x04);
  264.         if((strstr(GsmRcv,"+CREG: 0,1") || strstr(GsmRcv,"+CREG: 0,5")))
  265.         {
  266.             clearBuff();
  267.             led(0x08)
  268.             break;
  269.         }
  270.         else
  271.         {
  272.             clearBuff();
  273.             led(0x04);
  274.             delay(50);
  275.         }
  276.     }

  277.     while(!Hand("OK")
  278.     {
  279.             Print_Str("AT+CMGD=1\r\n")
  280.             delay(10);
  281.     }
  282.     clearBuff();

  283.     while(!Hand("OK")
  284.     {
  285.             Print_Str("AT+CNMI=2,1\r\n")
  286.             delay(10);
  287.     }
  288.     clearBuff();

  289.     while(!Hand("OK")
  290.     {
  291.             Print_Str("AT+CMGF=1\r\n")
  292.             delay(10);
  293.     }
  294.     clearBuff();
  295. }

  296. void send_english(void)
  297. {
  298.     char temp[20];
  299.     memset(temp,0,20);
  300.     strcat(temp,"AT+CMGS=");
  301.     strcat(temp,CALL_YOU_TELNUMBER);
  302.     //strcat(temp,"\"")
  303.     strcat(temp,"\r\n");

  304.     P2=0XFF;
  305.     while(!Hand("OK")
  306.     {
  307.             Print_Str("AT+CMGF=1\r\n")
  308.             delay(50);
  309.     }
  310.     clearBuff();

  311.     Print_Str(temp);
  312.     led(0x02);
  313.     while(!Hand(">"))

  314.     Print_Str(SEND_MESSA_EN);
  315.     Print_Char(0x1A);   

  316.     led(0x04);
  317.     clearBuff();
  318. }


  319. void send_call(void)
  320. {
  321.     char temp[20];
  322.     memset(temp,0,20);
  323.     strcat(temp,"ATD");
  324.     strcat(temp,CALL_YOU_TELNUMBER);
  325.     strcat(temp,";\r\n"); //×é×°ATD18622944083;\r\n

  326.     clearBuff();
  327.     Print_Str(temp); //′òμç»°
  328.     clearBuff();
  329. }

  330. /*void hang_up(void)
  331. {
  332.     clearBuff();
  333.     Print_Str("ATH\r\n"); //′òμç»°
  334.     clearBuff();
  335. }*/

  336. void SendUDPMessage(char* pnum, char* context, void (*sendfun)(char*))
  337. {
  338.         unsigned char i=0,x=0;
  339.         unsigned char con_cnt[3] = {0,0,0};
  340.         unsigned char tabhex[] = "0123456789ABCDEF";
  341.         unsigned char num[13] = "";

  342.         strncpy(num, pnum, strlen(pnum));
  343.         for(i=0; num[i]!=0; i=i+2)
  344.         {
  345.                 if(num[i+1] == 0)
  346.                 {
  347.                         num[i+1] = 'F';
  348.                 }
  349.                 x = num[i];
  350.                 num[i] = num[i+1];
  351.                 num[i+1] = x;
  352.         }

  353.         (*sendfun)("AT+CMGF=0\r\n")[/i][/i][/i][i];[/i][i][i][i]
  354.         delay(50);
  355.         (*sendfun)("AT+CMGS=");

  356.         x = 15+strlen(context)/2;
  357.         con_cnt[0] = 0x30 + x/10;
  358.         con_cnt[1] = 0x30 + x%10;

  359.         (*sendfun)(con_cnt);
  360.         (*sendfun)("\r\n");
  361.         delay(50);
  362.         (*sendfun)("0011000D9168")
  363.         (*sendfun)(num);//·¢ËíoÅÂë
  364.         (*sendfun)("0008A0");

  365.         x = strlen(context)/2;
  366.         con_cnt[1] = tabhex[x&0x0f];
  367.         con_cnt[0] = tabhex[(x&0xf0)>>4];
  368.         (*sendfun)(con_cnt);

  369.         delay(50);
  370.         (*sendfun)(context);
  371.         con_cnt[0] = 0x1a;
  372.         con_cnt[1] = 0;
  373.         (*sendfun)(con_cnt)
  374.         delay(50);
  375.         clearBuff();
  376. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:249808 發(fā)表于 2017-12-1 20:58 | 只看該作者
之前有弄過!不過那是從朋友那里弄來的,現(xiàn)在好久沒弄這個(gè)了!
回復(fù)

使用道具 舉報(bào)

板凳
ID:232499 發(fā)表于 2017-12-6 15:04 | 只看該作者
LGH850 發(fā)表于 2017-12-1 20:58
之前有弄過!不過那是從朋友那里弄來的,現(xiàn)在好久沒弄這個(gè)了!

前段時(shí)間沒上,謝謝,問題現(xiàn)在已經(jīng)解決了。
回復(fù)

使用道具 舉報(bào)

地板
ID:262838 發(fā)表于 2017-12-17 20:37 | 只看該作者
你好 這個(gè)程序是可以通過發(fā)短信控制溫濕度的返回的嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:263980 發(fā)表于 2017-12-19 22:15 | 只看該作者
之前同學(xué)正好做了GSM模塊的51和15的程序移植,按他的話來說,51和15雖然程序都是兼容的,但是,在時(shí)序上要有所改變,他的原話就是GSM模塊從51到15,需要更改延遲函數(shù)的大小,我們初步研究覺得應(yīng)該是因?yàn)闀r(shí)序的關(guān)系
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 美女一区二区在线观看 | 日韩欧美在 | 日韩在线免费 | 国产一区亚洲 | 国产成人精品在线 | 国产精品久久久久久久一区探花 | 国产女人与拘做受视频 | 久久精品二区亚洲w码 | 精品国产91乱码一区二区三区 | 亚洲精品久久视频 | 精品在线一区二区三区 | 国产精品久久久久久久久久不蜜臀 | 狠狠干综合视频 | 草樱av| 精品香蕉一区二区三区 | 337p日本欧洲亚洲大胆精蜜臀 | 精品国产乱码久久久久久闺蜜 | 久久午夜视频 | 日本精品一区二区三区视频 | 国产一区二区在线视频 | 日韩精品一区二区三区中文字幕 | 好姑娘影视在线观看高清 | 精品久久久久久久久久久久 | 中文字幕免费视频 | 日韩精品一区二区三区中文在线 | 欧美一区二区在线观看 | 国产成人免费网站 | 久草.com | 精品综合久久久 | 亚洲天堂一区 | 亚洲视频在线观看 | 欧美一级欧美三级在线观看 | 日韩欧美一级 | 天天精品综合 | 国产欧美精品一区二区 | 日本久久黄色 | 久久精品亚洲一区二区三区浴池 | 91精品国产色综合久久不卡98口 | 国产精品久久久久久久久久久久久 | 国产一区二区三区网站 | 黄色大片网站 |