连接在AT89C52单片机上的TC35i芯片接受到来自引脚的高电平发送警告短信的C语言程序 加上注释
时间: 2024-02-05 15:12:44 浏览: 65
下面是连接在AT89C52单片机上的TC35i芯片接受到来自引脚的高电平发送警告短信的C语言程序,已加上注释:
```c
// 引入8051的头文件
#include <reg52.h>
// 定义波特率为9600
#define BAUDRATE 9600
// 定义串口数据长度为8位
#define DATABIT 0x80
// 定义波特率重载值
#define TH1_INIT ((65536 - (int)(11059200 / (long)(32 * 12 * BAUDRATE))) / 256)
#define TL1_INIT ((65536 - (int)(11059200 / (long)(32 * 12 * BAUDRATE))) % 256)
// 定义TC35i模块的PIN脚
sbit TC35i_PIN = P3^2;
// 定义发送短信命令
unsigned char *send_cmd = "AT+CMGS=\"+8613xxxxxxxx\"\r";
// 定义短信内容
unsigned char *send_msg = "Warning: High level detected!";
// 定义串口接收缓冲区
unsigned char uart_buf[50];
// 定义串口接收计数器
unsigned char uart_cnt = 0;
// 定义发送短信成功标志
bit sms_sent = 0;
// 初始化串口
void UART_Init() {
// 设置定时器1为8位自动重载模式
TMOD &= 0x0F;
TMOD |= 0x20;
// 设置定时器1的重载值
TH1 = TH1_INIT;
TL1 = TL1_INIT;
// 启动定时器1
TR1 = 1;
// 设置串口为模式1
SCON = DATABIT;
// 打开串口接收中断
ES = 1;
EA = 1;
}
// 串口中断服务程序
void UART_Isr() interrupt 4 {
if (RI) {
RI = 0;
uart_buf[uart_cnt++] = SBUF;
}
if (TI) {
TI = 0;
sms_sent = 1;
}
}
// 发送AT指令到TC35i模块
void Send_AT_Cmd(unsigned char *cmd) {
while (*cmd) {
// 将AT指令发送到串口
SBUF = *cmd++;
while (!TI);
TI = 0;
}
}
// 发送短信内容到TC35i模块
void Send_SMS(unsigned char *msg) {
unsigned char len = 0;
// 计算短信内容长度
while (*msg++) len++;
// 发送短信命令到模块
Send_AT_Cmd(send_cmd);
// 等待模块回应">"字符
while (!sms_sent) {
if (uart_cnt > 0 && uart_buf[uart_cnt - 1] == '>') {
sms_sent = 1;
}
}
// 发送短信内容到模块
while (len-- && sms_sent) {
SBUF = *msg++;
while (!TI);
TI = 0;
}
// 发送短信结束符到模块
SBUF = 0x1A;
while (!TI);
TI = 0;
}
// 主函数
void main() {
// 初始化串口
UART_Init();
while (1) {
// 监测TC35i模块的PIN脚是否为高电平
if (TC35i_PIN == 1) {
// 发送短信内容到TC35i模块
Send_SMS(send_msg);
// 等待3秒钟
delay(3000);
}
}
}
```
注:该程序仅供参考,实际应用中需要根据具体情况进行修改和优化。
阅读全文
相关推荐












