群发短信的C代码案例(CC2530)
时间:10-02
整理:3721RD
点击:
群发短信的C代码案例(CC2530)
这是一个基于CC2530和SIM900A的群发短信的C程序代码。用GPRS群发短信的代码,是学习CC2530的时候编写的一个程序。
- /*******************************************************************************
- * 头文件
- */
- #include "hal_board.h"
- #include "string.h"
- /*******************************************************************************
- * 头文件
- */
- #include "hal_cc8051.h"
- #include "hal_mcu.h"
- /*******************************************************************************
- * 常数
- */
- #define UART_TX_SIZE 40
- #define UART_RX_SIZE 40
- /*******************************************************************************
- * 宏定义
- */
- /*******************************************************************************
- * 类型定义
- */
- #define PHONE0 "AT+CMGS="15527072779"r"//号码0
- #define PHONE1 "AT+CMGS="13308642919"r"//号码1
- #define PHONE3 "AT+CMGS="AT+CNUM"r"//获得本机号码,未测试
- #define MESSAGE0 "the temperature is normal !r"//信息0
- #define MESSAGE1 "the temperature go beyond the limit !r"//信息1
- #define PHONE_NUMBER 3
- #define NORMAL_MASSAGE 0
- #define ALARM_MASSAGE 1
- /*******************************************************************************
- * 变量
- */
- char __xdata BAUD[] = {"AT+IPR=9600r"};
- char __xdata AT0[] = {"ATr"};
- char __xdata AT[] = {"ATr"};
- char __xdata CMGF[] = {"AT+CMGF=1r"};
- char __xdata CSCS[] = {"AT+CSCS="GSM"r"};
- char __xdata CMGS[PHONE_NUMBER][23]={PHONE0,PHONE1};//电话号码数组
- char __xdata MESSAGE[PHONE_NUMBER][100]= {MESSAGE0,MESSAGE1};//信息数组
- char __xdata CTRL_Z[1] = {0x1A};
- char __xdata RSP[] = {"rrnOKrn"};
- /*******************************************************************************
- * 函数原型
- */
- void APP_REQ(char *ch,uint16 chLen);
- void delay(uint16 count);
- /*******************************************************************************
- * 常数
- */
- #define RX_BUF_READ_PERIOD 750
- /*******************************************************************************
- * 变量
- */
- uint8 uartRxIndex;
- uint16 timeCount;
- uint16 timeout;
- uint8 timerFlag;
- uint8 situation=1;//根据信息判断取值
- char __xdata uartTxBuf[UART_TX_SIZE];
- char __xdata uartRxBuf[UART_RX_SIZE];
- /*******************************************************************************
- * 函数
- */
- void SEND_MESSAGE(void)
- {
- HAL_Init_Uart0();
- HAL_Init_Timer4();
- HAL_TIME_4_START();
- HAL_INT_ON();
- APP_REQ(AT0,sizeof(AT0));
- APP_REQ(AT,sizeof(AT));
- APP_REQ(CMGF,sizeof(CMGF));
- APP_REQ(CSCS,sizeof(CSCS));
- for(int i=0;i<PHONE_NUMBER;i++)
- {
- APP_REQ(CMGS[i],sizeof(CMGS[i]));
- delay(2);
- if(situation)
- {
- APP_REQ(MESSAGE[NORMAL_MASSAGE],sizeof(MESSAGE[NORMAL_MASSAGE]));
- }
- else
- {
- APP_REQ(MESSAGE[ALARM_MASSAGE],sizeof(MESSAGE[ALARM_MASSAGE]));
- }
- APP_REQ(CTRL_Z,sizeof(CTRL_Z));
- delay(20);
- }
- }
- void APP_REQ(char *ch,uint16 chLen)
- {
- HAL_Send_Uart0(ch, chLen);
- while(!timerFlag);
- timerFlag = FALSE;
- HAL_TIME_4_START();
- memset(uartRxBuf, 0x00, UART_RX_SIZE);
- uartRxIndex = 0;
- }
- void delay(uint16 count)
- {
- while(count)
- {
- HAL_Wait_Ms(1000);
- count--;
- }
- }
- #pragma vector = URX0_VECTOR
- __interrupt void UART0_RX_ISR(void)
- {
- URX0IF = 0;
- U0CSR &= ~U0CSR_RE;
- uartRxBuf[uartRxIndex++] = U0DBUF;
- U0CSR |= U0CSR_RE;
- }
- HAL_ISR_FUNCTION(HAL_Timer4_Isr, T4_VECTOR)
- {
- HAL_TIME_4_DISABLE_INT();
- timeCount++;
- if(timeCount >= RX_BUF_READ_PERIOD)
- {
- timeCount = 0;
- timerFlag = TRUE;
- HAL_TIME_4_STOP();
- }
- HAL_TIME_4_CLEAR_INT();
- HAL_TIME_4_ENABLE_INT();
- }