📄 5112udp.c
字号:
{
if ( chtemp == 0x7e )
{
rcv_data0=1;
rcv_cnt0=0;
}
}
else
{
if (( chtemp == 0x7e )&(receive_5112==0))
{
dt=rcv_buf0[0];
killtimer(8);
switch ( dt )
{
case 0x41:
ppp_err=1;
DSP_CALL=1;
DSP_LINK=1;
phy_err=1;
stat_ok=0;
break;
case 0x42:
ppp_err=1;
DSP_CALL=1;
DSP_LINK=1;
stat_ok=0;
break;
case 0x43:
ppp_err=1;
DSP_CALL=1;
DSP_LINK=1;
stat_ok=0;
break;
case 0x44:
ppp_err=1;
DSP_CALL=1;
DSP_LINK=1;
stat_ok=0;
break;
case 0x45:
ppp_ok=1;
break;
case 0x48:
if ( rcv_command )
{
rcv_command=0;
idt=0;
if ( rcv_buf0[11] == 0x03 )
{
idt=rcv_buf0[7]+rcv_buf0[8]+rcv_buf0[9]+rcv_buf0[10]+rcv_buf0[11];
p=&rcv_buf0[12];
chk=conver_chk(p);
}
if ( rcv_buf0[11] == 0x05 )
{
idt=0;
for ( i = 7 ; i < 24 ; i++ ) idt=idt+rcv_buf0[i];
p=&rcv_buf0[24];
chk=conver_chk(p);
}
if ( chk == idt )//chk ok
{
dt=rcv_buf0[11];
switch ( dt )
{
case 0x03:
timer3_reg=0;
timer13_reg=0;
DSP_LINK=0;
//settimer(3);
reconnect_cnt=0;
//settimer(11);
break;
case 0x05:
dt=19;
for( i = 0 ; i < 4 ; i++ )
{
dt--;
if ( dt == 0x56 )
{
sockset[5-i]= rcv_buf0[dt+1] ^ 0x20;
dt--;
}
else
{
sockset[5-i]=rcv_buf0[dt+1];
}
}
p=&rcv_buf0[20];
idt=conver_chk(p);
chk=idt & 0xff00;
chk=chk>>8;
sockset[0]=( unsigned char )chk;
chk=idt & 0xff;
sockset[1]=( unsigned char )chk;
rcv_set=1;
break;
default:
break;
}
}
}
break;
case 0x4c:
ack=1;
break;
case 0x4d:
smsindex=rcv_buf0[3];
break;
default:
break;
}
if (( run == 1 )&( ppp_err == 1 ))
{
request_ppp=1;
ppp_err=0;
}
rcv_data0=0;
rcv_cnt0=0;
com0tocom1=0;
}
else
{
if ( com0tocom1)
{
if ( rcv_data_len == 0 )
{
if ( dt == 0x55 )
{
p=&rcv_chk[0];
idt=conver_chk(p);
if ( idt == chk_add )//send data(from server) to equ
{
send_to_com1_addr=0;
request_send_ack_to_server=1;
if ( com1_send_finish == 1 )
{
TI1=1;
com1_send_finish=0;
}
if ( !timer6 )
{
settimer(6);
DSP_RCV=0;
}
}
com0tocom1=0;
}
else
{
rcv_chk[rcv_chk_cnt]=dt;
rcv_chk_cnt++;
}
}
else
{
chk_add=chk_add+dt;
rcv_data_len--;
if ( rcv_data_len == 0 ) rcv_chk_cnt=0;
if ( dt == 0x56 )
{
rcv_56=1;
}
else
{
if ( rcv_56 )
{
dt=dt ^ 0x20;
rcv_56=0;
}
send_buf1[rcv_to_send_com1_addr]=dt;
rcv_to_send_com1_addr++;
if ( rcv_to_send_com1_addr > (RCV_BUF_MAX-1) ) rcv_to_send_com1_addr=RCV_BUF_MAX-1;
}
}
}
else
{
rcv_buf0[rcv_cnt0]=dt;
if (( rcv_cnt0 == 11 ) & ( rcv_buf0[0] == 0x48 ))
{
settimer(8);
if ( rcv_buf0[3] == 0x55 )
{
p=&rcv_buf0[7];
idt=conver_chk(p);
if ( idt == eid )
{
switch ( rcv_buf0[11] )
{
case 0x02:
// if ( rcv_buf0[11] == 0x02 )//receive data from server
// {
if (com1_send_finish)
{
com0tocom1=1;
chk_add=rcv_buf0[7]+rcv_buf0[8]+rcv_buf0[9]+rcv_buf0[10]+rcv_buf0[11];
if ( rcv_buf0[5] == 0x56 )
{
rcv_data_len=rcv_buf0[4];
rcv_data_len=rcv_data_len<<8;
rcv_data_len=rcv_data_len+(rcv_buf0[6] ^ 0x20);
}
else
{
rcv_data_len=rcv_buf0[5];
rcv_data_len=rcv_data_len<<8;
rcv_data_len=rcv_data_len+rcv_buf0[6];
}
rcv_data_len=rcv_data_len-5;
rcv_to_send_com1_addr=0;
}
// }
break;
case 0x03:
rcv_command =1;
com0tocom1=0;
break;
case 0x05:
rcv_command =1;
com0tocom1=0;
break;
case 0x07:
request_reset=1;
break;
case 0x08:
issend_to_server=0;
break;
case 0x09:
issend_to_server=1;
break;
default:
break;
}
}
}
}
rcv_cnt0++;
if ( rcv_cnt0 == 30 ) rcv_cnt0=29;
}
if (( rcv_cnt0 == 1 ) & ( rcv_buf0[0] == 0x48 ))
{
receive_5112=1;
}
if ((chtemp == 0x55) & ( rcv_cnt0 > 4 ) & ( rcv_buf0[0] == 0x48 ))
{
receive_5112=0;
}
}
}
}
}
}
RI=0;
}
ES0=1;
}
//////////////////////////////
//
//NAME: init_sys
//DESCRIPTION: INIT SYSTEM
//CALL:
//INPUT: NONE
//OUTPUT:NONE
//
///////////////////////////////
void init_sys ( void )
{
unsigned char temp,i;
unsigned char *p;
i=x_mark;
p=x_read(i,1);
temp=*p;
if (temp != 0x55)
{
//write default
for ( i = 0 ; i < 4 ; i ++ ) xbuf[i]=0x00;
p=&xbuf[0];
temp=x_my_addr;
x_write(temp,p,4);
for ( i = 0 ; i < 4 ; i ++ ) xbuf[i]=0xff;
p=&xbuf[0];
temp=x_to_addr;
x_write(temp,p,4);
xbuf[0]=61;
xbuf[1]=243;
xbuf[2]=224;
xbuf[3]=57;
p=&xbuf[0];
temp=x_server_addr;
x_write(temp,p,4);
xbuf[0]=0x25;//port=(1b5a)7002 (0599)1433 (2580)9600
xbuf[1]=0x80;
p=&xbuf[0];
temp=x_server_port;
x_write(temp,p,2);
xbuf[0]='*';
xbuf[1]='9';
xbuf[2]='9';
xbuf[3]='*';
xbuf[4]='*';
xbuf[5]='*';
xbuf[6]='1';
xbuf[7]='#';
xbuf[8]=0x00;
p=&xbuf[0];
temp=x_isp_num;
x_write(temp,p,9);
xbuf[0]='8';
xbuf[1]=0x00;
p=&xbuf[0];
temp=x_isp_name;
x_write(temp,p,2);
xbuf[0]='8';
xbuf[1]=0x00;
p=&xbuf[0];
temp=x_isp_password;
x_write(temp,p,2);
xbuf[0]=0x1f;//my port=8000
xbuf[1]=0x40;
p=&xbuf[0];
temp=x_my_port;
x_write(temp,p,2);
xbuf[0]=0xfa;//default baud
p=&xbuf[0];
temp=x_baud;
x_write(temp,p,1);
xbuf[0]=0x55;
temp=x_mark;
p=&xbuf[0];
x_write(temp,p,1);
}
else
{
temp=x_baud;
p=x_read(temp,1);
TR1=0;
TH1=p[0];
// TH1=0x40;
TL1=TH1;
TR1=1;
}
temp=x_my_addr;
p=x_read(temp,2);
eid=p[0];
eid=eid<<8;
eid=eid+p[1];
sendid=0;
temp=x_server_port;
p=x_read(temp,2);
sockset[0]=p[0]; //server port
sockset[1]=p[1];
temp=x_server_addr;
p=x_read(temp,4);
sockset[2]=p[0]; //server ip
sockset[3]=p[1];
sockset[4]=p[2];
sockset[5]=p[3];
}
//////////////////////////////
//
//NAME: init_cpu
//DESCRIPTION: init cpu
//CALL:
//INPUT: NONE
//OUTPUT:NONE
//
///////////////////////////////
void init_cpu(void)
{
X_CS=1;
X_SO=1;
X_SCK=0;
X_SI=0;
P4=0;
STATUS=0x10;
PMR=0x41;
//////////////////////////
// BELOW FOR SERIAL PORT
//COM0 ( 5112 ) COM1 ( EQU )
//COM0 : MODE3 9600 ; COM1: MODE1 9600
//TIMER 1 FOR COM1 ; TIMER 2 FOR COM0
CKCON=0xC0; //watchdog:2.8S
//COM0:
T2MOD=0x00;
T2CON=0x30;//SET TIMER2 MODE FOR COM0
TH2=0xff; // ffdc for 9600 fffd for 115200 for 11.0592MHz
TL2=0xb8; //ffb8 for 9600 ffdc for 19200 fff4 for 57600 for 22.1184MHz
RCAP2H=0xff;
RCAP2L=0xb8;
SCON0=0xd0;//SET COM0 MODE 3 RECEIVE ENABLE
//COM1:
TMOD=0x20;//SET TIMER1 MODE 2
SMOD=0;
TH1=250;//64:300;160:600;208:1200;232:2400;244:4800 244:9600for 22.1184MHz
TL1=250;//250:9600;253:19200;254:28800;255:57600
SCON1=0x50;//SET COM1 MODE 1 RECEIVE ENABLE
TR1=1;
TR2=1;
ES0=1;
ES1=1;
//////////////////////////
// FOR TIMER0 FOR TIMER
TMOD=TMOD | 0x01;
TH0=0x4d; //4d0c for 11.0592MHz 9a18 for 22.1184MHz
TL0=0x0c;
TR0=1;
ET0=1;
//////////////////////////
TA=0xaa;
TA=0x55;
EWT=0;
EWDI=0;
EIE=0;
IP=0x50;
EA=1;
}
/////////////////////////////////////////
//
//NAME: clear_ram
//DESCRIPTION: clear ram
//CALL:
//INPUT:
//RETURN:
////////////////////////////////////////
void clear_ram(void)
{
request_ppp=0;
run=0;
ack=0;
send_data0=0;
ppp_ok=0;
ppp_err =0;
send_com0_finish=0;
rcv_data0=0;
com0tocom1=0;
com1_send_finish=1;
rcv_init=0;
timer0=0;
timer1=0;
timer2=0;
timer3=0;
timer4=0;
timer5=0;
timer6=0;
timer7=0;
timer8=0;
timer9=0;
timer10=0;
timer11=0;
timer12=0;
timer13=0;
request_reset=0;
waitinit=0;
stat_ok=0;
rcv_7d=0;
send_disable=0;
request_connect=0;////
request_send_data_to_server=0;////
request_send_chk_to_server=0;////
request_send_ack_to_server=0;
rcv_command=0;
rcv_56=0;
issend_to_server=0;
receive_5112=0;
rcv_set=0;
phy_err=0;
sm=0;
com0_send_len=0;
send_7d_cnt=0;
send_ctr_com0_len=0;
rcv_cnt0=0;
rcv_to_send_com1_addr=0;
send_to_com1_addr=0;
com1_rcv_addr_hand=0;
com1_rcv_len=0;
com0_send_addr=0;
rcv_7d_cnt=0;
send_com0_cnt=0;
timer0_reg=0;//for status flash
timer1_reg=0;//200mS for receive init data
timer2_reg=0;
timer3_reg=0;
timer4_reg=0;
timer5_reg=0;
timer6_reg=0;
timer7_reg=0;
timer8_reg=0;//5S for wait 5112 2nd 0x7e
timer9_reg=0;
timer10_reg=0;//10S for link test from equ to server
timer11_reg=0;//250mS for link test flash
timer12_reg=0;
timer13_reg=0;
eid=0;
chk_add=0;
rcv_data_len=0;
rcv_chk_cnt=0;
rcv_equ_chk=0;
sendid=0;
reconnect_cnt=0;
smsindex=0;
}
//below functions are for x5045
/////////////////////////////////////////
//
//NAME: x_write
//DESCRIPTION: WRITE MUL-BYTES TO X5045
//CALL: x_outbyte,wait,x_wren_cmd
//INPUT: x_address: address of x5045 000h-01ffh
// *psavedata :data pointer to be saved
// amount: counter of data <0x10
//RETURN:NONE
////////////////////////////////////////
void x_write ( unsigned char x_address,unsigned char *psavedata,unsigned char amount)
{
unsigned char sendaddress,i,ch;
P4=0x08;
x_wren_cmd();
_nop_();
_nop_();
X_SCK=0;
wait(5);
X_CS=0;
_nop_();
_nop_();
/* if ( x_address >=0x100 )
{ x_outbyte(0x0a);
x_address = x_address-0x100 ;
}
else
{
*/ x_outbyte(0x02);
// }
sendaddress=(unsigned char ) x_address;
x_outbyte(sendaddress);
for (i=0 ; i<amount ;i++)
{ ch=*psavedata;
x_outbyte( ch );
psavedata++;
}
X_SCK=0;
_nop_();
_nop_();
X_CS=1;
wait(6);
P4=0x00;
}
/////////////////////////////////////////
//
//NAME: x_read
//DESCRIPTION: WRITE MUL-BYTES TO X5045
//CALL: x_outbyte,x_inbyte;wait,x_wren_cmd
//INPUT: address: address of x5045
// amount: counter of data
//RETURN:data pointer
//
////////////////////////////////////////
unsigned char * x_read( unsigned char address ,unsigned char amount)
{
unsigned char * preaddata;
unsigned char sendaddress,i;
X_SCK=0;
wait(6);
X_CS=0;
/* if ( address >=0x100 )
{ x_outbyte(0x0b);
address=address-0x100;
}
else
{
*/ x_outbyte(0x03);
// }
sendaddress=(unsigned char ) address;
x_outbyte(sendaddress);
for ( i=0 ; i<amount ;i++)
{ xbuf[i]=x_inbyte();
}
X_SCK=0;
_nop_();
_nop_();
X_CS=1;
preaddata=&xbuf;
return(preaddata);
}
/////////////////////////////////////////
//
//NAME: x_wren_cmd
//DESCRIPTION: WRITE ENABLE
//CALL: x_outbyte
//INPUT:NONE
//RETURN:NONE
////////////////////////////////////////
void x_wren_cmd (void)
{
X_SCK=0;
wait(3);
X_CS=0;
x_outbyte(0x06);
X_SCK=0;
_nop_();
_nop_();
X_CS=1;
}
/////////////////////////////////////////
//
//NAME: init_watchdog
//DESCRIPTION: INIT WATCHDOG TO X5045
//CALL: x_outbyte,x_wren_cmd
//INPUT: 03:disable watchdog 02:200mS 01:600mS 00:1.4S
//RETURN:NONE
////////////////////////////////////////
void init_watchdog(unsigned char ch)
{
P4=0x08;
if (!( ch > 0x03))
{
x_wren_cmd();
_nop_();
X_SCK=0;
_nop_();
_nop_();
X_CS=0;
x_outbyte(0x01);
ch=ch<<4;
x_outbyte(ch);
X_SCK=0;
_nop_();
_nop_();
X_CS=1;
}
P4=0x00;
}
unsigned char x_inbyte( void )
{
unsigned char i;
unsigned char ch;
ch=0x00;
for ( i=0 ; i<8 ;i++ )
{ X_SCK=1;
_nop_();
_nop_();
X_SCK=0;
ch=ch*2;
if (X_SO)
{ ch=ch+1;
}
}
return ( ch );
}
void x_outbyte( unsigned char ch) //ch:data to be sent to x5045
{
unsigned char i;
for ( i=0 ; i<8 ; i++ )
{ X_SCK=0;
_nop_();
_nop_();
X_SI=(bit)(ch & 0x80);
_nop_();
ch=ch*2;
X_SCK=1;
_nop_();
_nop_();
}
_nop_();
_nop_();
X_SI=0;
}
//X5045 PROG END ///////////////////////
/////////////////////////////////////////
//
//NAME: wait
//DESCRIPTION: WAIT
//CALL: NONE
//INPUT: time:mS <170
//RETURN:NONE
////////////////////////////////////////
void wait(unsigned int time)
{
time=time*367;
for ( time; time>=1 ; time--)
{
}
watchdog();
}
/////////////////////////////////////////
//
//NAME: watchdog
//DESCRIPTION: watchdog prog
//CALL: NONE
//INPUT: none
//RETURN:NONE
////////////////////////////////////////
void watchdog(void)
{
TA=0xaa;
TA=0x55;
RWT=1;
X_CS=0;
_nop_();
_nop_();
_nop_();
X_CS=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -