msp430f5529控制sim800a实现短信收发C语言代码加上中文注释
// MSP430F5529控制SIM800A实现短信收发C语言代码
#include "msp430.h" #include <stdio.h> #include <string.h>
#define SIM800A_POWER_ON P4OUT |= BIT0 //SIM800A模块开机引脚 #define SIM800A_POWER_OFF P4OUT &= ~BIT0 //SIM800A模块关机引脚 #define SIM800A_RESET P1OUT &= ~BIT2; __delay_cycles(10000); P1OUT |= BIT2; //SIM800A模块复位引脚
char sms_buf[50]; //短信缓存
void init_uart(void) //初始化UART通信 { P3SEL |= BIT3+BIT4; // P3.3,4 = USART0 TXD/RXD UCA0CTL1 |= UCSWRST; // 复位状态机 UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 104; // 1MHz 9600 UCA0BR1 = 0; // 1MHz 9600 UCA0MCTL |= UCBRS_1; // 这里设置微调参数 UCA0CTL1 &= ~UCSWRST; // 复位状态机 }
void send_cmd(char *cmd) //发送指令 { while(*cmd) //指令发送 { while(!(UCA0IFG & UCTXIFG)); //等待发送缓存为空 UCA0TXBUF = *cmd++; //放入发送缓存 } }
void get_sms(void) //获取短信 { send_cmd("AT+CMGF=1\r\n"); //设置短信模式为文本模式 __delay_cycles(1000000);
send_cmd("AT+CPMS=\"SM\",\"SM\",\"SM\"\r\n"); //设置短信存储区域为SIM卡存储区域
__delay_cycles(1000000);
send_cmd("AT+CMGL=\"ALL\"\r\n"); //读取所有短信
__delay_cycles(1000000);
int i = 0;
int flag = 0;
memset(sms_buf, 0, sizeof(sms_buf)); //清空缓存
while(1)
{
while(!(UCA0IFG & UCRXIFG)); //等待接收缓存有数据
char tmp = UCA0RXBUF; //从接收缓存中取出数据
if(tmp == 'O' && flag == 0) flag = 1; //第一个'O'出现
else if(tmp == 'K' && flag == 1) flag = 2; //第一个'K'出现
else if(tmp == '\r' && flag == 2) flag = 3; //第一个'\r'出现
else if(tmp == '\n' && flag == 3) flag = 4; //第一个'\n'出现
else if(flag == 4)
{
sms_buf[i++] = tmp; //短信内容
if(i == 50) break; //短信内容太长,只取前50个字符
}
}
}
void send_sms(char *num, char *msg) //发送短信 { char cmd[50];
sprintf(cmd, "AT+CMGS=\"%s\"\r\n", num); //设置短信接收方号码
send_cmd(cmd); //发送指令
__delay_cycles(1000000);
memset(cmd, 0, sizeof(cmd)); //清空缓存
sprintf(cmd, "%s\x1A", msg); //设置短信内容并加上终止符
send_cmd(cmd); //发送指令
__delay_cycles(1000000);
}
void main(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P1DIR |= BIT2; //P1.2设置为输出
P4DIR |= BIT0; //P4.0设置为输出
SIM800A_POWER_ON; //开启SIM800A模块
__delay_cycles(10000000);
SIM800A_RESET; //复位SIM800A模块
init_uart(); //初始化UART通信
while(1)
{
get_sms(); //获取短信
if(strlen(sms_buf) > 0) //如果有短信
{
send_sms("10086", sms_buf); //发送短信
memset(sms_buf, 0, sizeof(sms_buf)); //清空缓存
}
}
原文地址: https://www.cveoy.top/t/topic/dn00 著作权归作者所有。请勿转载和采集!