|
#include<STC12C5A60S2.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
uchar code ATE0[]="ATE0"; //禁止回显
uchar code CMGF[]="AT+CMGF=1"; //设置短信为TEXT模式
uchar code CREG[]="AT+CREG?"; //查询网络注册情况
uchar code CMGS[]="AT+CMGS="; //发送短信
uchar code PHONE[11]="13515380480";
uchar TC35[60]="\n"; //串口中断接收数组并赋予初值
uchar SM[]="";
uchar NUM;
sbit LED=P0^7;
bit flag=0; //串行口中断标志位
//延时程序
void delay(uint t)
{
while(t--);
}
//清除中断接收数组
void TC35_clr()
{
uchar i;
for(i=0;i<60;i++)
TC35=0;
}
//初始化串口
void init_UART()
{
SCON=0X50;
// S2CON=0X50;
BRT=0Xfd;
AUXR=0X11;
ES=1;
// IE2=0X01;
IP=0X02; //串行口,定时器0为高优先级
IPH=0X12;
IT0=1; //中断0下降沿触发
IT1=1; //中断1下降沿触发
IE=0X97; //开总中断,串行口,定时器0,外部中断0,1 不开定时器1中断
}
//串口中断
void ser()interrupt 4
{
uchar i;
ES=0;
for(i=0;i<NUM;i++)
{
while(!RI);RI=0;
TC35=SBUF;
}
flag=1;
ES=0;
}
//禁止回显
void FS_ATE0()
{
uchar i=0;
ES=0;
while(ATE0!='\0')
{
SBUF=ATE0;
while(!TI);
TI=0;
i++;
}
SBUF=0x0d;
while(!TI);
TI=0;
NUM=11;
ES=1;
}
//改为TEXT模式
void FS_CMGF()
{
uchar i=0;
ES=0;
while(CMGF!='\0')
{
SBUF=CMGF;
while(!TI);
TI=0;
i++;
}
SBUF=0x0d;
while(!TI);
TI=0;
NUM=6;
ES=1;
}
//查询网络注册情况
void FS_CREG()
{
uchar i=0;
ES=0;
while(CREG!='\0')
{
SBUF=CREG;
while(!TI);
TI=0;
i++;
}
SBUF=0x0d;
while(!TI);
TI=0;
NUM=20;
ES=1;
}
//void GET_PHONE()
CLEAR_TC35()
{
uchar a;
for(a=0;a<50;a--)
TC35[a]=0;
}
//发送短信
void FS_CMGS()
{
uchar i=0;
uchar h=0;
ES=0;
while(CMGS!='\0')
{
SBUF=CREG;
while(!TI);
TI=0;
i++;
}
while(PHONE[h]!='\0')
{
SBUF=CREG[h];
while(!TI);
TI=0;
h++;
}
SBUF=0x0d;
while(!TI);
TI=0;
NUM=4;
ES=1;
}
/*
void SM_SJ()
{
FS_SJ()
{
TIME_PCF8563()
{
}
void INT0()
{
EX0=0;
}
*/
void int1()interrupt 2
{
EX1=0;
delay(1000);delay(1000);delay(1000);
do
{
FS_ATE0(); //禁止回显
while(!flag);
}
while(!(TC35[7]==0X4F)&&(TC35[8]==0X4B)); //返回值是否有OK
CLEAR_TC35();
do
{
FS_CMGF(); //改为TEXT模式
while(!flag);
}
while(!(TC35[2]==0X4F)&&(TC35[3]==0X4B)); //返回值是否有OK
CLEAR_TC35();
do
{
FS_CREG(); //查询网络注册情况
while(!flag);
}
while(!(TC35[9]==0X30)&&(TC35[11]==0X31)); //返回值是否有1,0即0,禁止网络注册主动提供结果码(缺省值) //1, 已注册本地网络运营商
CLEAR_TC35();
FS_CMGS(); //发送短信
LED=0; //LED亮
EX0=1;
}
void main()
{
delay(1000);delay(1000);delay(1000);delay(1000);
init_UART();
// while(!flag);
// while(!(TC35[2]==0X3E)); //返回值是否有>
//CLEAT_TC35();
while(1);
} |
|