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

📄 atframe.c

📁 pic18f6520上运行的gprs通讯处理程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			IICMEM=BFIIC;
			EEPW();	
			return;
		}
		if(R3=='B')			//bps
		{
			Get_char1();
			if(R3!='P') return;	//此帧数据无效
			Get_char1();
			if(R3!='S') return;
			Get_char1();
			if(R3!=':') return;
			Get_char1();
			if(SFrameFG.bits.Contin) return;
			if(R3=='1') CONFIGFG.bits.Com1Bit9=1;
			else if(R3=='0') CONFIGFG.bits.Com1Bit9=0;
			
			subah=0;
			subal=AT_CONFIGFG;
			IICNUM=1;
			IICMEM=&CONFIGFG.ch;
			EEPW();	
			Get_char1();
			if(R3!=',') return;
			Get_Lenth1(3);
			if(temp3.Uint==300) R0=0;
			else if(temp3.Uint==600) R0=1;
			else if(temp3.Uint==120) R0=2;
			else if(temp3.Uint==240) R0=3;
			else if(temp3.Uint==480) R0=4;
			else if(temp3.Uint==960) R0=5;
			else if(temp3.Uint==192) R0=6;
			else return;
			if(SFrameFG.bits.Contin) return;
			Com1BPS=R0;
			subah=0;
			subal=AT_Com1BPS;
			IICNUM=1;
			IICMEM=&Com1BPS;
			EEPW();	
			Init_Com1();
			return;
		}
		if(R3=='M')
		{
			Get_char1();
			if(R3!='O') return;	//此帧数据无效
			Get_char1();
			if(R3!='D') return;
			Get_char1();
			if(R3!='E') return;
			Get_char1();
			if(R3!=':') return;
			
			Get_char1();
			if((R3!=MODE_MS)&&(R3!=MODE_GPRS)) return;
			if(SFrameFG.bits.Contin) return;
			Mode=R3;
			subah=0;
			subal=AT_MODE;
			IICNUM=1;
			IICMEM=&Mode;
			EEPW();	
			return;
		}
		if(R3=='R')			// RedialTime ???sec  重新连接间隔(>=10,<=250秒)
		{
			Get_char1();
			if(R3!='D') return;	//此帧数据无效
			Get_char1();
			if(R3!='T') return;
			Get_char1();
			if(R3!=':') return;
			
			Get_Lenth1(3);
			if(temp3.Uint>250) return;
			if(temp3.Uint<10) return;
			if(SFrameFG.bits.Contin) return;
			SetReSec=temp3.Uchar[0];
			subah=0;
			subal=AT_SetReSec;
			IICNUM=1;
			IICMEM=&SetReSec;
			EEPW();	
			return;
		}
		if(R3=='H')		// ###***HD:1/0,HeadID(12)	//
		{
			Get_char1();
			if(R3!='D') return;	//此帧数据无效
			Get_char1();
			if(R3!=':') return;
			Get_char1();
			if(SFrameFG.bits.Contin) return;
			if(R3=='1') CONFIGFG.bits.enID=1;
			else if(R3=='0') CONFIGFG.bits.enID=0;
			else return;
			subah=0;
			subal=AT_CONFIGFG;
			IICNUM=1;
			IICMEM=&CONFIGFG.ch;
			EEPW();	
			Get_char1();
			if(R3!=',') return;
			for(R0=0;R0<12;R0++)
			{
				Get_char1();
				if(SFrameFG.bits.Contin) break;
				if((R3==0x0d)||(R3==0x0a)||(R3==' ')) break;
				BFIIC[R0]=R3;
			}
			BFIIC[R0]=' ';
			subah=0;
			subal=AT_HeadID;
			IICNUM=14;
			IICMEM=BFIIC;
			EEPW();	
			subah=0;
			subal=AT_HeadID;
			IICNUM=14;
			IICMEM=HeadID;
			EEPR();	
			return;
		}
		if(R3=='T')		//###***TEST:1/0,?mins	//信跳测试周期
		{
			Get_char1();
			if(R3!='E') return;	//此帧数据无效
			Get_char1();
			if(R3!='S') return;
			Get_char1();
			if(R3!='T') return;
			Get_char1();
			if(R3!=':') return;
			Get_char1();
			if(SFrameFG.bits.Contin) return;
			if(R3=='1') CONFIGFG.bits.enTest=1;
			else if(R3=='0') CONFIGFG.bits.enTest=0;
			else return;
			subah=0;
			subal=AT_CONFIGFG;
			IICNUM=1;
			IICMEM=&CONFIGFG.ch;
			EEPW();	
			Get_char1();
			if(R3!=',') return;
			Get_char1();
			CheckNum();
			if(!R3) return;	//not Number
			if(SFrameFG.bits.Contin) return;
			SetMinTest=R3-0x30;
			subah=0;
			subal=AT_TestLong;
			IICNUM=1;
			IICMEM=&SetMinTest;
			EEPW();	
			return;
		}
		return;
	}
		
check1_continue:
	if(COMFG1.bits.AFrame)
		SendATFG.bits.Tranning=1;
	if(!SFrameFG.bits.Contin)
		SendATFG.bits.Tranning=1;
}
	

//ret 0: err
//ret 1: continue
//ret 2: ok
unsigned char CheckID2(void)
{
	RXptbak.pt=RXpt2.pt;
	temp4.Uchp=Framept2.pt;
	ATFrameFG.bits.Contin=0;
	for(R0=0;R0<17;R0++)
	{
		Get_char2();
		if(ATFrameFG.bits.Contin) return(1);
		if(HeadCS[R0]!=R3)
		{
			Framept2.data=temp4.Uint;
			IPDlen=0;
			TXSAVED2=0;
			return(0);
		}
		if(R3==' ') break;
	}
	IPDlen-=(R0+1);
	TXSAVED2=IPDlen;
	Framept2.data=temp4.Uint;
	return(2);
}
	
void Com2Trans(void)
{
	if(!TXSTA1bits.TRMT) 
		return;		//use tx1
	if(!IPDlen) SendATFG.bits.IPDing=0;
	if(!SendATFG.bits.IPDing)
	_asm
	goto EndTX1
	_endasm
	if(!IPDtran)
	{
	/*	if(CONFIGFG.bits.enID)
		{
			R0=CheckID2();
			if(R0==0)
			{
			//	Framept2.data=FrameEnd2.data;		//???????????
			//	IPDlen=0;
			//	COMFG2.bits.AFrame=0;
				return;
			}
			if(R0!=2) return;
		}//*/
		IPDtran=1;
	}
	if(CONFIGFG.bits.enID)
	{
		if(!TXSAVED2)
		{
			IPDtran=0;
			return;
		}
	}

	TXSTA1bits.TXEN=1;		//打开发送允许位
	
	RXptbak.pt=RXpt2.pt;
	temp4.Uchp=Framept2.pt;
	ATFrameFG.bits.Contin=0;
	Get_char2();
	if(ATFrameFG.bits.Contin) return;
	Framept2.pt=temp4.Uchp;
	
	if(CONFIGFG.bits.Com1Bit9)
	{
		R0=0;
		if(R3&0x01) R0++;
		if(R3&0x02) R0++;
		if(R3&0x04) R0++;
		if(R3&0x08) R0++;
		if(R3&0x10) R0++;
		if(R3&0x20) R0++;
		if(R3&0x40) R0++;
		if(R3&0x80) R0++;
		if(R0&0x01) TXSTA1bits.TX9D=1;
		else TXSTA1bits.TX9D=0;
	}
	TXREG1=R3;
	IPDlen--;
	TXSAVED2--;
}

void Com1Trans(void)
{
	if(!TXSTA2bits.TRMT) 
		return;		//use tx2

	TXSTA2bits.TXEN=1;		//打开发送允许位
	
	if(SendATFG.bits.ATing)
	{
		if(TXpt1.pt>=ATBUF+32) goto Com1TrErr;
		if(TXpt1.pt<ATBUF)
		{
		Com1TrErr:
			SendATFG.bits.ATing=0;
			SendATFG.bits.DATAing=0;
			_asm
			goto EndTX2
			_endasm
		}
		R3=*(TXpt1.pt++);
		if(R3==0x0d)
		{
			if(SendATFG.bits.cipstart)
			{
				TXpt1.pt=ATBUF+1;
				subah=0;
				subal=AT_IPadr;
				IICNUM=15;
				IICMEM=ATBUF+1;
				EEPR();
				subah=0;
				subal=AT_IPport;
				IICNUM=5;
				IICMEM=ATBUF+19;
				EEPR();
				ATBUF[0]='"';
				ATBUF[16]='"';
				ATBUF[17]=',';
				ATBUF[18]='"';
				ATBUF[24]='"';
				ATBUF[25]=0x0d;
				R3=ATBUF[0];
				
			}
			else SendATFG.bits.ATing=0;
			SendATFG.bits.cipstart=0;
		}
	}
	else
	{
		_asm
		goto EndTX2
		_endasm
	}
	TXREG2=R3;
}

void ResetCOMBUF2(void)	
{
	RXpt2.pt=COMBUF2;
	TXpt2.pt=COMBUF2;
	Framept2.pt=COMBUF2;
	COMFG2.ch=0x0;
}

void ResetCOMBUF1(void)	
{
	RXpt1.pt=COMBUF1;
	TXpt1.pt=COMBUF1;
	Framept1.pt=COMBUF1;
	COMFG1.ch=0x0;
	SendATFG.bits.Tranning=0;
}
	
void ATframe(void)
{
	ATFrameFG.ch=0;
	if(COMFG2.bits.BUF_over)
	{
		INTCONbits.GIE=0;
		ResetCOMBUF2();
		INTCONbits.GIE=1;
	}
	if(COMFG2.bits.FramErr)
	{
		INTCONbits.GIE=0;
		Framept2.data=FrameErr2.data;
		COMFG2.bits.FramErr=0;
		COMFG2.bits.AFrame=0;
		INTCONbits.GIE=1;
	}
ATframe1:	
	INTCONbits.GIE=0;
	RXptbak.pt=RXpt2.pt;
	INTCONbits.GIE=1;
	if(Framept2.data==RXptbak.data)
	{
		COMFG2.bits.AFrame=0;
		return;
	}
	temp4.Uchp=Framept2.pt;		//temp4.Uchp 存储FRAME指针
	Get_char2();
	if(R3=='>')		// > TSsign
	{
		Framept2.pt=temp4.Uchp;
		ATFrameFG.bits.TSsign=1;
		return;
	}
	
	if(R3=='+')
	{
		Get_char2();
		if(ATFrameFG.bits.Contin) return;
		if(R3=='I')		//+IPD(len):
		{
			Get_char2();
			if(R3!='P') goto check_continue;
			Get_char2();
			if(R3!='D') goto check_continue;
			Get_Lenth2(3);
			Get_char2();
			if(R3!=':') goto check_continue;
			if(ATFrameFG.bits.Contin) return;
			IPDlen=temp3.Uint;
			SendATFG.bits.IPDing=1;
			TXSAVED2=IPDlen;
			Framept2.pt=temp4.Uchp;
			return;	
		}

		if(R3=='C')		//+C...
		{
			Get_char2();
			if(ATFrameFG.bits.Contin) return;
		/*	if(R3=='O')	//+COPS: 0,0,"CHINA MOBILE"
			{
				Get_char2();
				if(R3!='P') goto check_continue;
				Get_char2();
				if(R3!='S') goto check_continue;
				Get_char2();
				if(R3!=':') goto check_continue;
				Get_char2();
				if(R3!=0x20) goto check_continue;
				Get_char2();
				if(R3!='2') goto check_continue;
				if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1;
				if(ATFrameFG.bits.Contin) return;
				WorkFG.bits.NetERR=1;
				goto	End_AFrame;
			}	//*/
			
			if(R3=='S')	//+CSQ: 0
			{
				Get_char2();
				if(R3!='Q') goto check_continue;
				Get_char2();
				if(R3!=':') goto check_continue;
				Get_char2();
				if(R3!=0x20) goto check_continue;
				Get_Lenth2(3);
				Get_char2();
				if(R3!=',') goto check_continue;
				Get_char2();				//?????????????
				R3-=0x30;
				if(R3>0x09) goto check_continue;
				if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1;
				if(ATFrameFG.bits.Contin) return;
				if(R3==9) R3=99;
				NetBer=HEX1BCD1(R3);
				NetRssi=HEX1BCD1(temp3.Uchar[0]);
				WorkFG.bits.NetWeek=0;
				if(NetRssi<CS_rssi) WorkFG.bits.NetWeek=1;
				if(NetBer>CS_ber) WorkFG.bits.NetWeek=1;
				goto	End_AFrame;
			}
			
			if(R3=='R')	//+CREG: 0,1
			{
				Get_char2();
				if(R3!='E') goto check_continue;
				Get_char2();
				if(R3!='G') goto check_continue;
				Get_char2();
				if(R3!=':') goto check_continue;
				Get_char2();
				if(R3!=0x20) goto check_continue;
				Get_char2();
				Get_char2();
				if(R3!=',') goto check_continue;
				Get_char2(); 
				if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1;
				if(ATFrameFG.bits.Contin) return;
				WorkFG.bits.NetERR=1;
				if(R3=='1') WorkFG.bits.NetERR=0;
				if(R3=='5') WorkFG.bits.NetERR=0;
				goto	End_AFrame;
			}
			
			if(R3=='M')		//+CM...
			{
				Get_char2();
				if(ATFrameFG.bits.Contin) return;
				if(R3=='E')	//+CME ERROR:
				{
					Get_char2();
					if(R3!=' ') goto check_continue;
					Get_char2();
					if(R3!='E') goto check_continue;
					Get_char2();
					if(R3!='R') goto check_continue;
					Get_char2();
					if(R3!='R') goto check_continue;
					Get_char2();
					if(R3!='O') goto check_continue;
					Get_char2();
					if(R3!='R') goto check_continue;
					Get_char2();
					if(R3!=':') goto check_continue;
					if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1;
			
					if(ATFrameFG.bits.Contin) return;
					ATFrameFG.bits.CMEERR=1;
					goto	End_AFrame;
				}
				
				if(R3=='T')	//+CMTI: index
				{
					Get_char2();
					if(R3!='I') goto check_continue;
					Get_char2();
					if(R3!=':') goto check_continue;
					if(!COMFG2.bits.AFrame)
					{
						ATFrameFG.bits.Contin=1;
						return;
					}
					Find_char2(',');
					Get_char2();
					if(R3==' ') Get_char2();
					CheckNum();
					if(!R3) goto check_continue;	//not Number
					MSindex[0]=R3;
					Get_char2();
					if(R3>=0x3a||R3<0x30||ATFrameFG.bits.Contin) MSindex[1]='0';
					else MSindex[1]=R3;
					
					WorkFG.bits.NewMS=1;
					goto	End_AFrame;
				}
				
				if(R3=='S')	//+CMSS: <mr>
				{
					Get_char2();
					if(R3=='S')
					{
						Get_char2();
						if(R3!=':') goto check_continue;
						if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1;
						if(ATFrameFG.bits.Contin) return;
						ATFrameFG.bits.SendMS=1;
						goto	End_AFrame;
					}
					if(R3==' ')
					{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -