微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 群发短信的C代码案例(CC2530)

群发短信的C代码案例(CC2530)

时间:10-02 整理:3721RD 点击:

       群发短信的C代码案例(CC2530)




           这是一个基于CC2530和SIM900A的群发短信的C程序代码。用GPRS群发短信的代码,是学习CC2530的时候编写的一个程序。

  1. /*******************************************************************************
  2. * 头文件
  3. */
  4. #include "hal_board.h"
  5. #include "string.h"
  6. /*******************************************************************************
  7. * 头文件
  8. */
  9. #include "hal_cc8051.h"
  10. #include "hal_mcu.h"
  11. /*******************************************************************************
  12. * 常数
  13. */
  14. #define UART_TX_SIZE      40
  15. #define UART_RX_SIZE      40

  16. /*******************************************************************************
  17. * 宏定义
  18. */

  19. /*******************************************************************************
  20. * 类型定义
  21. */
  22. #define PHONE0  "AT+CMGS="15527072779"r"//号码0
  23. #define PHONE1  "AT+CMGS="13308642919"r"//号码1
  24. #define PHONE3  "AT+CMGS="AT+CNUM"r"//获得本机号码,未测试

  25. #define MESSAGE0  "the temperature is normal !r"//信息0
  26. #define MESSAGE1  "the temperature go beyond the limit !r"//信息1
  27. #define PHONE_NUMBER   3
  28. #define NORMAL_MASSAGE  0
  29. #define ALARM_MASSAGE  1

  30. /*******************************************************************************
  31. * 变量
  32. */
  33. char __xdata BAUD[] = {"AT+IPR=9600r"};
  34. char __xdata AT0[] = {"ATr"};
  35. char __xdata AT[] = {"ATr"};
  36. char __xdata CMGF[] = {"AT+CMGF=1r"};
  37. char __xdata CSCS[] = {"AT+CSCS="GSM"r"};
  38. char __xdata CMGS[PHONE_NUMBER][23]={PHONE0,PHONE1};//电话号码数组
  39. char __xdata MESSAGE[PHONE_NUMBER][100]= {MESSAGE0,MESSAGE1};//信息数组
  40. char __xdata CTRL_Z[1] = {0x1A};
  41. char __xdata RSP[] = {"rrnOKrn"};
  42. /*******************************************************************************
  43. * 函数原型
  44. */
  45. void APP_REQ(char *ch,uint16 chLen);
  46. void delay(uint16 count);
  47. /*******************************************************************************
  48. * 常数
  49. */
  50. #define RX_BUF_READ_PERIOD    750


  51. /*******************************************************************************
  52. * 变量
  53. */
  54. uint8 uartRxIndex;
  55. uint16 timeCount;
  56. uint16 timeout;
  57. uint8 timerFlag;
  58. uint8 situation=1;//根据信息判断取值

  59. char __xdata uartTxBuf[UART_TX_SIZE];
  60. char __xdata uartRxBuf[UART_RX_SIZE];
  61. /*******************************************************************************
  62. * 函数
  63. */
  64. void SEND_MESSAGE(void)
  65. {
  66.     HAL_Init_Uart0();
  67.     HAL_Init_Timer4();
  68.     HAL_TIME_4_START();
  69.     HAL_INT_ON();
  70.     APP_REQ(AT0,sizeof(AT0));
  71.     APP_REQ(AT,sizeof(AT));
  72.     APP_REQ(CMGF,sizeof(CMGF));
  73.     APP_REQ(CSCS,sizeof(CSCS));
  74.   for(int i=0;i<PHONE_NUMBER;i++)
  75.     {
  76.       APP_REQ(CMGS[i],sizeof(CMGS[i]));
  77.       delay(2);
  78.       if(situation)
  79.       {
  80.       APP_REQ(MESSAGE[NORMAL_MASSAGE],sizeof(MESSAGE[NORMAL_MASSAGE]));
  81.       }
  82.       else
  83.       {
  84.        APP_REQ(MESSAGE[ALARM_MASSAGE],sizeof(MESSAGE[ALARM_MASSAGE]));
  85.       }
  86.       APP_REQ(CTRL_Z,sizeof(CTRL_Z));
  87.       delay(20);
  88.     }
  89. }

  90. void APP_REQ(char *ch,uint16 chLen)
  91. {
  92.     HAL_Send_Uart0(ch, chLen);
  93.     while(!timerFlag);
  94.     timerFlag = FALSE;
  95.     HAL_TIME_4_START();
  96.     memset(uartRxBuf, 0x00, UART_RX_SIZE);
  97.     uartRxIndex = 0;
  98. }
  99. void delay(uint16 count)
  100. {
  101.   while(count)
  102.       {
  103.       HAL_Wait_Ms(1000);
  104.       count--;
  105.       }
  106. }
  107. #pragma vector = URX0_VECTOR
  108. __interrupt void UART0_RX_ISR(void)
  109. {
  110.     URX0IF = 0;
  111.     U0CSR &= ~U0CSR_RE;
  112.     uartRxBuf[uartRxIndex++] = U0DBUF;
  113.     U0CSR |= U0CSR_RE;
  114. }

  115. HAL_ISR_FUNCTION(HAL_Timer4_Isr, T4_VECTOR)
  116. {
  117.     HAL_TIME_4_DISABLE_INT();
  118.     timeCount++;

  119.     if(timeCount >= RX_BUF_READ_PERIOD)
  120.     {
  121.         timeCount = 0;
  122.         timerFlag = TRUE;
  123.         HAL_TIME_4_STOP();
  124.     }

  125.     HAL_TIME_4_CLEAR_INT();
  126.     HAL_TIME_4_ENABLE_INT();
  127. }

复制代码


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top