您的位置 首页 新品

根据51单片机的GSM模块C言语发送短信程序

includereg52h>includeabsacch>includestdioh>defineuintunsignedintdefineucharunsignedchardefi

#include

#include
#include
#define uint unsigned int
#define uchar unsigned char
#define RST 0X01
#define CMGF 0X02
#define CMGD 0X03
#define CREG 0X04
#define CMGR 0X05
#define CMGS 0X06
#define CSCA 0X07
#define ATDAT 0X08
#define TC35RET 0X00
sbit IGT=P1^0;

uchar TC35_CON;
uchar i_TC35_RECE;
uchar TC35_RE[30],
TC35_MAX,
i_TC35;
extern uchar TC35_CON;
extern uchar i_TC35_RECE;
extern uchar i_receive,
TC35_RE[30],
TC35_MAX,
i_TC35;
void delay(uint);
void init_serialcom( void );
void send_uart( unsigned char);
void ATNAME(void);
void AT_CMGS(void);
void AT_CSCA(void);
void AT_RST(void);
void AT_CREG(void);
void AT_CMGF(void);
void AT_CMGR(void);
void AT_CMGD(void);

uchar code TC_MDSJ[]={“AT+CMGS=13969138509”};
//意图手机地址,
uchar code TC_ZXH[]={“AT+CSCA=+8613800531500”};
//本地中心号。
////////其他地方不要乱动//
uchar code TC_FSNR[]={“zhangkaiqiang”};
//发送短信内容。
uchar code TC_WLZT[]={“AT+CREG?”};
//网络状况查询
uchar code TC_MSXZ[]={“AT+CMGF=1”};
//发送形式挑选。
uchar code TC_DQML[]={“AT+CMGR=1”};
//短信读取指令。
uchar code TC_SCML[]={“AT+CMGD=1”};
//短信删去指令。
uchar code TC_ATF[]={“AT&F”};
//格局化指令。
void delay(uint i)
{
unsigned int i_delay,j_delay;
for(i_delay=0;i_delay {
for(j_delay=0;j_delay<100;j_delay++)
{;}
}
}
void init_serialcom( void )
{
SCON = 0x50 ;
//SCON: serail mode 1, 8-bit UART, enable ucvr
//UART为形式1,8位数据,答应接纳
TMOD |= 0x20 ;
//TMOD: timer 1, mode 2, 8-bit reload
//定时器1为形式2,8位主动重装
PCON |= 0x80 ; //SMOD=1;
TH1 = 0xFD ; //Baud:19200 fosc=”11″.0592MHz
IE |= 0x90 ; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
TI=1;
}
//向串口发送一个字符
void send_uart( unsigned char ch)
{
while (TI==0);
TI= 0 ;
SBUF=ch;
}
//串口接纳中止函数
void serial () interrupt 4 using 3
{
if (RI)
{
RI = 0 ;
i_receive=SBUF;
TC35_RE[i_TC35_RECE++]=i_receive;
// i_TC35_RECE++;
if(i_TC35_RECE>TC35_MAX)
{
TC35_MAX=i_TC35_RECE;
}
}
}

void ATNAME()
{

uchar i;
for(i=0;i {
send_uart(TC_FSNR[i]);
}
delay(1000);
send_uart(0X1A);
TC35_CON=ATDAT;
}
//写意图手机的
void AT_CMGS()
{
uchar i;
for(i=0;i {
send_uart(TC_MDSJ[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CMGS;
}
//写信息中心号
void AT_CSCA()
{
uchar i;
for(i=0;i {
send_uart(TC_ZXH[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CSCA;
}
//AT复位指令
void AT_RST()
{
uchar i;
for(i=0;i {
send_uart(TC_ATF[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=RST;
}
//AT网络状况查询指令
void AT_CREG()
{
uchar i;
for(i=0;i {
send_uart(TC_WLZT[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CREG;
}
//AT接纳格局指令
void AT_CMGF()
{
uchar i;
for(i=0;i {
send_uart(TC_MSXZ[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CMGF;
}
//AT短消息读取指令
void AT_CMGR()
{
uchar i;
for(i=0;i {
send_uart(TC_DQML[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CMGR;
}
//AT短消息删去指令
void AT_CMGD()
{
uchar i;
for(i=0;i {
send_uart(TC_SCML[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CMGD;
}

void delay1(void) //差错 0us
{
unsigned char a,b,c;
for(c=19;c>0;c–)
for(b=20;b>0;b–)
for(a=150;a>0;a–);
}
void GSM(void)
{
uchar shou=100;
IGT=0;
delay1();
IGT=1;
init_serialcom(); //初始化串口
delay(100);
TC35_MAX=0;
AT_RST();
while(shou–)
{
delay(100);
if(TC35_MAX>0)
{
if(TC35_CON==RST)//TC35_CON==0x01
{
if((TC35_RE[7]==O)&&(TC35_RE[8]==K))
{
TC35_CON=TC35RET;
AT_CMGF();
}
else
{}
}
//AT+CMGF 优先信息格局。履行格局有TEXT 方法和PDU 方法。
else if(TC35_CON==CMGF) //TC35_CON==0x02
{
if((TC35_RE[12]==O)&&(TC35_RE[13]==K))
{
TC35_CON=TC35RET; // delay(100);
AT_CREG();
}
else
{}
}
//AT+CREG 网络注册。取得手机的注册状况。
else if(TC35_CON==CREG)//TC35_CON==0x04
{
if(((TC35_RE[18]==0)&&(TC35_RE[20]==1))||((TC35_RE[18]==0)&&(TC35_RE[20]==5)))
{
TC35_CON=TC35RET;
AT_CMGD();
}
else
{
AT_CREG();
}
}
//AT+CMGR 读短信。信息从+CPMS 指令设定的存储器读取。
else if(TC35_CON==CMGR)//TC35_CON==0x05
{
if(TC35_MAX<=30)
{
AT_CMGR();
}
else //if((TC35_MAX==77)||(TC35_MAX==79))
{

if(TC35_RE[69]==0)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==1)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==2)
{

TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==3)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==4)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==5)
{

TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==6)
{

TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==7)
{

TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else
{
TC35_CON=TC35RET;
AT_CMGR();
}
}
}
//AT+CMGD 删去短信息。删去一个或多个短信息。
else if(TC35_CON==CMGD)//TC35_CON==0x03
{
delay(100);
if((TC35_RE[12]==O)&&(TC35_RE[13]==K))
{
AT_CSCA();
}
else
{
}
}
//AT+CSCA 短信服务中心地址。
else if(TC35_CON==CSCA)//TC35_CON==0x07
{
delay(100);
if((TC35_RE[25]==O)&&(TC35_RE[26]==K))
{

AT_CMGS();
}
else
{
}
}
//填写发送内容
else if(TC35_CON==CMGS)//TC35_CON==0x06
{
delay(100);
if((TC35_RE[22]==0X3E)&&(TC35_RE[23]==0X20))
{

ATNAME();
}
else{}
}
//发送结束回来持续扫描接纳
else if(TC35_CON==ATDAT)//0x08
{
delay(100);
if((TC35_RE[0]==+)||(TC35_RE[0]==0x1A))
{
AT_CMGR();
}
else
{}
}
//复位接纳组
for(i_TC35=0;i_TC35<=TC35_MAX;i_TC35++)
{
TC35_RE[i_TC35]=0;
}
i_TC35_RECE=0;
TC35_MAX=0;
}
}
}
void main()
{
GSM();

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/262360.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部