/* EIP */
sbit PWDI = 0xfc; //pwdi=1 看门狗中断优先
sbit PX5 = 0xfb; //px5-px2=1 外部中断优先
sbit PX4 = 0xfa;
sbit PX3 = 0xf9;
sbit PX2 = 0xf8;
sbit INT2 = 0x94;//外中断2,上跳变触发
sbit INT3 = 0x95;//外中断3,下跳变触发
sbit INT4 = 0x96;//外中断4,上跳变触发
sbit INT5 = 0x97;//外中断5,下跳变触发
sbit ES1 = 0xae ;
sfr SCON1=0x0c0;
sfr SBUF1=0x0c1;
sbit RI1=SCON1^0;
sbit TI1=SCON1^1;
sbit REN1=SCON1^4;
sbit DMEO=0X0C4^0;
sbit IE5=0X91^7;
char xdata dw[dwlen]={'X','X','X','X','X','X','X','X','X'}; //attention : '\0x0d'!=0x0d
xdata char string[LENGTH]_at_ 0x0116;
char *flag;
xdata char Ephone[]="13161528267";
xdata char Fphone[]="13161528267"; //\r!='\r' 0x0d='\r'
char mode;
int len;
static int c=0;
char response;
char smssend;
char string1[5];
//长延时 12MHZ about
void Delay100Ms(void)
{
unsigned char i = 5;
unsigned int j;
while(i--)
{
j=1815;
while(j--);
};
}
void atd()
{;}
void ath(void)
{ printf("ATA\r");}
char getkey ()
{
char c;
while (!RI1);
c = SBUF1;
RI1 = 0;
return (c);
}
char putchar( char c){ //2003/6/17C
if (c == '\n')
{
if (RI1) //RI`RI1
{
if (SBUF1 == XOFF)
{
do
{
RI1 = 0;
while (!RI1);
}
while (SBUF1!= XON);
RI1 = 0;
}
}
while (!TI1);
TI1 = 0;
SBUF1 = 0x0d; // output CR
}
if (RI1)
{
if (SBUF1 == XOFF)
{
do
{
RI1 = 0;
while (!RI1);
}
while (SBUF1!= XON);
RI1 = 0;
}
}
while (!TI1);
TI1 = 0;
return (SBUF1= c);
}
char MyGetChar1(void) { /* was char */
char c;
while (!RI1); //set point for debug serial1 used
c = SBUF1;
RI1 = 0;
// putchar1(c);
return (c);
}
/*******************get char <cr> twice control length***********/
void getline2(char * s) //for gsm use
{int i=0,j=2;
char c;
do
{ c=MyGetChar1();
s[i]=c;
if(s[i]==0x0d)
{j--;
}
i++;
}
while(j!=0); // <cr> twice receive
// for coming PHONE : RING <CR> <LF> TWICE
// for coming sms : +CMT:"".... <CR> <LF> DATA <CR> <LF>
}
char chargestate()
{char state=0;
if(INT4==1) //ON CHARGE
{;
state='Y';
}
else
{;
state='N';
}
return state ;
}
int FEPS(char *s)
{int i=0;
do
{ if((s[i]=='p')||(s[i]=='s')||(s[i]=='f')||(s[i]=='e'))
{return i;}
else
i++;
}
while(i <100);
return 0;
}
void delay()
{ unsigned int us,usn,MS;
MS=127;
while(MS!=0)
{ usn = 127;
while(usn!=0)
{
us=80;
while (us!=0){us--;};
usn--;
}
MS--; }
}
/*******************************/
void main()
{
// char i,response[20];
PMR = 0x41;
TMOD=0X20;
SCON1=0X50;
SCON=0X50;
TCON=0X60;
TH1=0X0FD;
TL1=0X0FD;
PCON=0X00;
IP=0X00;//PRI INTERRUPT
TR1=1;
for(i=0;i <LENGTH;i++)
{string[i]='w';}
TI1=1;
Delay100Ms();
printf("at&f\r");
delay();
TI1=1;
printf("at+ipr=0\r");
delay();
printf("at+cnmi=0,2,0,0\r");
delay();
printf("at+waip=1\r");
delay();
printf("at+crmp=3,6,0,2\r");
delay();
printf("at+crmp=0,0,0,0\r");
TI1=0;
RI1=0;
TI1=0;
RI1=0;
ES1=1;
EA=1;
while(1);
}
void coming() interrupt 7 using 0 //interrupt n interruptting from 8n+3 address
{ TI1=1; //serial1 0x3b n=7 { TI=1;
RI1=0;
if((SBUF1=='R')||(SBUF1=='+'))
{string[0]=SBUF1;
}
else if(((SBUF1=='I')&&(string[0]=='R'))||((SBUF1=='C')&&(string[0]=='+')))
{string[1]=SBUF1;
if(string[1]=='I') //COMING RING
{ printf("at+crmp=0,11,0,2\n");
delay();
printf("at+crmp=0,0,0,0\n");
delay();
printf("ath\n");
printf("atd13161528267;\r");
for(i=0;i <LENGTH;i++)
{string[i]='w';}
TI1=0;
}
else
{ i=2;
j=2;
do
{
string[i]=getkey();
if(string[i++]==0x0d)
j--;
}
while(j!=0);
// printf(string);
i=FEPS(string);
if(string[i]=='p')
{
TI1=1;
printf("at+crmp=0,13,0,9\n");
delay();
printf("at+crmp=0,0,0,0\n");
delay();
printf("at+cmgs=13161528267\n");
ES=1; //serial0 interrupt enable
for(i=0;i <LENGTH;i++)
{string[i]='w';}
TI1=0;
}
else if(string[i]=='s')
{
j=chargestate();
TI1=1;
printf("at+crmp=3,15,0,7\n"); //CHARGE STATE
delay();
printf("at+crmp=0,0,0,0\n");
delay();
printf("at+cmgs=");
printf(Ephone);
putchar(0x0d);
delay();
putchar(j);
putchar(0x1a);
for(i=0;i <100;i++)
{string[i]='w';}
TI1=0;
RI1=0;
}
else if(string[i]=='f')
{
flag++;
TI1=1;
printf("at+crmp=3,10,0,1\n"); //change num E
delay();
printf("at+crmp=0,0,0,0\n");
delay();
printf("AT+CPBW=1,");
i++;
while((string[i] <0x3a)&&(string[i]> 0x2f))
{
putchar(string[i++]);
}
printf(",,");
putchar(0x0d);
for(i=0;i <LENGTH;i++)
{string[i]='w';
}
TI1=0;
RI1=0;
}
else if(string[i]=='e')
{
flag++;
TI1=1;
printf("at+crmp=3,6,0,1\n"); //change num E
printf("AT+CPBW=2,");
i++;
while((string[i] <0x3a)&&(string[i]> 0x2f))
{
putchar(string[i++]);
}
printf(",,");
putchar(0x0d);
for(i=0;i <LENGTH;i++)
{string[i]='w';
}
TI1=0;
RI1=0;
}
else
{for(i=0;i <LENGTH;i++)
{string[i]='w';
}
TI1=0;
RI1=0;
goto out;
}
}
}
else {TI1=1;
#ifdef debug
printf("wrong out\n");
#endif
TI1=0;
RI1=0;
goto out;
}
out :
TI1=1;
#ifdef debug
printf("during serial1 \n");
#endif
RI1=0;
TI1=0;
RI1=0;
TI1=0;
EA=1;
}