sim900a用短信发送变量的32单片机C语言代码
时间: 2024-02-28 09:32:34 浏览: 185
以下是一个基于SIM900A模块的短信发送代码示例,可将变量值发送到指定的手机号码:
```c
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#define FOSC 11059200L
#define BAUD 9600
sbit SIM900A_PWR = P1^0; // SIM900A模块电源控制引脚
sbit SIM900A_RST = P1^1; // SIM900A模块复位引脚
sbit SIM900A_DTR = P1^2; // SIM900A模块数据发送引脚
sbit SIM900A_RTS = P1^3; // SIM900A模块数据接收引脚
char gsm_buffer[160]; // 接收缓冲区
unsigned int gsm_count; // 接收计数器
void delay_ms(unsigned int ms) // 延时函数
{
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 114; j++);
}
void init_uart() // 初始化串口
{
TMOD = 0x20;
TH1 = TL1 = -(FOSC/12/BAUD);
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = ES = 1;
}
void send_uart(char c) // 发送一个字符
{
SBUF = c;
while (!TI);
TI = 0;
}
void send_string(char *s) // 发送一个字符串
{
while (*s)
{
send_uart(*s++);
}
}
void init_gsm() // 初始化GSM模块
{
SIM900A_PWR = 0;
delay_ms(2000);
SIM900A_PWR = 1;
delay_ms(5000);
SIM900A_RST = 0;
delay_ms(1000);
SIM900A_RST = 1;
delay_ms(5000);
}
void send_sms(char *phone, char *message) // 发送短信
{
send_string("AT+CMGF=1\r\n"); // 设置短信文本模式
delay_ms(1000);
send_string("AT+CMGS=\"");
send_string(phone);
send_string("\"\r\n"); // 指定接收手机号码
delay_ms(1000);
send_string(message); // 发送短信内容
send_uart(0x1A); // 发送CTRL+Z结束符
delay_ms(5000);
}
void main()
{
unsigned int value = 123; // 要发送的变量值
char message[32]; // 短信内容
init_uart(); // 初始化串口
init_gsm(); // 初始化GSM模块
sprintf(message, "The value is %d", value); // 将变量值转换为字符串
send_sms("13800138000", message); // 发送短信
}
void uart_isr() interrupt 4 // 串口中断处理函数
{
if (RI) // 接收中断
{
RI = 0;
gsm_buffer[gsm_count++] = SBUF;
if (gsm_count >= sizeof(gsm_buffer))
{
gsm_count = 0;
}
}
if (TI) // 发送中断
{
TI = 0;
}
}
```
这段代码基于51单片机(STC89C52RC),使用串口与SIM900A模块通信,通过发送AT指令控制模块发送短信。在主函数中,将要发送的变量值转换为字符串,然后调用send_sms函数发送短信。需要注意的是,SIM900A模块的电源控制引脚、复位引脚、数据发送引脚和数据接收引脚需要按照实际连接进行修改。
阅读全文