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);	
}

运行效果:
3.GSM(SIM9000A)