📄 hpjk05.c
字号:
Delay(2);
}
}
}
void comd_decode(void)
{
switch (pc_code)
{
case 16:{
ascii[0]=*pointer_code;
ascii[1]=*(pointer_code+1);
gps_start_hour=ascii_to_hex();
ascii[0]=*(pointer_code+2);
ascii[1]=*(pointer_code+3);
gps_start_min=ascii_to_hex();
ascii[0]=*(pointer_code+4);
ascii[1]=*(pointer_code+5);
gps_stop_hour=ascii_to_hex();
ascii[0]=*(pointer_code+6);
ascii[1]=*(pointer_code+7);
gps_stop_min=ascii_to_hex();
task=3;
} break;
case 23:{
task=6;
} break;
}
}
void UART0_ISR (void) interrupt 4 using 1
{
if(RI0)
{
RI0=0;
*pointer=SBUF0;
pointer++;
}
else
{
if(counter==counter1)
TI0=0;
else
{
SBUF0=vp_comd_send[counter];
counter++;
TI0=0;
}
}
}
void UART1_ISR (void) interrupt 20 using 2
{
if ((SCON1&0x01)==1)
{
SCON1=SCON1&0xFE;
*pointer=SBUF1;
pointer++;
}
else
SCON1=SCON1&0xFD;
}
void erase_flash(void)
{
unsigned char i;
flash_data=0x5000;
FLSCL=0x41;
PSCTL=0x03;
for(i=0;i<80;i++)
{
*(flash_data+i*512)=0xFF;
}
FLSCL=0x40;
PSCTL=0x00;
}
void write_flash(void)
{
unsigned int i;
FLSCL=0x41;
PSCTL=0x01;
for (i=0;i<counter2;i++)
{
*flash_data=*pointer1;
pointer1++;
flash_data++;
}
FLSCL=0x40;
PSCTL=0x00;
}
void date_setup(void)
{
unsigned char i;
unsigned char j;
FLSCL=0x41;
PSCTL=0x01;
for (i=0,j=8;i<4;i++,j++)
*((unsigned char xdata *)(0x5000+i))=*((unsigned char code *)(0x5000+j));
FLSCL=0x40;
PSCTL=0x00;
}
void dial_ring(void)
{
unsigned char i;
unsigned char temp[25];
for (i=0;i<8;i++)
{
while ((SCON1&0x01)==0) {}
dial_buffer[i]=SBUF1;
SCON1=SCON1&0xFE;
}
for (i=0;i<4;i++)
temp[i]=dial_buffer[i+2];
temp[i]='\0';
if (strcmp(temp,"RING")==0)
{
strcpy (dial_buffer,"ata\x0d");
for (i=0;i<4;i++)
{
SBUF1=gsm_comd_send[i];
while ((SCON1&0x02)==0) {}
SCON1=SCON1&0xFD;
}
/*
SCON1=SCON1&0xFE;
dial_buffer[i]=SBUF1;
dial_buffer[i]=SBUF1;
for (i=0;i<24;i++)
{
while ((SCON1&0x01)==0) {}
dial_buffer[i]=SBUF1;
SCON1=SCON1&0xFE;
}
for (i=0;i<16;i++)
temp[i]=dial_buffer[i+6];
temp[i]='\0';
if (strcmp(temp,"CONNECT 9600/RLP")==0)
{
task=7;
Delay(2);
}
*/
Delay(7);
SCON1=SCON1&0xFE;
dial_buffer[i]=SBUF1;
dial_buffer[i]=SBUF1;
task=7;
}
}
void data_to_pc(void)
{
unsigned int i=1;
SCON1=SCON1&0xFD;
SCON1=SCON1&0xFD;
flash_read=0x5000;
SBUF1=0xA0;
while ((SCON1&0x02)==0) {}
SCON1=SCON1&0xFD;
SBUF1=0x05;
while ((SCON1&0x02)==0) {}
SCON1=SCON1&0xFD;
for (;!(flash_read==0xF000);flash_read++,i++)
{
SBUF1=*flash_read;
while ((SCON1&0x02)==0) {}
SCON1=SCON1&0xFD;
if (i==4096)
{
Delay(1);
i=1;
}
}
}
void data_to_pc_end(void)
{
unsigned char i;
Delay(1);
strcpy (dial_buffer,"+++");
for (i=0;i<3;i++)
{
SBUF1=dial_buffer[i];
while ((SCON1&0x02)==0) {}
SCON1=SCON1&0xFD;
}
Delay(2);
strcpy (dial_buffer,"ath\x0d");
for (i=0;i<4;i++)
{
SBUF1=dial_buffer[i];
while ((SCON1&0x02)==0) {}
SCON1=SCON1&0xFD;
}
Delay(2);
SCON1=SCON1&0xFE;
dial_buffer[i]=SBUF1;
dial_buffer[i]=SBUF1;
}
void main(void)
{
unsigned char i;
EA=0;
WDTCN=0xDE;
WDTCN=0xAD;
SYSCLK_Init();
SP=0x30;
clear_xram(0x1000);
T2_ini();
task=1;
gps_start_hour=0xFF;
gps_start_min=0xFF;
gps_stop_hour=0xFF;
gps_stop_min=0xFF;
PORT_Init();
ON_CON=1;
GSMOFF=0;
GPSOFF=0;
NET=0;
UART_Init();
GSM_on();
stop_gps();
for (i=1;i<=50;i++)
delete_message(i);
for(;;)
{
switch (task)
{
case 1:{
read_message();
} break;
case 2:{
comd_decode();
} break;
case 3:{
//time_adjust();
strcpy(vp_comd_send,"@@Aa\xFF\xFF\xFF\xDF\x0D\x0A");
for (;;)
{
i=0;
SBUF0=vp_comd_send[i];
i++;
for (;i<10;i++)
{
while(!TI0){}
TI0=0;
SBUF0=vp_comd_send[i];
}
while(!TI0){}
TI0=0;
for(i=0;i<10;i++)
{
while(!RI0){}
RI0=0;
vp_comd_response[i]=SBUF0;
}
if ((vp_comd_response[4]==gps_start_hour)&(vp_comd_response[5]==gps_start_min))
{
NET=1;
vp_comd_send[0]='@';
vp_comd_send[1]='@';
vp_comd_send[2]='E';
vp_comd_send[3]='a';
vp_comd_send[4]=0;
vp_comd_send[5]=0x24;
vp_comd_send[6]=0x0D;
vp_comd_send[7]=0x0A;
vp_comd_send[8]='@';
vp_comd_send[9]='@';
vp_comd_send[10]='B';
vp_comd_send[11]='i';
vp_comd_send[12]=0;
vp_comd_send[13]=0x2B;
vp_comd_send[14]=0x0D;
vp_comd_send[15]=0x0A;
pointer=gps_data_receive;
EA=1;
SBUF0=vp_comd_send[0];
counter=1;
counter1=16;
ES0=1;
alarm_timer0=1;
alarm_timer0_ring=0;
alarm_timer0_unit=10;
ET2=1;
while (alarm_timer0_ring==0) {}
EA=0;
ES0=0;
ET2=0;
task=4;
break;
}
}
} break;
case 4:{
//time_adjust();
strcpy(vp_comd_send,"@@Aa\xFF\xFF\xFF\xDF\x0D\x0A");
for (;;)
{
i=0;
SBUF0=vp_comd_send[i];
i++;
for (;i<10;i++)
{
while(!TI0){}
TI0=0;
SBUF0=vp_comd_send[i];
}
while(!TI0){}
TI0=0;
for(i=0;i<10;i++)
{
while(!RI0){}
RI0=0;
vp_comd_response[i]=SBUF0;
}
if (vp_comd_response[6]==15)
{
//strcpy(vp_comd_send,"@@Eg"); //@=40h E=45h g=67h
vp_comd_send[0]='@';
vp_comd_send[1]='@';
vp_comd_send[2]='E';
vp_comd_send[3]='g';
vp_comd_send[4]=0x0F;
vp_comd_send[5]=0x2D;
vp_comd_send[6]=0x0D;
vp_comd_send[7]=0x0A;
i=0;
SBUF0=vp_comd_send[i];
i++;
for (;i<8;i++)
{
while(!TI0){}
TI0=0;
SBUF0=vp_comd_send[i];
}
while(!TI0){}
TI0=0;
for (i=0;i<158;i++)
{
while(!RI0){}
RI0=0;
*pointer=SBUF0;
pointer++;
}
erase_flash();
counter2=pointer-0x800;
flash_data=flash_data+4;
pointer1=0x800;
write_flash();
task=5;
break;
}
}
} break;
case 5:{
pointer=pointer1=0x800;
time_adjust();
if ((vp_comd_response[4]==gps_stop_hour)&(vp_comd_response[5]==gps_stop_min))
{
stop_gps();
date_setup();
gps_start_hour=0xFF;
gps_start_min=0xFF;
gps_stop_hour=0xFF;
gps_stop_min=0xFF;
task=6;
}
else
{
for (i=0;i<158;i++)
{
while(!RI0){}
RI0=0;
*pointer=SBUF0;
pointer++;
}
counter2=158;
write_flash();
}
} break;
case 6:{
NET=0;
dial_ring();
} break;
case 7:{
data_to_pc();
data_to_pc_end();
task=1;
} break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -