// 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)); //清空缓存
    }
}
msp430f5529控制sim800a实现短信收发C语言代码加上中文注释

原文地址: https://www.cveoy.top/t/topic/dn00 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录