www.pudn.com > gprs.rar > GPRS.C
//for simcom300 Modle
#include "p18f6520.h"
#include "delays.h"
#include "portb.h"
#include "GPRS.h"
#include "gprspg.h"
/**********************************************************
高低中断入口
**********************************************************/
#pragma interrupt High_isr save = PROD,PCLATH,PCLATU,TBLPTR,TABLAT//,section(".tmpdata")//,section("MATH_DATA")
#pragma code Highisrcode=0x0008 // Locate ISR handler code at interrupt vector
void Highisrhandler(void) // This function directs execution to the
{ // actual interrupt code
_asm
goto High_isr
_endasm
}
#pragma code
/*
#pragma interrupt Low_isr save = PROD//,PCLATH,PCLATU,TBLPTR,TABLAT,section("MATH_DATA"),section(".tmpdata")
#pragma code Lowisrcode=0x0018
void Lowisrhandler(void)
{
_asm
goto Low_isr
_endasm
}
#pragma code
*/
/**********************************************************
高优先级中断处理子程序
**********************************************************/
void High_isr(void)
{
if((PIR1bits.RC1IF)&&(PIE1bits.RC1IE)) USART1_REC();
if((PIR3bits.RC2IF)&&(PIE3bits.RC2IE)) USART2_REC();
if((INTCONbits.TMR0IF)&&(INTCONbits.TMR0IE))
{
INTCONbits.TMR0IF = 0;
TMR0L += 6; // 8ms
if(COMFG1.bits.RXING)
{
if(++RXOVERTMR1>=10) //80ms 外串口接收停止超过80毫秒,表示接收完一贞
{
if(!COMFG1.bits.AFrame)
{
COMFG1.bits.AFrame=1; //待处理通讯贞标志
FrameEnd1.data=RXpt1.data; //此通讯贞结束地址
COMFG1.bits.RXING=0; //清除正在接受标志
RXOVERTMR1=0; //字间间隔计时器
}
}
}
if(COMFG2.bits.RXING)
{
if(++RXOVERTMR2>=2) //16ms 内串口(连接模块)接收停止超过16毫秒,表示接收完一贞
{
if(!COMFG2.bits.AFrame)
{
COMFG2.bits.AFrame=1;
FrameEnd2.data=RXpt2.data;
COMFG2.bits.RXING=0;
RXOVERTMR2=0;
}
}
}
TXOVERTMR1++;
TXOVERTMR2++;
if(!(ClockTMR&0x1f))
{
if(dispErr) PWR_Lap=~PWR_Lap;
else PWR_Lap=0;
if(Connecting) SIG_Lap=~SIG_Lap;
}
if((++ClockTMR)&0x80) //8ms*128=1024ms
{
if(++SecErr>=15)
{
if(SecErr>=15) RUNERR();
}
Have1SEC = 1;
ClockTMR-=0x80;
}
}
}
/***********************************************************
main process entry
***********************************************************/
void main(void)
{
INTCON = 0;
SecErr = 0;
GeneralFlag1.ch = 0; //通用标志1清为零
dispErr=1;
ClockTMR = 0; //累加器清零
PORT_INIT(); //port initialize
initsfr(); //初始化特殊功能寄存器
Delay50ms();
RST_2=0;
Nop();
SIM_ON_IO=0;
Nop();
SIM_ON=0;
R0=50;
while(R0--)
{
Delay50ms();
}
RST_2=1;
Nop();
SIM_ON=1;
Nop();
SIM_ON_IO=1;
initsfr(); //初始化特殊功能寄存器
WDTCONbits.SWDTEN=1;
INTCONbits.GIE=1;
R0=120;
while(R0--)
{
Delay50ms();
SecErr=0;
}
Init_Com1();
Init_Com2();
Init_ServerIP();
InitGPRS();
if(WorkFG.bits.InitErr)
{
R0=40;
while(R0--)
{
Delay50ms();
}
RUNERR();
}
Init_Com1();
Init_MODE();
NetRssi=NetBer=0x99; //信号强度未知
ATcsq();
if(!WaitFrame2()) WaitFrame2();
ATframe();
if(NetRssi>=10) dispErr=0;
InitGPRS();
Init_Com1();
Com1Sec=0;
Com2Sec=0;
while(1)
{
ClrWdt(); //使用软件件控制的WDT
Check_MODE();
if(SendATFG.bits.IPchange||WorkFG.bits.InitErr)
{
if(SendATFG.bits.IPchange||WorkFG.bits.InitErr)
{
ATcsq();
if(!WaitFrame2()) WaitFrame2();
ATframe();
InitGPRS();
if(WorkFG.bits.InitErr) RUNERR();
}
}
/* if(RXpt2.pt==Framept2.pt)
{
if(RXpt2.pt!=COMBUF2)
{
INTCONbits.GIE=0;
if(RXpt2.pt==Framept2.pt) ResetCOMBUF2();
INTCONbits.GIE=1;
}
}
else
{ */
if(SendATFG.bits.IPDing) Com2Trans();
else
{
EndTX1();
IPDtran=0;
if(WorkFG.bits.Online||COMFG2.bits.AFrame||COMFG2.bits.FramErr)
ATframe();
}
// }
if(WorkFG.bits.Ring)
{
if(!((SendATFG.ch&0x0f)||(COMFG2.ch&0x0f)))
ATh0();
}
/* if(RXpt1.pt==Framept1.pt)
{
if(RXpt1.pt!=COMBUF1)
{
INTCONbits.GIE=0;
if(RXpt1.pt==Framept1.pt) ResetCOMBUF1();
INTCONbits.GIE=1;
}
}
else
{ */
if(SendATFG.bits.Tranning)
{
if(WorkFG.bits.Online)
{
if(SendATFG.bits.DATAing) SendAbyte1();
else BeginSend1();
}
}
else
Serialframe();
// }
if(ConnectOk)
{
ConnectOk=0;
goto ssssdd;
}
if(CONFIGFG.bits.enTest)
{
if(MinTest>=SetMinTest)
{
ssssdd:
if(RXpt1.pt==Framept1.pt)
{
INTCONbits.GIE=0;
if(!(COMFG1.ch&0x0f))
{
ResetCOMBUF1();
if(!CONFIGFG.bits.enID)
{
for(R0=0;R0<17;R0++)
{
R3=HeadCS[R0];
*(RXpt1.pt++)=R3;
if(R3==' ') break;
}
}
*(RXpt1.pt++)=0x0d;
*(RXpt1.pt++)=0x0a;
COMFG1.bits.AFrame=1;
FrameEnd1.data=RXpt1.data;
RXOVERTMR1=0;
MinTest=0;
}
INTCONbits.GIE=1;
}
}
}
if(Have1SEC) do_SEC();
if(FSR1L||FSR2L)
{
if(FSR1L||FSR2L)
{
FSR2=0x0700;
FSR1=0x0700;
RUNERR();
}
}
}
}
void BeginSend1(void)
{
ATcipsend();
SendATFG.bits.WaitTS=1;
SendATFG.bits.DATAing=1;
TXOVERTMR2=0;
subah=0;
subal=AT_HeadID;
IICNUM=14;
IICMEM=HeadID;
EEPR();
HeadCS[0]='I';
HeadCS[1]='D';
HeadCS[2]=':';
SendATFG.bits.HDing=1;
TXpt1.pt=HeadCS;
TXSAVED1=0;
R0=50;
while(R0--)
{
DelayXms(1);
if(!SendATFG.bits.WaitTS) return;
}
TXSTA2bits.TXEN=1; //没在50毫秒内收到提示
ATclear();
SendATFG.bits.WaitTS=0;
SendATFG.bits.DATAing=0;
}
void SendAbyte1(void)
{
if(!TXSTA2bits.TRMT) return; //use tx2
TXSTA2bits.TXEN=1;
if(CONFIGFG.bits.enID)
{
if(SendATFG.bits.HDing)
{
if(TXpt1.pt<=(HeadCS+16))
{
R3=*(TXpt1.pt++);
TXREG2=R3;
if(R3==' ') SendATFG.bits.HDing=0;
// BufJYH1=0;
return;
}
}
}
SendATFG.bits.HDing=0;
if(COMFG1.bits.AFrame)
{
if(Framept1.pt==FrameEnd1.pt)
{
COMFG1.bits.AFrame=0;
SendEndcom1:
TXREG2=0x1a;
SendATFG.bits.Tranning=0;
SendATFG.bits.DATAing=0;
SecCnt=0;
MinTest=0; //每次数据传输完,重置信跳计时
return;
}
}
if(TXSAVED1>=480) goto SendEndcom1;
RXptbak.pt=RXpt1.pt;
temp4.Uchp=Framept1.pt;
SFrameFG.bits.Contin=0;
Get_char1();
if(SFrameFG.bits.Contin)
{
if(COMFG1.bits.RXING) return;
COMFG1.bits.AFrame=0;
goto SendEndcom1;
}
Framept1.pt=temp4.Uchp;
TXREG2=R3;
// BufJYH1+=R3;
TXSAVED1++;
}
void do_SEC(void)
{
if(!Have1SEC) return;
Have1SEC=0;
SecErr = 0;
Main_Init();
if(WorkFG.bits.Online)
{
Connecting=0;
SIG_Lap=0;
if(++SecCnt>=60)
{
SecCnt=0;
MinTest++;
}
if((++Com1Sec)>=63)
{
if(!SendATFG.bits.IPDing)
{
Com1Sec=0;
INIT_USART1();
}
}
if((++Com2Sec)>=63)
{
if(!(SendATFG.bits.DATAing||SendATFG.bits.ATing))
{
Com2Sec=0;
INIT_USART2();
}
}
}
else
{
// SIG_Lap=1; //由终端完成闪烁显示
Connecting=1;
SecRedail++;
MinTest=0;
}
if(COMFG2.bits.RXING) goto do_SEC1;
if(COMFG2.bits.AFrame) goto do_SEC1;
if(SendATFG.ch&0x0f) goto do_SEC1;
CheckLine();
if(WorkFG.bits.NewMS)
{
WorkFG.bits.NewMS=0;
temp1.Uchar[1]=MSindex[1];
temp1.Uchar[0]=MSindex[0];
ATcmgr();
if(!WaitFrame2()) WaitFrame2();
ATframe();
if(ATFrameFG.bits.CMEERR) WorkFG.bits.NewMS=1;
else if(ATFrameFG.bits.cmgd)
{
ATcmgd();
if(!WaitFrame2()) WaitFrame2();
ResetCOMBUF2();
}
else WorkFG.bits.TestMS=1;
}
if(COMFG1.ch&0x0f) goto do_SEC1;
if(COMFG2.ch&0x0f) goto do_SEC1;
if(WorkFG.bits.TestMS) CheckMS();
do_SEC1:
Nop();
}
void Main_Init(void)
{
IPR1=0xff;
IPR2=0xff;
IPR3=0xff;
if(T0CON!=T0CON_init) T0CON=T0CON_init;
T1CON=0;
T2CON=0;
T3CON=0;
T4CON=0;
CCP1CON=0;
CCP2CON=0;
CCP3CON=0;
CCP4CON=0;
CCP5CON=0;
INTCON2=0x07; //TMR0IP,INT3IP,RBIP=1
INTCON3=0xc0; //INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INT2IF INT1IF
INTCON|=0b11100000; //GIEH,GIEL,T0IE=1
INTCONbits.RBIE=0;
INTCONbits.INT0IE=0;
RCONbits.IPEN=0;
PIE2=0;
if(TRISA!=TRISA_INIT) TRISA=TRISA_INIT;
if(TRISB!=TRISB_INIT) TRISB=TRISB_INIT;
if(TRISC!=TRISC_INIT) TRISC=TRISC_INIT;
if(TRISD!=TRISD_INIT) TRISD=TRISD_INIT;
if(TRISE!=TRISE_INIT) TRISE=TRISE_INIT;
if(TRISF!=TRISF_INIT) TRISF=TRISF_INIT;
if(TRISG!=TRISG_INIT) TRISG=TRISG_INIT;
ADCON1=0X0F;
CMCON=0X07;
Nop();
RST_2=1;
Nop();
SIM_ON=1;
}
/***********************************************************
Initialize port and tris process subroutine
************************************************************/
void PORT_INIT(void)
{
TRISA=TRISA_INIT;
Nop();
PORTA=PORTA_INIT;
TRISB=TRISB_INIT;
Nop();
PORTB=PORTB_INIT;
TRISC=TRISC_INIT;
Nop();
PORTC=PORTC_INIT;
TRISD=TRISD_INIT;
Nop();
PORTD=PORTD_INIT;
TRISE=TRISE_INIT;
Nop();
PORTE=PORTE_INIT;
TRISF=TRISF_INIT;
Nop();
PORTF=PORTF_INIT;
TRISG=TRISG_INIT;
Nop();
PORTG=PORTG_INIT;
ADCON1=0X0F; //make porta and porte to digital i/o
CMCON=0X07;
}
/**********************************************************
初始化特殊功能寄存器
**********************************************************/
void initsfr(void)
{
INTCON=0;
Init_Com1();
Init_Com2();
SSPCON1=0;
SSPSTAT=0;
RCON=0b00011111; // disable priority levels
PIR1=0;
PIR2=0;
PIR3=0;
CCP1CON=0;
CCP2CON=0;
CCP3CON=0;
CCP4CON=0;
PIE1=PIE1_init; //0x20 // RC1IE & SSPIE
PIE2=0;
PIE3=PIE3_init; //0x20; // RC2IE
TMR0L=0;
TMR0H=0;
T0CON=T0CON_init; //timer0 ON/8bits/1:32预分频器 8ms@4MHz
T1CON=0;
T2CON=0;
T3CON=0; // set tmr2 for pwm
T4CON=0;
IPR1=0xff;
IPR2=0xff;
IPR3=0xff;
INTCON2=0x07; //TMR0IP,INT3IP,RBIP=1
INTCON3=0xc0; //INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INT2IF INT1IF
INTCON=0b01100000; //GIEH,GIEL,T0IE=1
}
/***********************************************************
Recieve single byte from infrared or 485
************************************************************/
void USART1_REC(void)
{
if((RCSTA1bits.OERR)||(RCSTA1bits.FERR))
_asm
goto INIT_USART1 //是否有溢出错误or帧错误
_endasm
Rint0=RCREG1;
COMFG1.bits.RXING=1;
RXOVERTMR1=0;
Com1Sec=0;
if(COMFG1.bits.BUF_over) return;
// tempINT.Uchp=RXpt1.pt;
/* if(COMFG1.bits.rec0D)
{
if(Rint0!=0x0a)
{
COMFG1.bits.AFrame=1;
FrameEnd1.pt=tempINT.Uchp;
}
}
COMFG1.bits.rec0D=0;
if(Rint0==0x0d) COMFG1.bits.rec0D=1; //*/
tempINT.Uint=RXpt1.data-Framept1.data;
if(tempINT.Sint<0) tempINT.Uint+=(COMBUF1_end-COMBUF1_st);
if(tempINT.Uint>=(COMBUF1_end-COMBUF1_st-0x80))
{
COMFG1.bits.BUF_full=1;
if(tempINT.Uint>=(COMBUF1_end-COMBUF1_st-3)) COMFG1.bits.BUF_over=1;
}
else if(tempINT.Uint<0x100) COMFG1.bits.BUF_full=0;
if(Rint0==0x1a)
{
*(RXpt1.pt++)=0x5c; //'\'
if(RXpt1.data>=COMBUF1_end) RXpt1.pt=COMBUF1;
Rint0='A';
}
else if(Rint0==0x5c)
{
*(RXpt1.pt++)=Rint0; //'\'
if(RXpt1.data>=COMBUF1_end) RXpt1.pt=COMBUF1;
// Rint0=0x5c; //'\'
}
*(RXpt1.pt++)=Rint0;
if(RXpt1.data>=COMBUF1_end) RXpt1.pt=COMBUF1;
}
void USART2_REC(void)
{
if((RCSTA2bits.OERR)||(RCSTA2bits.FERR))
_asm
goto INIT_USART2 //是否有溢出错误or帧错误
_endasm
Rint0=RCREG2;
COMFG2.bits.RXING=1;
RXOVERTMR2=0;
Com2Sec=0;
if(COMFG2.bits.BUF_over) return;
// tempINT.Uchp=RXpt2.pt;
if(SendATFG.bits.WaitTS)
{
if(Rint0=='>')
{
SendATFG.bits.WaitTS=0;
return;
}
}
/*
if(SendATFG.bits.WaitTS)
{
if(COMFG2.bits.recTS)
{ //上一个字符为 '>'
if(Rint0==' ')
{
SendATFG.bits.WaitTS=0;
return;
}
else
{
*(RXpt2.pt)='>';
RXpt2.data=PTinc2(RXpt2.data);
}
}
else if(Rint0=='>')
{
COMFG2.bits.recTS=1;
return;
}
}//*/
/* if(COMFG2.bits.rec0D)
{
if(Rint0!=0x0a)
{
COMFG2.bits.AFrame=1;
FrameEnd2.pt=RXpt2.pt;
}
}
COMFG2.bits.rec0D=0;
if(Rint0==0x0d) COMFG2.bits.rec0D=1;
COMFG2.bits.recTS=0;
if(Rint0=='>') COMFG2.bits.recTS=1; //*/
tempINT.Uint=RXpt2.data-Framept2.data;
if(tempINT.Sint<0) tempINT.Uint+=(COMBUF2_end-COMBUF2_st);
if(tempINT.Uint>(COMBUF2_end-COMBUF2_st-0x80))
{
COMFG2.bits.BUF_full=1;
if(tempINT.Uint>=(COMBUF2_end-COMBUF2_st-3)) COMFG2.bits.BUF_over=1;
}
else if(tempINT.Uint<0x100) COMFG2.bits.BUF_full=0;
*(RXpt2.pt++)=Rint0;
if(RXpt2.data>=COMBUF2_end) RXpt2.pt=COMBUF2;
}
void CLRcren1(void)
{
RCSTA1bits.CREN=0;
_asm
MOVF RCREG1,0,0
_endasm
RCSTA1bits.OERR=0;
RCSTA1bits.FERR=0;
_asm
MOVF RCREG1,0,0
_endasm
}
void CLRcren2(void)
{
RCSTA2bits.CREN=0;
_asm
MOVF RCREG2,0,0
_endasm
RCSTA2bits.OERR=0;
RCSTA2bits.FERR=0;
_asm
MOVF RCREG2,0,0
_endasm
}
void EndTX1(void)
{
TXSTA1bits.TXEN=0;
TXD_1=1;
TXOVERTMR1=0;
}
void EndTX2(void)
{
TXSTA2bits.TXEN=0;
TXD_2=1;
TXOVERTMR2=0;
}
const rom unsigned char bpsTable[7] = //must check DispTable+16<255 !!!!!!!!!!!
{ 207, //0300
103, //0600
207, //1200
103, //2400
51, //4800
25, //9600
12, //19200
};
void INIT_USART1(void)
{
PIE1bits.RC1IE=0;
TXSTA1=0;
if(Com1BPS<=1) TXSTA1bits.BRGH=0;
else TXSTA1bits.BRGH=1;
if(Com1BPS>6) Com1BPS=5; //9600
SPBRG1=bpsTable[Com1BPS];
CLRcren1();
COMFG1.bits.RXING=0;
RXOVERTMR1=0;
if(CONFIGFG.bits.Com1Bit9)
{
TXSTA1bits.TX9=1;
RCSTA1=0xd0; //SPEN,CREN=1, RX9=1
}
else
{
TXSTA1bits.TX9=0;
RCSTA1=0x90; //SPEN,CREN=1, RX9=0
}
PIR1bits.RC1IF=0;
PIE1bits.RC1IE=1;
}
void INIT_USART2(void)
{
PIE3bits.RC2IE=0;
TXSTA2=TXSTA2_init; //TXEN,TX9,SYNC=0,BRGH=1
SPBRG2=SPBRG2_init;
CLRcren2();
COMFG2.bits.RXING=0;
RXOVERTMR2=0;
RCSTA2=RCSTA2_init; //SPEN,CREN=1, RX9=0
PIR3bits.RC2IF=0;
PIE3bits.RC2IE=1;
}
void Init_Com1(void)
{
subah=0;
subal=AT_Com1BPS;
IICNUM=1;
IICMEM=&Com1BPS;
EEPR();
INIT_USART1();
EndTX1();
ResetCOMBUF1();
COMFG1.ch=0;
}
void Init_Com2(void)
{
INIT_USART2();
EndTX2();
ResetCOMBUF2();
COMFG2.ch=0;
}
/**********************************************************
片内EEP读写操作
**********************************************************/
void EEPR(void)
{
IICFLAG.ch=0;
do
{
EECON1=0;
EEADRH=subah;
EEADR=subal;
IIC_TEMP=IICNUM;
IIC1MEM=IICMEM;
do
{
EECON1bits.RD=1;
IICFLAG.bits.noack=0;
IICBUF=EEDATA;
EEDATA^=0Xff;
EECON1bits.RD=1;
if(IICBUF!=EEDATA)
{
IICFLAG.bits.noack=1;
break;
}
*(IIC1MEM++)=IICBUF;
if(!(++EEADR))
{
if(!(--IIC_TEMP)) break;
IICFLAG.bits.noack=1;
return;
}
}while(--IIC_TEMP);
IICFLAG.ch++;
ClrWdt();
if(!IICFLAG.bits.noack) break;
// Delay10TCYx(10); //delay 100us@4MHz
}while(!IICFLAG.bits.cnt);
}
void EEPW(void)
{
IICFLAG.ch=0;
do
{
EEADRH=subah;
EEADR=subal;
IIC_TEMP=IICNUM;
IIC1MEM=IICMEM;
do
{
IICBUF=*(IIC1MEM++);
EEDATA=IICBUF;
EECON1=0X04; //WREN=1
EECON2=0X55;
EECON2=0XAA;
EECON1bits.WR=1;
while(EECON1bits.WR) Nop();
EECON1=0;
EEDATA^=0Xff;
EECON1bits.RD=1;
if(IICBUF!=EEDATA)
{
IICFLAG.bits.noack=1;
break;
}
if(!(++EEADR))
{
if(!(--IIC_TEMP)) break;
IICFLAG.bits.noack=1;
return;
}
}while(--IIC_TEMP);
IICFLAG.ch++;
ClrWdt();
if(!IICFLAG.bits.noack) return;
// Delay10TCYx(10); //delay 100us@4MHz
}while(!IICFLAG.bits.cnt);
}
/***********************************************************
公用延时子程序
************************************************************/
void DelayXms(unsigned char i) //delay i*2ms
{
while(i--)
{
Delay10TCYx(99); //2000 clks at 4MHz
Nop();
Nop();
ClrWdt();
}
}
void Delay50ms(void) //delay i*2ms
{
DelayXms(50);
}
void RUNERR(void)
{
Reset();
Nop();
Reset();
Nop();
}
unsigned char Check_ServerIP(void)
{
for(R0=0;R0<=20;R0++)
{
if((R0==3)||(R0==7)||(R0==11))
{
if(BFIIC[R0]!='.') return(0);
}
else if(R0==15)
{
if(BFIIC[15]!=':') return(0);
}
else if((BFIIC[R0]>0x39)||(BFIIC[R0]<0x30)) return(0);
}
return(1);
}
void Init_ServerIP(void)
{
subah=0;
subal=AT_HeadID;
IICNUM=14;
IICMEM=HeadID;
EEPR();
if(IICFLAG.bits.noack) RUNERR();
HeadCS[0]='I';
HeadCS[1]='D';
HeadCS[2]=':';
subah=0;
subal=AT_IPadr;
IICNUM=16;
IICMEM=BFIIC;
EEPR();
if(IICFLAG.bits.noack) RUNERR();
subah=0;
subal=AT_IPport;
IICNUM=5;
IICMEM=BFIIC+16;
EEPR();
if(IICFLAG.bits.noack) RUNERR();
BFIIC[15]=':';
if(Check_ServerIP()==1) return;
subah=0;
subal=AT_IPadr;
IICNUM=16;
IICMEM=BFIIC;
EEPR();
if(IICFLAG.bits.noack) RUNERR();
subah=0;
subal=AT_IPport;
IICNUM=5;
IICMEM=BFIIC+16;
EEPR();
if(IICFLAG.bits.noack) RUNERR();
BFIIC[15]=':';
if(Check_ServerIP()==1) RUNERR();
BFIIC[0]='2';
BFIIC[1]='1';
BFIIC[2]='1';
BFIIC[3]='.';
BFIIC[4]='1';
BFIIC[5]='5';
BFIIC[6]='7';
BFIIC[7]='.';
BFIIC[8]='2';
BFIIC[9]='1';
BFIIC[10]='3';
BFIIC[11]='.';
BFIIC[12]='1';
BFIIC[13]='4';
BFIIC[14]='5';
BFIIC[15]=':';
BFIIC[16]='0';
BFIIC[17]='5';
BFIIC[18]='0';
BFIIC[19]='0';
BFIIC[20]='0';
subah=0;
subal=AT_IPadr;
IICNUM=15;
IICMEM=BFIIC;
EEPW();
subah=0;
subal=AT_IPport;
IICNUM=5;
IICMEM=BFIIC+16;
EEPW();
BFIIC[3]=' ';
BFIIC[4]=0x0d;
BFIIC[5]=0x0a;
subah=0;
subal=AT_HeadID;
IICNUM=14;
IICMEM=BFIIC;
EEPW();
subah=0;
subal=AT_HeadID;
IICNUM=14;
IICMEM=HeadID;
EEPR();
}
void Init_MODE(void)
{
subah=0;
subal=AT_CONFIGFG;
IICNUM=1;
IICMEM=&CONFIGFG.ch;
EEPR();
subah=0;
subal=AT_TestLong;
IICNUM=1;
IICMEM=&SetMinTest;
EEPR();
subah=0;
subal=AT_SetReSec;
IICNUM=1;
IICMEM=&SetReSec;
EEPR();
subah=0;
subal=AT_PASS;
IICNUM=1;
IICMEM=&Mode;
EEPR();
if(Mode==MODE_MS) return;
if(Mode==MODE_GPRS) return;
subah=0;
subal=AT_PASS;
IICNUM=1;
IICMEM=&Mode;
EEPR();
if(Mode==MODE_MS) return;
if(Mode==MODE_GPRS) return;
Mode=MODE_GPRS;
subah=0;
subal=AT_PASS;
IICNUM=1;
IICMEM=&Mode;
EEPW();
CONFIGFG.ch=0;
CONFIGFG.bits.enTest=1;
subah=0;
subal=AT_CONFIGFG;
IICNUM=1;
IICMEM=&CONFIGFG.ch;
EEPW();
SetMinTest=5;
subah=0;
subal=AT_TestLong;
IICNUM=1;
IICMEM=&SetMinTest;
EEPW();
SetReSec=30;
subah=0;
subal=AT_SetReSec;
IICNUM=1;
IICMEM=&SetReSec;
EEPW();
}
void Check_MODE(void)
{
if(Mode==MODE_MS) return;
if(Mode==MODE_GPRS) return;
_asm
goto Init_MODE
_endasm
}
#include "ATframe.c"
#include "command.c"