[mw_shl_code=c,true]#include<TC35.h>
unsigned char idata SystemBuf[RxIn];
unsigned char code AT[]="AT"; //握手信号
unsigned char code ATE[]="ATE0"; //关回显
unsigned char code AT_CNMI[]="AT+CNMI=2,1";//设置这组参数来了新信息直接显示到串口,不作存储
unsigned char code AT_CSCA[]="AT+CSCA=\"+8613800512500\"";//设置短信服务中心号码 AT+CSCA=\"+8613010360500\"
unsigned char code AT_CMGF[]="AT+CMGF=1";//设置短信的格式为text格式
unsigned char code godphone[11]="13771992474";//客户端号码
unsigned char code AT7[]={0x41,0x54,0x2B,0x43,0x4D,0x47,0x53,0x3D};//AT+CMGS= 即发送短信客户端号码指令 eg:AT+CMGS=13771992474 回车 发送
unsigned char code AT12[]={0x41,0x54,0x44,0x3E};//ATD> 即拨打客户端电话指令 eg:呼叫13973292929,则为ATD13973292929
unsigned char code warning[]="warning! if you get it, please send get it to me";
unsigned char Rx=0;
unsigned char rec_flag=0;
unsigned char flag=0;
/***********************************************************
函数名称?Delay_ms
函数功能:延时函数
入口参数:ms 出口参数:无
***********************************************************/
void Delay_ms(unsigned int ms)// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
/***********************************************************
函数名称:sendchar
函数功能:发送单个字符
入口参数:ch 出口参数:无
***********************************************************/
void sendchar(unsigned char ch)//发送单个字符
{
SBUF=ch; //送入缓冲区
while(TI!=1); //等待发送完毕
TI=0; //软件清零
}
/***********************************************************
函数名称:sendstring
函数功能:发送字符串
入口参数:*str 出口参数:无
***********************************************************/
void sendstring(unsigned char *str)//通过串口发送字符串
{
while(*str!='\0')
{
sendchar(*str);
Delay_ms(2);
str++;
}
sendchar(0x0D);
sendchar(0x0A);//回车符
}
/***********************************************************
函数名称:senddata
函数功能:发送数据
入口参数:dat 出口参数:无
***********************************************************/
void senddata(unsigned char dat) /*发送数据函数*/
{
SBUF =dat;
while(!TI);
TI = 0;
}
/***********************************************************
函数名称:mingling
函数功能:发送数组
入口参数:zijie *p 出口参数:无
***********************************************************/
void mingling(unsigned char zijie,unsigned char *p) /*发送数组函数*/
{
unsigned char m;
for(m=0;m<zijie;m++)
{
senddata(p[m]);
}
}
/***********************************************************
函数名称:clearBuff
函数功能:清空
入口参数:ch 出口参数:无
***********************************************************/
void clearBuff(void)
{
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
}
/*void Start_GSM(void)
{
IGT=0;
Delay_ms(1000);
IGT=1;
Delay_ms(1000);
}*/
void UART_init (void) /*对串口进行初始化*/
{
TMOD=0x20; //选择定时器1
PCON=0x00; ///波特率不加倍
SCON=0x50; //串行工作方式1允许串行接收
TH1=0xFD; //实验板上晶振位11.0592MHZ,选择波特率为9600
TL1=0xFD; //在相应计数器上赋值
EA=1; //总中断开启
ES=1; //串行中断开启
TR1=1; //开启定时器1
}
void receive() interrupt 4 //通过中断,单片机串口接收TC35回复的数据
{
if(RI)
{
if(Rx<RxIn)
{
SystemBuf[Rx]=SBUF;
Rx++;
}
RI=0;
}
}
void GSM_INIT(void) /*初始化TC35模块*/
{
while(1)
{
clearBuff();
Delay_ms(1000);
sendstring(AT);
Delay_ms(1000);
sendstring(ATE);
Delay_ms(1000);
sendstring(AT_CNMI);
Delay_ms(1000);
sendstring(AT_CSCA);
Delay_ms(1000);
clearBuff();
sendstring(AT_CMGF);
Delay_ms(1000);
//sendstring(SystemBuf);
//Delay_ms(1000);
if((strstr(SystemBuf,"OK")!=NULL)) //判断是否模块初始化成功,成功的话模块会回复"OK"给单片机
{ //如果单片机没有收到OK,就继续发送初始化指令/
clearBuff();
break;
}
else
{
clearBuff();
Delay_ms(50);
}
}
}
void receivedmessage_flag(void) /*接收短信准备*/
{
if((SystemBuf[5]==0x54)&&SystemBuf[6]==0x49) //如果有新短信来,模块会通过串口向单片机发送字符串, TI
{ // 此函数的功能是判断是否有新短信来,如果来的话就置位准备接受位标志为1
rec_flag=1;
clearBuff();
}
else
{
clearBuff();
}
}
void call(void)
{
unsigned int x;
mingling(3,AT12);
for(x=0;x<11;x++)
{
senddata(godphone[x]);
}
senddata(0x3b);//打电话的时候需要在电话号面跟随一个分号
senddata(0x0D);
senddata(0x0A);
}
void sendmessage(void)
{
unsigned int x;
mingling(8,AT7); //mingling 函数中不发送回车
for(x=0;x<11;x++)
{
senddata(godphone[x]);
}
senddata(0x0D);
senddata(0x0A);
Delay_ms(100);
sendstring(warning); //sendstring 函数中发送回车(实际上在参考手册中是不要求加回车的)
Delay_ms(10);
sendchar(0x1A); //sendchar senddata实际上是同一个作用,都是发送一个字节的数据
}[/mw_shl_code]
对应头文件
[mw_shl_code=c,true]#ifndef _TC35_H
#define _TC35_H
#include<reg52.h>
#include <string.h>
sbit sig=P3^3;
#define RxIn 90
//typedef uint unsigned int;
//typedef uchar unsigned char;
extern unsigned char idata SystemBuf[RxIn];
extern unsigned char code AT[]; //握手信号
extern unsigned char code ATE[]; //关回显
extern unsigned char code AT_CNMI[];"//设置这组参数来了新信息直接显示到串口,不作存储
extern unsigned char code AT_CSCA[];"//设置短信服务中心号码 AT+CSCA=\"+8613010360500\"
extern unsigned char code AT_CMGF[];//设置短信的格式为text格式
extern unsigned char code godphone[11];"//客户端号码
extern unsigned char code AT7[];//AT+CMGS= 即发送短信客户端号码指令 eg:AT+CMGS=13771992474 回车 发送
extern unsigned char code AT12[];//ATD> 即拨打客户端电话指令 eg:呼叫13973292929,则为ATD13973292929
extern unsigned char code warning[];
extern unsigned char Rx;
extern unsigned char rec_flag;
extern unsigned char flag;
void Delay_ms(unsigned int);// 延时子程序
void sendchar(unsigned char);//发送单个字符
void sendstring(unsigned char *str);//通过串口发送字符串
void senddata(unsigned char); /*发送数据函数*/
void mingling(unsigned char,unsigned char *p); /*发送数组函数*/
void clearBuff(void);
void UART_init(void); /*对串口进行初始化*/
void receive() interrupt 4; //通过中断,单片机串口接收TC35回复的数据
void GSM_INIT(void); /*初始化TC35模块*/
void receivedmessage_flag(void); /*接收短信准备*/
void call(void);
void sendmessage(void);
#endif
[/mw_shl_code]
编译报错
对应位置是两处SystemBuf[Rx]
|