⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 w77e58 双串口 单片机 GPS GPRS软件 可收发定位短信
💻 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 + -