3.GSM(SIM9000A)
GSM模块使用AT指令进行发送
本程序实现发送中文短信,功能不同AT指令不同
/**************************************************************************************
*实验现象:下载程序后打开串口调试助手,在串口助手接收区上显示各AT指令
***************************************************************************************/
#include "STC15F2Kxx.h"
#include <string.H>
#include <intrins.h>
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define uchar unsigned char
#define uint unsigned int
unsigned int rec_data_len_uart=0;
unsigned char idata Buffer_Uart0_Rec[25]={0};
void UsartInit(void)
{
P_SW1 &= 0x3f; //设置串口1在(P3.0/RXD,P3.1/TXD)
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器1为16位自动重装方式
TL1 = 0xE0; //设定定时初值
TH1 = 0xFE; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1计数
ES = 1; //使能串口中断
EA = 1; //使能总中断
}
void clear_rec_data()
{
uchar i,temp_len;
temp_len=strlen(Buffer_Uart0_Rec);
if(temp_len>25){
temp_len=25;
}
for(i=0;i<temp_len;i++){
Buffer_Uart0_Rec[i]='\0';
}
rec_data_len_uart=0;
}
unsigned char hand(unsigned char *data_source,unsigned char *ptr)
{
if(strstr(data_source,ptr)!=NULL)
return 1;
else
return 0;
}
void Serial_interrupt() interrupt 4
{
unsigned char temp_rec_data_uart0;
temp_rec_data_uart0 = SBUF; //读取接收数据
RI=0; //接收中断信号清零,表示将继续接收
Buffer_Uart0_Rec[rec_data_len_uart]=temp_rec_data_uart0; //接收数据
rec_data_len_uart++;
if(rec_data_len_uart>24){
rec_data_len_uart=0; //从头开始接收数据
}
}
void Uart1Send(uchar c)
{
SBUF=c;
while(!TI);//等待发送完成信号(TI=1)出现
TI=0;
}
//串行口连续发送char型数组,遇到终止号\0将停止
void Uart1Sends(uchar *str)
{
while(*str!='\0'){
SBUF=*str;
while(!TI);//等待发送完成信号(TI=1)出现
TI=0;
str++;
}
}
void DelaySec(int sec)
{
uint i , j= 0;
for(i=0; i<sec; i++){
for(j=0; j<40000; j++){
}
}
}
void main()
{
UsartInit();
DelaySec(100);//延时约15秒,此处延时,是为了让模块有足够的时间注册到网络
Uart1Sends("AT+CSCS=\"UCS2\"\r\n");
DelaySec(20);
Uart1Sends("AT+CMGF=1\r\n");
DelaySec(20);
Uart1Sends("AT+CSCA?\r\n");
DelaySec(20);
Uart1Sends("AT+CSMP=17,167,0,25\r\n");
DelaySec(20);
Uart1Sends("AT+CMGS=\"13112345678\"\r\n");//此处修改为对方的电话号码,号码为Unicode编码(注意:转换成的Unicode中间有空格,需将空格删除)
DelaySec(30);
Uart1Sends("52A06CB9FF01");//短信内容,依旧为Unicode编码
Uart1Send(0x1a);
DelaySec(20);
while(1);
}
运行效果: