📄 gprs.c
字号:
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"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -