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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6396|回復: 14
打印 上一主題 下一主題
收起左側

GPRSA6-51單片機代碼(撥號,短信控制led燈等試驗程序)

  [復制鏈接]
跳轉到指定樓層
樓主
GPRSA6-51代碼(內有例程)

包含以下4個源碼:
1.撥號實驗
2.發送TEXT短信實驗
3.發送PDU中文短信
4.短信控制led燈

完整源碼下載:
GPRSA6-51代碼.zip (385.87 KB, 下載次數: 112)






短信控制led燈的單片機源碼(部分預覽):
  1. /**************************************************************
  2.          果云科技  GPRS A6  模塊      
  3.                                  
  4.           51 單片機例程       適用于 STC15F 系列
  5.                
  6.                 實驗內容 :  短信控制LED 燈


  7. UART1 映射到 P36 P37口      用手機分別發送   ledaon 、 ledaoff  、 ledbon 、ledboff   四條短信 分別來控制兩個LED亮滅   一定要區分大小寫
  8.                
  9. PS: A6模塊上電注冊是要一定的時間的!


  10. 串口1全雙工中斷方式收發通訊程序。本例程使用11.0592MHZ時鐘,如要改變,請修改下面的"定義主時鐘"的值并重新編譯。

  11. 串口設置為:115200,8,n,1.

  12. 通過PC向MCU發送數據, MCU收到后通過串口把收到的數據原樣返回.

  13. ******************************************/



  14. /*************        本地常量聲明        **************/
  15. #define MAIN_Fosc                11059200L        //定義主時鐘
  16. #define        BaudRate1                115200UL        //選擇波特率


  17. #define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重裝值, 對應300KHZ
  18. #define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 2 重裝值, 對應300KHZ

  19. #include "STC15Fxxxx.H"
  20. #include "delay.h"
  21. #include "string.h"
  22. #include "Exti.h"

  23. /*************        本地變量聲明        **************/

  24. #define Automatic_Startup 1     //定義自啟動 V1.2版本起有自啟動功能
  25. #define Buf1_Max 60                                           //串口1緩存長度
  26. #define Buf2_Max 60                                           //串口2緩存長度
  27. //串口1發送回車換行
  28. #define UART1_SendLR() UART1_SendData(0X0D);\
  29.                                                                                          UART1_SendData(0X0A)


  30. /*************        本地常量聲明        **************/
  31. //sbit RUNING_LED = P1^2;                                        //運行指示燈
  32. sbit LEDA                          = P1^3;                                        //測試用LED
  33. sbit LEDB       = P1^0;
  34. sbit LEDC       = P1^5;


  35. /*************  本地變量聲明        **************/
  36. xdata u8 Uart1_Buf[Buf1_Max];
  37. u8 Register_Flag=0;  //A6  注冊標志位  1 :注冊成功  3:注冊失敗   5:注冊成功,但處于漫游狀態下,無法撥打電話發短信
  38. u8 Times=0,First_Int = 0,shijian=0;


  39. bdata u8 Flag;//定時器標志位
  40. sbit Timer0_start =Flag^0;        //定時器0延時啟動計數器


  41. /*************        本地函數聲明        **************/
  42. void USART1_Init(void);   //串口1初始化
  43. void Timer0Init(void);                //20毫秒@11.0592MHz
  44. void CLR_Buf1(void);      //清串口接收緩存
  45. u8 Find(u8 *a);           //查找字符串
  46. void Second_AT_Command(u8 *b,u8 *a,u8 wait_time) ;//a6 at命令發送
  47. void Set_TEXT_Mode(void);
  48. void Check_New_Message(void);
  49. void UART1_SendData(u8 dat);//串口1發送 1字節
  50. void UART1_SendString(char *s);//串口1發送 字符串
  51. void Wait_CREG(void);


  52. /**********************************************/
  53. void main(void)
  54. {
  55.   USART1_Init();//串口初始化
  56.         Timer0Init();//TIM0初始化
  57.         Wait_CREG();//等待GSM注冊成功
  58.         Set_TEXT_Mode();//設置為TEXT模式
  59.   
  60.         while (1)
  61.         {
  62.     Check_New_Message();//短信檢測
  63.                  
  64.         }
  65. }

  66. /********************* UART1中斷函數************************/
  67. void UART1_int (void) interrupt UART1_VECTOR
  68. {
  69.         if (RI)
  70.     {
  71.       RI = 0;                           //清除RI位
  72.                         Uart1_Buf[First_Int] = SBUF;            //將接收到的字符串存到緩存中
  73.                         First_Int++;                                        //緩存指針向后移動
  74.                         if(First_Int > Buf1_Max)                       //如果緩存滿,將緩存指針指向緩存的首地址
  75.                         {
  76.                                 First_Int = 0;
  77.                         }
  78.     }
  79.     if (TI)
  80.     {
  81.         TI = 0;                          //清除TI位
  82.     }
  83. }

  84. void USART1_Init(void)
  85. {
  86.         S1_8bit();                                //8位數據
  87.         //S1_USE_P30P31();                //UART1 使用P30 P31口        默認
  88.         S1_USE_P36P37();                //UART1 使用P36 P37口
  89.         //S1_USE_P16P17();                //UART1 使用P16 P17口
  90.         AUXR &= ~(1<<4);        //Timer stop                波特率使用Timer2產生
  91.         AUXR |= 0x01;                //S1 BRT Use Timer2;
  92.         AUXR |=  (1<<2);        //Timer2 set as 1T mode
  93.         TH2 = (u8)(Timer2_Reload >> 8);
  94.         TL2 = (u8)Timer2_Reload;
  95.         AUXR |=  (1<<4);        //Timer run enable

  96.         REN = 1;        //允許接收
  97.         ES  = 1;        //允許中斷

  98.         EA = 1;                //允許全局中斷
  99.        

  100. }


  101. /*******************************************************************************
  102. * 函數名 : Timer0Init
  103. * 描述   : 定時器0初始化,20ms定時
  104. * 輸入   :
  105. * 輸出   :
  106. * 返回   :
  107. * 注意   :
  108. *******************************************************************************/
  109. void Timer0Init(void)                //20毫秒@11.0592MHz
  110. {
  111.         AUXR &= 0x7F;                //定時器時鐘12T模式
  112.         TMOD &= 0xF0;                //
  113.         TMOD |= 0x01;                //設置定時器模式,16位定時器
  114.         TL0 = 0x70;                  //設置定時器初值
  115.         TH0 = 0xFC;                  //設置定時器初值
  116.         TF0 = 0;                    //清TF0標志
  117.         TR0 = 1;                    //定時器0開始計時
  118.         ET0 = 1;              //使能定時器0中斷
  119. }

  120. /*******************************************************************************
  121. * 函數名 : CLR_Buf1
  122. * 描述   : 清除串口2緩存數據
  123. * 輸入   :
  124. * 輸出   :
  125. * 返回   :
  126. * 注意   :
  127. *******************************************************************************/
  128. void CLR_Buf1(void)
  129. {
  130.         u16 k;
  131.         for(k=0;k<Buf1_Max;k++)      //將緩存內容清零
  132.         {
  133.                 Uart1_Buf[k] = 0x00;
  134.         }
  135.     First_Int = 0;              //接收字符串的起始存儲位置
  136. }



  137. /*******************************************************************************
  138. * 函數名 : Find
  139. * 描述   : 判斷緩存中是否含有指定的字符串
  140. * 輸入   :
  141. * 輸出   :
  142. * 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
  143. * 注意   :
  144. *******************************************************************************/

  145. u8 Find(u8 *a)
  146. {
  147.   if(strstr(Uart1_Buf,a)!=NULL)
  148.             return 1;
  149.         else
  150.                         return 0;
  151. }

  152. /*******************************************************************************
  153. * 函數名 : Second_AT_Command
  154. * 描述   : 發送AT指令函數
  155. * 輸入   : 發送數據的指針、希望收到的應答、發送等待時間(單位:S)
  156. * 輸出   :
  157. * 返回   :
  158. * 注意   :
  159. *******************************************************************************/

  160. void Second_AT_Command(u8 *b,u8 *a,u8 wait_time)         
  161. {
  162.         u8 i;
  163.         u8 *c;
  164.         c = b;                                                                                //保存字符串地址到c
  165.         CLR_Buf1();
  166.   i = 0;
  167.         while(i == 0)                    
  168.         {
  169.                
  170.                 if(!Find(a))            //查找需要應答的字符
  171.                 {
  172.                         if(Timer0_start == 0)
  173.                         {
  174.                                 b = c;                                                        //將字符串地址給b
  175.                                 for (b; *b!='\0';b++)
  176.                                 {
  177.                                         UART1_SendData(*b);
  178.                                 }
  179.                                 UART1_SendLR();       
  180.                                 Times = 0;
  181.                                 shijian = wait_time;
  182.                                 Timer0_start = 1;
  183.                    }
  184.     }
  185.           else
  186.                 {
  187.                         i = 1;
  188.                         Timer0_start = 0;
  189.                 }
  190.         }
  191.         CLR_Buf1();
  192. }
  193. /*******************************************************************************
  194. * 函數名 : Set_PDU_Mode
  195. * 描述   : 設置短信為PDU模式
  196. * 輸入   :
  197. * 輸出   :
  198. * 返回   :
  199. * 注意   :
  200. *******************************************************************************/
  201. void Set_TEXT_Mode(void)
  202. {
  203.         Second_AT_Command("ATE0","OK",3);                                                                                  //取消回顯       
  204.         Second_AT_Command("AT+CNMI=3,2,0,0,0","OK",3);                                                        //新短信直接輸出
  205.         Second_AT_Command("AT+CMGF=1","OK",3);                                                                //TEXT模式       
  206.         Second_AT_Command("AT+CPMS=\"SM\",\"SM\",\"SM\"","OK",3);                //所有操作都在SIM卡中進行       

  207. }

  208. /*******************************************************************************
  209. * 函數名 : Check_Message_rec
  210. * 描述   : 檢查是否有新信息,并執行信息內容指令
  211. * 輸入   :
  212. * 輸出   :
  213. * 返回   :
  214. * 注意   :
  215. ******************************************************************************/

  216. void Check_New_Message(void)
  217. {
  218.         u8 temp=0;
  219.         if(strstr(Uart1_Buf,"+CMT")!=NULL)                   //若緩存字符串中含有"+CMT"就表示有新的短信
  220.         {
  221.                 delay_ms(5);//等待數據全部接收完成
  222.                 if(strstr(Uart1_Buf,"ledaon")!=NULL)
  223.                 {
  224.                         LEDA=0;
  225.                 }
  226.                 if(strstr(Uart1_Buf,"ledaoff")!=NULL)
  227.                 {
  228.                         LEDA=1;
  229.                 }       
  230.                 if(strstr(Uart1_Buf,"ledbon")!=NULL)
  231.                 {
  232.                         LEDB=0;
  233.                 }
  234.                 if(strstr(Uart1_Buf,"ledboff")!=NULL)
  235.                 {
  236.                         LEDB=1;
  237.                 }       
  238.                 CLR_Buf1();
  239.                 Second_AT_Command("AT+CMGD=1,4","OK",3);//刪除短信
  240.         }
  241. }

  242. /*******************************************************************************
  243. * 函數名 : Wait_CREG
  244. * 描述   : 等待模塊注冊成功
  245. * 輸入   :
  246. * 輸出   :
  247. * 返回   :
  248. * 注意   :
  249. *******************************************************************************/
  250. void Wait_CREG(void)
  251. {
  252.         u8 i;
  253.         u8 k;
  254.         i = 0;
  255.         CLR_Buf1();
  256.   while(i == 0)                               
  257.         {
  258.    
  259.                 CLR_Buf1();        
  260.                 UART1_SendString("AT+CREG?");
  261.                 UART1_SendLR();
  262.                 delay_ms(100);
  263.                
  264.             for(k=0;k<Buf1_Max;k++)                             
  265.             {
  266.                         if((Uart1_Buf[k] == 'C')&&(Uart1_Buf[k+1] == 'R')&&(Uart1_Buf[k+2] == 'E')&&(Uart1_Buf[k+3] == 'G')&&(Uart1_Buf[k+4] == ':'))
  267.                         {
  268.                                          
  269.                                 if((Uart1_Buf[k+8] == '1')&&(Uart1_Buf[k+9] != '3'))
  270.                                 {
  271.                                         i = 1;
  272.                                         Register_Flag=1;
  273.                                         LEDB =0;
  274.                                   break;
  275.                                 }
  276.         if((Uart1_Buf[k+8] == '1')&&(Uart1_Buf[k+9] == '3'))
  277.                                 {
  278.                                         i = 1;
  279.                                         Register_Flag=3;
  280.                                         LEDA =0;
  281.                                   break;
  282.                                 }       
  283.                           if(Uart1_Buf[k+8] == '5')
  284.                                 {
  285.                                         i = 1;
  286.                                         Register_Flag=5;
  287.                                         LEDC =0;
  288.                                   break;
  289.                                 }       
  290.                                
  291.                         }
  292.                 }
  293.                
  294.         }
  295. }



  296. /*----------------------------
  297. UART1 發送串口數據
  298. -----------------------------*/
  299. void UART1_SendData(u8 dat)
  300. {
  301.         ES=0;                                        //關串口中斷
  302.         SBUF=dat;                       
  303.         while(TI!=1);        //等待發送成功
  304.         TI=0;                                        //清除發送中斷標志
  305.         ES=1;                                        //開串口中斷
  306. }
  307. /*----------------------------
  308. UART1 發送字符串
  309. -----------------------------*/
  310. void UART1_SendString(char *s)
  311. {
  312.         while(*s)//檢測字符串結束符
  313.         {
  314.                 UART1_SendData(*s++);//發送當前字符
  315.         }
  316. }



  317. /*******************************************************************************
  318. * 函數名 : Timer0_ISR
  319. * 描述   : 定時器0中斷服務入口函數,1ms中斷一次
  320. * 輸入   :
  321. * 輸出   :
  322. * 返回   :
  323. * 注意   :
  324. *******************************************************************************/
  325. void Timer0_ISR() interrupt 1
  326. {
  327.         static u8 Time_count=0;
  328.         TR0=0;//關定時器
  329.         TL0 = 0x70;                //重設定時器初值
  330.         TH0 = 0xFC;                //重設定時器初值
  331.        
  332.        
  333.        
  334.         Time_count++;
  335.         if(Time_count>=50)
  336.         {
  337.                 Time_count = 0;
  338.                 if(count_20ms) //20ms延時計數器
  339.                 count_20ms--;
  340.         }
  341.        
  342.         if(Timer0_start)
  343.           Times++;
  344.         if(Times > (50*shijian))
  345.         {
  346.                 Timer0_start = 0;
  347.                 Times = 0;
  348.         }
  349.         TR0=1;//開定時器
  350. }

復制代碼


評分

參與人數 1黑幣 +1 收起 理由
en_568 + 1 贊一個!

查看全部評分

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

使用道具 舉報

沙發
ID:47286 發表于 2017-4-2 19:02 | 只看該作者
太棒了 我剛買了個A6
回復

使用道具 舉報

板凳
ID:194622 發表于 2017-5-6 01:16 | 只看該作者
好啊,雪中送炭
回復

使用道具 舉報

地板
ID:197367 發表于 2017-5-6 16:16 | 只看該作者
你們實現單片機控制了嗎
回復

使用道具 舉報

5#
ID:202756 發表于 2017-5-20 08:46 | 只看該作者
你好請問一下:GPRS A6  如何驗證  我用a6模塊跟arduino連接    測試的時候沒反應   接線也是正確的 不知道為什么  
回復

使用道具 舉報

6#
ID:212625 發表于 2017-6-22 10:34 | 只看該作者
太棒了   網上沒有這方面的資料
回復

使用道具 舉報

7#
ID:231277 發表于 2017-9-5 22:58 | 只看該作者
證想做這個呢,先參考了謝謝,萬分感謝,
回復

使用道具 舉報

8#
ID:231284 發表于 2017-9-5 23:21 | 只看該作者
謝謝分享
回復

使用道具 舉報

9#
ID:82765 發表于 2017-9-6 07:49 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

10#
ID:239519 發表于 2017-10-14 22:28 | 只看該作者
謝謝樓主分享,剛好需要用到,太感謝了。
回復

使用道具 舉報

11#
ID:233225 發表于 2017-11-15 13:40 | 只看該作者
666,希望可以用下
回復

使用道具 舉報

12#
ID:270999 發表于 2018-1-3 19:42 | 只看該作者
很棒,謝謝分享
回復

使用道具 舉報

13#
ID:268524 發表于 2018-1-3 20:53 | 只看該作者
想做這個呢,先參考了謝謝,萬分感謝,
回復

使用道具 舉報

14#
ID:165122 發表于 2018-2-17 22:30 | 只看該作者
太棒啦,正好可以學習一下!
回復

使用道具 舉報

15#
ID:165122 發表于 2018-2-17 22:30 | 只看該作者
太棒啦,正好可以學習一下。感謝分享!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美综合 | 国产精品久久久久无码av | 高清黄色网址 | 欧美国产激情 | 日韩精品一区二区在线 | 亚洲第一av网站 | 精品久久久一区 | 福利社午夜影院 | 国产精品乱码一区二区三区 | 中文字幕在线精品 | 天堂资源最新在线 | 在线播放中文字幕 | 午夜男人免费视频 | 亚洲激精日韩激精欧美精品 | 精品视频在线观看 | 国产视频精品在线 | 欧美不卡网站 | 成人免费观看男女羞羞视频 | 蜜臀久久 | 精品国产欧美 | 久久51| 免费一级黄色 | 日韩国产免费 | 秋霞电影一区二区 | 久久久久久久一区二区三区 | 亚洲一区二区视频 | 亚洲一区二区av | 欧美成人免费 | 国产激情视频网址 | 亚洲影音 | 人人九九精 | 免费视频久久 | 色婷婷亚洲国产女人的天堂 | 国内精品免费久久久久软件老师 | 欧美日韩电影免费观看 | 毛片1 | 久久com| 青春草91| 久久久久国产一区二区三区 | 日韩在线免费电影 | 免费看黄色国产 |