- #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[i]=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[i]=SBUF;
- }
- flag=1;
- ES=0;
- }
- //禁止回显
- void FS_ATE0()
- {
- uchar i=0;
- ES=0;
- while(ATE0[i]!=' ')
- {
- SBUF=ATE0[i];
- 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[i]!=' ')
- {
- SBUF=CMGF[i];
- 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[i]!=' ')
- {
- SBUF=CREG[i];
- 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[i]!=' ')
- {
- SBUF=CREG[i];
- while(!TI);
- TI=0;
- i++;
- }
- while(PHONE[h]!=' ')
- {
- 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);
- }