📄 tc39i.c
字号:
/*各变量的定义 num:接收到的短信初始化数组的长度
n: at指令发送时作纯延时使用
receive[10]:接收到的新短消息提示信息的存储数组
buffer[160]: 短信初始化内容的存储数组
stn1[160]: 初始化数据1存储数组
stn2[160]: 初始化数组2存储数组
stn3[160]: 初始化数组3存储数组
stn4[160]: 初始化数组4存储数组
answer[15]: 应答数组存储位置
operate: at指令发送顺序的变量
*fda1: 新短消息提示信息的指针
ds: 定时器0中断加一变量
ds10: 秒加一变量
index: 新短消息的存储位置
spark: 主程序中执行那一部分的变量
*find1: #01,的指针
*find2: #02,的指针
*find3: #03,的指针
*find4: #04,的指针
*smk1: 配置类型赋值变量
p : buffer数组内容赋给各初始化数组的变量
true1: ok字符接收标志位
ture2: 定时使用的ok字符收到标志
tn: 接收+CMTI:字符串的标志
tp: 接收短信存储位置位标志
dly: at指令发送后允许定时开启的标志
bzt: 到一秒的标志
again: 到时at指令为接收到ok字符重发标志
evlt: 接收到短信存储位置标号的标志
digi: 定时发送的标志
pdu: pdu字符串的标志
state: 公共位标志用来防止指令执行冲突
readFlag: 数据接收完成标志位
sendFlag: 允许发送接收完成短信的标志
load: buffer数组接收数据标志位
enalbe: 短信删除后,允许发送确认短信的标志位
rs1: 允许读短信标志位
rs2: 允许接收数据标志位 */
#include <c8051f020.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define BAUDRATE 9600
#define SYSCLK 22118400
#define TXVAL (256-SYSCLK/BAUDRATE/384)
sbit LED = P2^4;
static uchar num=0,tak=0;
unsigned long n;
uchar xdata phone[13],message[16],dare[160],resp[7],time[6];
uchar xdata receive[10],buffer[160],stn1[160],stn2[160],stn3[160],answer[15],stn4[160];
uchar xdata operate=0,*fda1=NULL,index=0,spark=0,*find1=NULL,*find2=NULL,*find3=NULL;
uchar xdata *find4=NULL,*smk1=NULL,*td=NULL,p=0,ds=0,ds10=0,*smk2=NULL,*smk3=NULL;
uchar xdata sy=0,hj=0;
uchar length1=0,length=0,length2a=0,length2b=0,lengtha=0,lengthb=0,mat1=0,mat2=0;
uchar mat3=0,mat4=0,mete=0,capc=0;
bit true1=0,tn=0,tp=0,dly=0,bzt=0,again=0,evlt=0,digi=0,pdu=0,state=1;
bit readFlag=0,sendFlag=0,load=0,enable=0,rs1=0,wct=0,fac=0;
bit allow=0,start=0,aware=0,har=0,gdi=0,fen=0,rs2=1;
bit sja=0,sjb=0,tip=1;
void SYSCLK_INIT(void);
void PORT_INIT(void);
void UART0_INIT(void);
void UART0_ISR();
void UART1_INIT(void);
void UART1_ISR(void);
void Timer0_INIT(void);
void Timer0_ISR();
void Answer_INIT(void);
void Time_INIT(void);
void send_string(uchar *sta);
void WriteGsm(uchar *str);
void main(void)
{
WDTCN=0xde;
WDTCN=0xad;
SYSCLK_INIT();
PORT_INIT();
UART0_INIT();
UART1_INIT();
Timer0_INIT();
Answer_INIT();
Time_INIT();
EA=1;
wct=1;
while(1)
{
if((operate==0x01&&again)||(wct))
{
wct=0;
dly=0;
again=0;
ds10=0;
for(n=0;n<=200000;n++);
send_string("AT+CMGF=1\r/");
operate=0x02;
dly=1;
}
if((operate==0x02)&&(true1||again))
{
dly=0;
true1=0;
again=0;
ds10=0;
for(n=0;n<=200000;n++);
send_string("AT+CNMI=2,1\r/");
operate=0x03;
dly=1;
}
if((operate==0x03)&&(true1))
{
dly=0;
true1=0;
ds10=0;
operate=0x00;
goto mun;
}
}
mun: while(1)
{
if((evlt)&&(state))
{
evlt=0;
state=0;
spark=0x01;
rs1=1;
}
if((digi)&&(state))
{
digi=0;
state=0;
spark=0x02;
aware=1;
}
if((pdu)&&(state))
{
pdu=0;
state=0;
spark=0x03;
allow=1;
}
if(spark==0x01)
{
if((operate==0x04&&again)||(rs1))
{
rs1=0;
dly=0;
again=0;
ds10=0;
for(n=0;n<=200000;n++);
send_string("AT+CMGR=/");
SBUF0=index;
while(TI0==0);
TI0=0;
SBUF0=0x0d;
while(TI0==0);
TI0=0;
operate=0x05;
dly=1;
}
if((operate==0x05)&&(true1||again))
{
dly=0;
true1=0;
again=0;
ds10=0;
for(n=0;n<=200000;n++);
send_string("AT+CMGD=/");
SBUF0=index;
while(TI0==0);
TI0=0;
SBUF0=0x0d;
while(TI0==0);
TI0=0;
operate=0x06;
dly=1;
}
if((operate==0x06)&&(true1))
{
dly=0;
true1=0;
ds10=0;
operate=0x00;
enable=1;
}
if((readFlag)&&(enable))
{
find1=strstr(buffer,"#01,");
find2=strstr(buffer,"#02,");
find3=strstr(buffer,"#03,");
find4=strstr(buffer,"#04,");
if(find1!=NULL)
{
for(p=0;p<=num;p++)
{
stn1[p]=buffer[p];
buffer[p]=0;
}
tak=1;
for(p=9;p<=19;p+=2)
{
phone[tak]=stn1[p];
tak+=2;
}
tak=0;
for(p=10;p<=20;p+=2)
{
phone[tak]=stn1[p];
tak+=2;
}
phone[11]=0x0d;
phone[12]=0x2f;
message[0]=0x2b;
message[1]=0x38;
message[2]=0x36;
tak=4;
for(p=22;p<=32;p+=2)
{
message[tak]=stn1[p];
tak+=2;
}
tak=3;
for(p=23;p<=33;p+=2)
{
message[tak]=stn1[p];
tak+=2;
}
message[14]=0x0d;
message[15]=0x2f;
smk1=strchr(stn1,0x2c);
smk1=smk1+1;
for(p=1;p<=4;p++)
{
answer[p]=*smk1;
resp[p]=*smk1;
smk1++;
}
answer[7]=0x31;
sendFlag=1;
find1=NULL;
}
if(find2!=NULL)
{
for(p=0;p<=num;p++)
{
stn2[p]=buffer[p];
buffer[p]=0;
}
answer[7]=0x32;
sendFlag=1;
find2=NULL;
}
if(find3!=NULL)
{
for(p=0;p<=num;p++)
{
stn3[p]=buffer[p];
if(buffer[p]==0x2c)
mete++;
buffer[p]=0;
}
answer[7]=0x33;
sendFlag=1;
find3=NULL;
}
if(find4!=NULL)
{
for(p=0;p<=num;p++)
{
stn4[p]=buffer[p];
buffer[p]=0;
}
answer[7]=0x34;
sendFlag=1;
find4=NULL;
}
readFlag=0;
enable=0;
num=0;
}
if((operate==0x07&&again)||(sendFlag))
{
sendFlag=0;
dly=0;
again=0;
ds10=0;
for(n=0;n<=200000;n++);
WriteGsm("AT+CSCA=$");
send_string(message);
operate=0x08;
dly=1;
}
if((operate==0x08)&&(true1||again))
{
dly=0;
true1=0;
again=0;
ds10=0;
for(n=0;n<=200000;n++);
send_string("AT+CMGF=1\r/");
operate=0x09;
dly=1;
}
if((operate==0x09)&&(true1||again))
{
dly=0;
true1=0;
again=0;
ds10=0;
rs2=0;
for(n=0;n<=200000;n++);
WriteGsm("AT+CMGS=$");
send_string(phone);
for(n=0;n<=200000;n++);
send_string(answer);
SBUF0=0x1a;
while(TI0==0);
TI0=0;
operate=0x0a;
dly=1;
}
if((operate==0x0a)&&(true1))
{
rs2=1;
dly=0;
true1=0;
ds10=0;
spark=0x00;
operate=0x00;
state=1;
}
}
if(spark==0x02)
{
if(sjb||aware)
{
SBUF1=0x21;
aware=0;
sjb=0;
sy=0;
sja=1;
hj++;
}
if((operate==0x16&&again)||(gdi))
{
resp[0]=0x23;
resp[5]=0x2c;
resp[6]=0x2f;
sja=0;
sy=0;
hj=0;
gdi=0;
dly=0;
again=0;
ds10=0;
for(n=0;n<=200000;n++);
WriteGsm("AT+CSCA=$");
send_string(message);
operate=0x17;
dly=1;
}
if((operate==0x17)&&(true1||again))
{
dly=0;
true1=0;
again=0;
ds10=0;
for(n=0;n<=200000;n++);
WriteGsm("AT+CMGF=1\r$");
operate=0x18;
dly=1;
}
if((operate==0x18)&&(true1||again))
{
dly=0;
true1=0;
again=0;
ds10=0;
rs2=0;
for(n=0;n<=200000;n++);
WriteGsm("AT+CMGS=$");
send_string(phone);
for(n=0;n<=200000;n++);
send_string(resp);
send_string(dare);
SBUF0=0x1a;
while(TI0==0);
TI0=0;
operate=0x19;
dly=1;
}
if((operate==0x19)&&(true1))
{
dly=0;
true1=0;
ds10=0;
operate=0x00;
rs2=1;
spark=0x00;
state=1;
if(dare[0]==0x31)
pdu=1;
}
if(hj>=5)
{
pdu=1;
hj=0;
sy=0;
sja=0;
operate=0x00;
spark=0x00;
state=1;
}
}
if(spark==0x03)
{
if(allow)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -