📄 main.c
字号:
//----------------------------------------------------
//version 1.0
//2006.12.7
//w77e58 serial port 0 115200bps, serial port 1 9600bps;
//serial0 can use t1 or t2 as baud generator, serial 1 can olny use t1 as baud generator.
//----------------------------------------------------
#include "w77e58.h"
#include <absacc.h>
#include <string.h>
sbit LED0 = P1^0;
sbit LED1 = P1^1;
bit endGps, gpsOk, endS0, endS1, needOk,needSms,needCMGS, needCMTI, needSpc;
unsigned char data gpsm,gprsm,sendm0,sendm1,s0len,s1len,gprsnum;
unsigned char data s0char, s1char;
unsigned char xdata rmcbuf[256] _at_ 0x0000; //rmc data
unsigned char xdata gpsbuf[256] _at_ 0x0100; //gps receive buffer
unsigned char xdata gprsbf[256] _at_ 0x0200; //gprs receive buffer
unsigned char xdata sends0[128] _at_ 0x0300; //serial port 0 send buffer
unsigned char xdata sends1[128] _at_ 0x0380; //serial port 1 send buffer,
unsigned char code maskall[16]={'$','P','G','R','M','O', ',', ',', '2',0x0d,0x0a,0x00};
unsigned char code onlyrmc[32]={'$','P','G','R','M','O', ',', 'G','P','R','M','C', ',', '1',0x0d,0x0a,0x00};
unsigned char code ate0[16]={'a','t','e','0',0x0d,0x0a,0x00};
unsigned char code cscs[16]={'a','t','+','c','s','c','s','=','"','G','S','M','"',0x0d,0x0a,0x00};
unsigned char code cmgf[16]={'a','t','+','c','m','g','f','=','1',0x0d,0x0a,0x00};
unsigned char code cmgs[32]={'a','t','+','c','m','g','s','=',
'1','3','6','2','1','8','2','6','9','5','2',0x0d,0x0a,0x00};
unsigned char code cmgr[16]={'a','t','+','c','m','g','r','=','1',0x0d,0x0a,0x00};
unsigned char code cmgd[16]={'a','t','+','c','m','g','d','=','1',0x0d,0x0a,0x00};
void system_init(void)
{
TMOD=0x21;
TH1=0xFD;
TL1=0xFD;
SCON1=0x50; //9600 serial port 1
T2CON=0x30;
RCAP2H=0xFF;
RCAP2L=0xFD;
TH2=0xFF;
TL2=0xFD;
SCON=0x50; //115200bps serial port 0
PMR=0x41; //enable on chip 1k sram
TR1=1;
TR2=1;
ES=1;
ES1=1;
EA=1;
}
void serial0_str(unsigned char *str, unsigned char tchar)
{
unsigned char i;
while(endS0);
for(i=0; str[i]!=tchar; i++)
sends0[i] = str[i];
s0len=i;
endS0=1;
sendm0=0;
TI=1;
}
void serial1_str(unsigned char *str, unsigned char tchar)
{
unsigned char i;
while(endS1);
for(i=0; str[i]!=tchar; i++)
sends1[i] = str[i];
s1len=i;
endS1=1;
sendm1=0;
TI1=1;
}
//gprs
void serial0_isr(void) interrupt 4 using 1
{
if(RI!=0) {
RI=0;
s0char=SBUF;
gprsbf[gprsm++]=s0char;
if(s0char==0x3e)
needSms=1;
else if(s0char==0x20)
needSpc=1;
else if(s0char==0x0a)
gprsnum=gprsnum+1;
}
if(TI!=0) {
TI=0;
if(sendm0<s0len)
SBUF=sends0[sendm0++];
else
endS0=0;
}
}
//gps
void serial1_isr(void) interrupt 7 using 2
{
if(RI1!=0) {
RI1=0;
s1char=SBUF1;
if(s1char=='$'){
endGps=1;
gpsm=0;
}
if(endGps){
switch(gpsm){
case 3:
if(s1char!='R')
endGps=0;
break;
case 4:
if(s1char!='M')
endGps=0;
break;
case 5:
if(s1char!='C')
endGps=0;
break;
}
if(endGps){
gpsbuf[gpsm]=s1char;
gpsm=gpsm+1;
if(s1char==0x0a){
ES1=0;
gpsm=gpsm-1;
rmcbuf[gpsm]=0x00;
gpsm=gpsm-1;
rmcbuf[gpsm]=0x1a;
for(;gpsm;){
gpsm=gpsm-1;
rmcbuf[gpsm]=gpsbuf[gpsm];
}
endGps=0;
gpsOk=1;
ES1=1;
}
}
}
}
if(TI1!=0) {
TI1=0;
if(sendm1<s1len)
SBUF1=sends1[sendm1++];
else
endS1=0;
}
}
void confgps(void)
{
serial1_str(maskall,0x00);
serial1_str(onlyrmc,0x00);
}
void confgprs(void)
{
gprsnum=0;
gprsm=0;
serial0_str(ate0,0x00);
while(gprsnum<2);
gprsnum=0;
gprsm=0;
serial0_str(cscs,0x00);
while(gprsnum<2);
gprsnum=0;
gprsm=0;
serial0_str(cmgf,0x00);
while(gprsnum<2);
gprsnum=0;
gprsm=0;
}
void wait(void)
{
TR0=0;
TF0=0;
TL0=0;
TH0=0;
TR0=1;
while(TF0==0);
}
void getsms(void)
{
gprsnum=0;
gprsm=0;
serial0_str(cmgr,0x00);
// while(gprsnum<2);
// wait();
// if(gprsnum>2){
while(gprsnum<5);
needCMGS=1; //if there is sms gprsnum=5, if no be 2
// }
gprsnum=0;
gprsm=0;
}
void delsms(void)
{
gprsnum=0;
gprsm=0;
serial0_str(cmgd,0x00);
while(gprsnum<2); //success or not there where be 2
gprsnum=0;
gprsm=0;
}
void sendsms(void)
{
gprsnum=0;
gprsm=0;
needSms=0;
needSpc=0;
serial0_str(cmgs,0x00);
LED0=0;
while(needSms==0);
while(needSpc==0);
LED1=0;
serial0_str(rmcbuf,0x00);
while(gprsnum<5);
gprsnum=0;
gprsm=0;
needSms=0;
}
void main(void)
{
endGps=1;
gpsOk=0;
endS0=0;
endS1=0;
needOk=0;
needSms=0;
needSpc=0;
needCMGS=0;
needCMTI=0;
gpsm=0;
gprsm=0;
sendm0=0;
sendm1=0;
s0len=0;
s1len=0;
gprsnum=0;
system_init();
confgprs();
confgps();
LED0=1;
LED1=1;
while(gpsOk==0);
sendsms();
LED0=1;
LED1=1;
while(1){
if(gprsnum>1){ //if sms ring , gprsnum=2
LED0=1;
LED1=1;
// LED0=0;
// getsms();
// if(needCMGS){
// LED1=0;
sendsms();
// LED1=1;
gpsOk=0;
// }
delsms();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -