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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7177|回復: 2
打印 上一主題 下一主題
收起左側(cè)

單片機,ARM與SIM900A GPRS模塊通信源碼資料與工具大全

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:76181 發(fā)表于 2018-5-30 13:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
經(jīng)測試有用


電路原理圖如下:


默認模塊開機自啟動
如果想要用控制器的IO控制模塊啟動與關(guān)閉
可以將模塊上的R25去掉 此時模塊為手動啟動
將單片機的IO 連接到REST ART管腳
給模塊一個》=1秒的高電平,模塊就會啟動 再給一個》=1秒的高電平,模塊就會關(guān)閉。
詳見SIM900A硬件設(shè)計手冊

列表:
10, 常見功能,常用資料匯總
12,調(diào)試教程  必看資料
13,原理圖
1,AT指令集
3,SIM900A 串口助手和源碼
5,彩信資料
6,程序
8,調(diào)試工具


我們給的STM32示例程序是正點原子的STM32代碼。
我們自認為寫的軟件沒有正點原子給的示例代碼嚴謹、高效,所以將其代碼原封不動共享。
由于正點原子配套的GSM開發(fā)板硬件平臺與我們提供的GSM板硬件平臺一致,所以,代碼中GSM板驅(qū)動可以完全放在我們GSM板中。


下面是51單片機的源碼:
  1. /************************************************************
  2. 程序說明:
  3. 首先要確定模塊已經(jīng)注冊到網(wǎng)絡(luò)
  4. 然后正確的硬件連接   P3.0-----STXD或者5VT   P3.1-----SRXD或者5VR   GND---GND(只要保證公地即可,沒必要單獨接一次)
  5. 然后確認你單片機上的晶振,根據(jù)晶振修改自己的程序。
  6. 推薦先將單片機與電腦相連,確定單片機發(fā)送的數(shù)據(jù)是正確的。如果發(fā)送的是亂碼,請檢查晶振與單片機的串口波特率。
  7. 如果通過以上幾條還解決不了問題,請看群共享文件 AN0004 。

  8. *************************************************************/
  9. #include <REG51.H>
  10. #include <string.H>
  11. #define uchar unsigned char
  12. #define uint unsigned int
  13. //以下是板子上LED的配置,把Px_x改成自己對應(yīng)的腳。LED 只是用來提示,非必須。
  14. //以下是你的51單片機的晶振大小

  15. sbit P10=P1^0;
  16. sbit P11=P1^1;
  17. sbit P12=P1^2;
  18. sbit P13=P1^3;
  19. sbit P14=P1^4;
  20. sbit P15=P1^5;

  21. #define FOSC_110592M
  22. //#define FOSC_12M
  23. //以下是開機后撥打的手機號,改成自己想要打的號碼即可。
  24. uchar num[] = "ATD10086;\r\n";
  25. //以下是GSM模塊返回數(shù)據(jù)
  26. uchar rec_data[50];
  27. uchar rec_num;
  28. //注意,無論接收到信號還是發(fā)送完信號,都會進中斷服務(wù)程序的
  29. /*初始化程序(必須使用,否則無法收發(fā)),次程序?qū)褂枚〞r器1*/
  30. void SerialInti()//初始化程序(必須使用,否則無法收發(fā))
  31. {
  32.         TMOD=0x20;//定時器1操作模式2:8位自動重載定時器

  33. #ifdef FOSC_12M                   //在這里根據(jù)晶振大小設(shè)置不同的數(shù)值初始化串口
  34.         TH1=0xf3;//裝入初值,波特率2400
  35.         TL1=0xf3;        
  36. #else         
  37.         TH1=0xfd;//裝入初值,波特率9600
  38.         TL1=0xfd;
  39. #endif //end of SOC_12M
  40.         
  41.         TR1=1;//打開定時器
  42.         SM0=0;//設(shè)置串行通訊工作模式,(10為一部發(fā)送,波特率可變,由定時器1的溢出率控制)
  43.         SM1=1;//(同上)在此模式下,定時器溢出一次就發(fā)送一個位的數(shù)據(jù)
  44.         REN=1;//串行接收允許位(要先設(shè)置sm0sm1再開串行允許)
  45.         EA=1;//開總中斷
  46.         ES=1;//開串行口中斷        
  47. }

  48. /*串行通訊中斷,收發(fā)完成將進入該中斷*///如:+CMTI:"SM",2
  49. void Serial_interrupt() interrupt 4
  50. {

  51.         uchar temp;
  52.         temp=SBUF;
  53.         rec_data[rec_num++]=temp;
  54.         if(rec_num>=50)
  55.                 rec_num=0;
  56.         else
  57.                 ;
  58.         RI=0;//接收中斷信號清零,表示將繼續(xù)接收

  59. }

  60. //串行口連續(xù)發(fā)送char型數(shù)組,遇到終止號/0將停止
  61. void Uart1Sends(uchar *str)
  62. {
  63.         while(*str!='\0')
  64.         {
  65.                 SBUF=*str;
  66.                 while(!TI);//等待發(fā)送完成信號(TI=1)出現(xiàn)
  67.                 TI=0;
  68.                 str++;
  69.         }
  70. }
  71. void Uart1BYTE(uchar temp)
  72. {
  73.                 SBUF=temp;
  74.                 while(!TI);//等待發(fā)送完成信號(TI=1)出現(xiàn)
  75.                 TI=0;

  76. }

  77. uchar hand(uchar *ptr)
  78. {
  79.         if(strstr(rec_data,ptr)!=NULL)
  80.                 return 1;
  81.         else
  82.                 return 0;
  83. }

  84. void clear_rec_data()
  85. {
  86.         uchar i;
  87.         for(i=0;i<strlen(rec_data);i++)
  88.         {
  89.                 rec_data[i]='0';
  90.         
  91.         }
  92.         rec_num=0;


  93. }
  94. //延時函數(shù)大概是1s鐘,不過延時大的話不準...
  95. void DelaySec(int sec)
  96. {
  97.         uint i , j= 0;

  98.         for(i=0; i<sec; i++)
  99.         {
  100.                 for(j=0; j<65535; j++)
  101.                 {        
  102.                 }
  103.         }
  104. }

  105. void main()
  106. {
  107.         uchar i = 0;
  108.         SerialInti();
  109.         Uart1Sends("AT\r\n"); //同步波特率,如果將模塊配置固定波特率,此條指令就不需要發(fā)了
  110.         while(!hand("OK"))
  111.         {
  112.                 clear_rec_data();
  113.                 i++;
  114.                 Uart1Sends("AT\r\n");//
  115.                 DelaySec(1);//延時
  116.                 if(i>=5)
  117.                 {
  118.                         break;
  119.                         //return;
  120.                 }
  121.                 else
  122.                         ;
  123.         }
  124.         Uart1Sends("AT\r\n"); //同步波特率,如果將模塊配置固定波特率,此條指令就不需要發(fā)了
  125.         while(!hand("OK"))
  126.         {
  127.                 clear_rec_data();
  128.                 i++;
  129.                 Uart1Sends("AT\r\n");//
  130.                 DelaySec(1);//延時
  131.                 if(i>=5)
  132.                 {
  133.                         break;
  134.                         //return;
  135.                 }
  136.                 else
  137.                         ;
  138.         }
  139.         Uart1Sends("ATI\r\n"); //握手
  140.         while(!hand("OK"))
  141.         {
  142.                 clear_rec_data();
  143.                 i++;
  144.                 Uart1Sends("ATI\r\n");//
  145.                 DelaySec(1);//延時
  146.                 if(i>=5)
  147.                 {
  148.                         break;
  149.                         //return;
  150.                 }
  151.                 else
  152.                         ;
  153.         }
  154.         P10=0;
  155.         clear_rec_data();//刪除存儲的GSM模塊返回的數(shù)據(jù),以便于以后繼續(xù)判斷
  156.         DelaySec(1);//延時
  157.         Uart1Sends("AT+CSQ\r\n");//信號質(zhì)量
  158.         DelaySec(1);//延時
  159.         i=0;
  160.         while(!hand("OK")) //檢測此條指令GSM模塊是否執(zhí)行OK
  161.         {
  162.                 clear_rec_data();
  163.                 i++;
  164.                 Uart1Sends("AT+CSQ\r\n");//
  165.                 DelaySec(1);//延時
  166.                 if(i>=5)
  167.                 {
  168.                         break;
  169.                         //return;
  170.                 }
  171.         }
  172.         P11=0;
  173.         clear_rec_data();
  174.         DelaySec(1);//延時
  175.         Uart1Sends("AT+CPIN?\r\n");//查看是否讀到手機卡
  176.         DelaySec(1);//延時
  177.         i=0;
  178.         while(!hand("READY")) //檢測SIM模塊是否收到SIM卡READY
  179.         {
  180.                 clear_rec_data();
  181.                 i++;
  182.                 Uart1Sends("AT+CPIN?\r\n");//是否注冊到網(wǎng)絡(luò)
  183.                 DelaySec(1);//延時
  184.                 if(i>=5)
  185.                 {
  186.                         break;
  187.                         //return;
  188.                 }
  189.                 else
  190.                         ;               
  191.         }
  192.         P12=0;
  193.         Uart1Sends("AT+COPS?\r\n");//是否注冊到網(wǎng)絡(luò)
  194.         DelaySec(1);//延時
  195.         i=0;
  196.         while(!hand("CHINA")) //檢測是否收到模塊返回的CHINA
  197.         {
  198.                 clear_rec_data();
  199.                 i++;
  200.                 Uart1Sends("AT+COPS?\r\n");//是否注冊到網(wǎng)絡(luò)
  201.                 DelaySec(1);//延時
  202.                 if(i>=5)
  203.                 {
  204.                         break;
  205.                         //return;
  206.                 }
  207.                 else
  208.                         ;               
  209.         }
  210.         P13=0;
  211.         clear_rec_data();
  212.         DelaySec(1);//延時
  213. //以下是發(fā)送英文短信短信
  214.         Uart1Sends("AT+CSCS=\"GSM\"\r\n"); //
  215.         DelaySec(1);//延時
  216.         Uart1Sends("AT+CSCA?\r\n"); //短信中心號碼
  217.         DelaySec(1);//延時
  218.         Uart1Sends("AT+CMGF=1\r\n");  //方式1
  219.         DelaySec(1);//延時
  220.         Uart1Sends("AT+CMGS=\"10086\"\r\n");  //此處修改短信接收方電話號
  221.         DelaySec(1);//延時
  222.         Uart1Sends("ye");  //此處修改短信內(nèi)容
  223.         DelaySec(1);//延時
  224.         Uart1BYTE(0X1A);
  225.         DelaySec(1);//延時
  226.         DelaySec(1);//延時
  227.         DelaySec(1);//延時
  228.         DelaySec(1);//延時
  229.         P14=0;
  230. //發(fā)送英文短信結(jié)束
  231.         Uart1Sends("AT+CMGD=1,4\r\n");//刪除SIM卡中的內(nèi)容
  232.         DelaySec(1);//延時
  233.         //以下是撥打10086代碼
  234.         Uart1Sends(num);  //撥打10086
  235.         DelaySec(1);//延時
  236.         DelaySec(1);//延時
  237.         DelaySec(1);//延時
  238.         DelaySec(1);//延時
  239.         //撥打電話代碼結(jié)束
  240.         //以下內(nèi)容沒有實際測試,僅供參考
  241.         while(1)
  242.         {
  243.                 if(hand("CMTI"))
  244.                 {
  245.                         P13=0;
  246.                         clear_rec_data();
  247.                         DelaySec(1);//延時
  248.                         Uart1Sends("AT+CMGR=1\r\n");//
  249.                         DelaySec(1);//延時
  250.                         i=0;
  251.                         while(!hand("OK"))
  252.                         {
  253.                                 clear_rec_data();
  254.                                 i++;
  255.                                 Uart1Sends("AT+CMGR=1,4\r\n");//
  256.                                 DelaySec(1);//延時
  257.                                 if(i>=2)   //chucuo
  258.                                 {
  259.                                         break;
  260.                                         //return;
  261.                                 }
  262.                                 else
  263.                                         ;               
  264.                         }
  265.                         clear_rec_data();
  266.                         DelaySec(1);//延時
  267.                         if(hand("relay on"))
  268.                         {
  269.                                 P14=0;
  270.                                 //break;
  271.                         }
  272.                         else if(hand("relay off"))
  273.                         {
  274.                                 
  275.                                 P15=0;
  276.                                 //break;
  277.                         }
  278.                         else
  279.                         {
  280.                                 //break;
  281.                         }
  282.                         Uart1Sends("AT+CMGD=1,4\r\n");//
  283.                         DelaySec(1);//延時

  284.                
  285.                 }
  286.                 else if(hand("ring")) //電話進來 掛斷電話
  287.                 {
  288.                         
  289.                         Uart1Sends("ATH\r\n");//
  290.                         DelaySec(1);//延時
  291.                         i=0;
  292.                         while(!hand("OK"))
  293.                         {
  294.                                 clear_rec_data();
  295.                                 i++;
  296.                                 Uart1Sends("ATH\r\n");//
  297.                                 DelaySec(1);//延時
  298.                                 if(i>=2)
  299.                                 {
  300.                                         break;
  301.                                         //return;
  302.                                 }
  303.                                 else
  304.                                         ;               
  305.                         }
  306.                         clear_rec_data();
  307.                         DelaySec(1);//延時               
  308.         
  309.                 }
  310.                 else
  311.                 {
  312.                         ;
  313.                 }
  314.         }

  315.         


  316. }
復制代碼

資料列表:
AN0020-sim900-SIM800系列模塊獲取時間方法.pdf
AN_SIM900_FTP_HTTP_AT_COMMANDS_USER_GUIDE_beta—V1.00.pdf
SIM800-DTMF.pdf
sim900a  TCP 應(yīng)用.pdf
SIM900_HTTPS AT Command Set_V1 00.pdf
SIM900_TTS_Application Note_V1.05--要專門TTS軟件版本才可以.pdf
非常重要SIM900A短信例程.pptx

AN0021 SIM800-SIM900系列開發(fā)板調(diào)試.pdf
sim900 v3.8.2 與USB-TTL模塊連接.jpg
必看1 SIM900AminiTTL接口電平介紹.docx
必看2-全球鷹 sim900 V3.8.2 用戶手冊v1.2.pdf
必看3 SIM900A 各功能指令 詳細版.ppt

全部資料51hei下載地址:
SIM900V程序.rar (17.87 MB, 下載次數(shù): 127)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:347732 發(fā)表于 2018-6-8 17:02 | 只看該作者
大佬啊
回復

使用道具 舉報

板凳
ID:601236 發(fā)表于 2019-8-18 09:37 | 只看該作者
感謝 資料 非常有幫助  買的模塊沒有給資料   謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩欧美在线观看 | 丝袜一区二区三区 | 天天综合久久 | 精品日本久久久久久久久久 | 国产成人精品免费视频大全最热 | 亚洲一区二区三区免费在线 | 国产精品午夜电影 | 日韩精品一区二区三区免费视频 | 女人精96xxx免费网站p | 在线视频亚洲 | 久久久精品一区 | 国产精品视频一区二区三区四区国 | 欧美成年人视频在线观看 | 国产成人精品一区二区三区四区 | 亚洲一区二区三区在线视频 | 国产成人精品久久 | 中文字幕韩在线第一页 | 亚洲国产精品人人爽夜夜爽 | 日本不卡一区二区三区 | 日本黄色不卡视频 | 久久影音先锋 | 国产日韩欧美在线播放 | 日本一区二区三区四区 | 欧美久久精品一级黑人c片 91免费在线视频 | 羞羞视频免费在线观看 | 国产成人综合一区二区三区 | 日韩伦理一区二区 | 天天综合网7799精品 | 在线看av网址 | 天天躁日日躁aaaa视频 | 亚洲国产日本 | 欧美午夜精品理论片a级按摩 | 国产欧美日韩综合精品一区二区 | 国际精品鲁一鲁一区二区小说 | 91九色视频 | 国产精品久久久亚洲 | 亚洲天堂影院 | 狠狠操电影 | 国产伦精品一区二区三区照片91 | 欧美一级片在线看 | 久久久久久国产精品免费免费 |