📄 port.c
字号:
if(iportreceivebuffW[Tcom_number+1]!=iportreceivebuffR[Tcom_number+1]-1)
{
portreceivebuff[Tcom_number+1][iportreceivebuffW[Tcom_number+1]]=1;
iportreceivebuffW[Tcom_number+1]++;
if(iportreceivebuffW[Tcom_number+1]>=MAX_DATA)
iportreceivebuffW[Tcom_number+1]=0;
}
else
{}
outp(commandport2,0x0);
outp(commandport2,0x30);// Error Reset
}
else
{
if(iportreceivebuffW[Tcom_number+1]!=iportreceivebuffR[Tcom_number+1]-1)
{
portreceivebuff[Tcom_number+1][iportreceivebuffW[Tcom_number+1]]=0;
iportreceivebuffW[Tcom_number+1]++;
if(iportreceivebuffW[Tcom_number+1]>=MAX_DATA)
iportreceivebuffW[Tcom_number+1]=0;
}
else
{}
}
for(ifor1=0;ifor1<4;ifor1++)
{
if(iportreceivebuffW[Tcom_number+1]!=iportreceivebuffR[Tcom_number+1]-1)
{
portreceivebuff[Tcom_number+1][iportreceivebuffW[Tcom_number+1]]=0x7e;
iportreceivebuffW[Tcom_number+1]++;
if(iportreceivebuffW[Tcom_number+1]>=MAX_DATA)
iportreceivebuffW[Tcom_number+1]=0;
}
else
{}
}
//outp(commandport2,0x0);
//outp(commandport2,0x30);// Error Reset
//goto quit_interrupt;
writedata_flag[Tcom_number+1]=0;
}
outp(commandport2,0x00);
rr0=inp(commandport2);
if((rr0&0x04)==0x0) // Tx Buffer Empty;
{
outp(commandport2,0x0);
outp(commandport2,0x28);
};
outp(commandport2,0x00);
rr0=inp(commandport2);
if((rr0&0x01)==0x0) // Rx character Available;
{
};
outp(commandport2,0x0);
outp(commandport2,0x10);
}
}
/////////////////data receive and send;
outp(commandport1,0x03); //com4 receive;
rr3=inp(commandport1);
rr3=rr3&0x04;
while(rr3==0x04)
{
recv_char=inp(dataport2);
com_received_num[Tcom_number+1]++;
if(iportreceivebuffW[Tcom_number+1]!=iportreceivebuffR[Tcom_number+1]-1)
{
portreceivebuff[Tcom_number+1][iportreceivebuffW[Tcom_number+1]]=recv_char;
iportreceivebuffW[Tcom_number+1]++;
if(iportreceivebuffW[Tcom_number+1]>=MAX_DATA)
iportreceivebuffW[Tcom_number+1]=0;
writedata_flag[Tcom_number+1]=1;
}
else
{}
outp(commandport1,0x03);
rr3=inp(commandport1);
rr3=rr3&0x04;
}
outp(commandport1,0x03); //com4 send;
rr3=inp(commandport1);
rr3=rr3&0x02;
while(rr3==0x02)
{
com_int_count[Tcom_number+1]++;
if(iportsendbuffW[Tcom_number+1]!=iportsendbuffR[Tcom_number+1])
{
outp(dataport2,portsendbuff[Tcom_number+1][iportsendbuffR[Tcom_number+1]]);
iportsendbuffR[Tcom_number+1]++;
if(iportsendbuffR[Tcom_number+1]>=MAX_DATA)
iportsendbuffR[Tcom_number+1]=0;
sending[Tcom_number+1]=1;
com_send_count[Tcom_number+1]++;
}
else
{
if(Port_Set[Tcom_number+1][5]==0)
{
sending[Tcom_number+1]=0;
}
else
{
if(sending[Tcom_number+1]!=0)
{
sending[Tcom_number+1]++;
if(sending[Tcom_number+1]>=1)
sending[Tcom_number+1]=0;
}
}
outp(commandport2,0x28);
}
outp(commandport1,0x03);
rr3=inp(commandport1);
rr3=rr3&0x02;
}
//..............................end B;
outp(commandport1,0x03);
rr3=inp(commandport1);
if(rr3!=0) goto handle3a;
outp(commandport1,0x0);
rr0=inp(commandport1);
if((rr0 & 0x04)==0x04)
{
outp(commandport1,0x0);
outp(commandport1,0x28);
};
outp(commandport2,0x0);
rr0=inp(commandport2);
if((rr0 & 0x04)==0x04)
{
outp(commandport2,0x0);
outp(commandport2,0x28);
};
outp(commandport1,0x0);
outp(commandport1,0xf8);
outp(commandport1,0x0);
outp(commandport1,0x10);
enable();
outp(intcommand1,0x20);
outp(intcommand2,0x20);
}*/
void open_RTS(int Tport)
{
int commandport;
int dataport;
int Tcom_number=6;
Tcom_number=Tport+1;
if(Tcom_number%2)
{
commandport=0x2d2+(Tcom_number-3)*2;
dataport=0x2d3+(Tcom_number-3)*2;
}
else
{
commandport=0x2d0+(Tcom_number-4)*2;
dataport=0x2d1+(Tcom_number-4)*2;
}
outp(commandport,0x05); //WR5
outp(commandport,0x6b); //rts
}
void clear_RTS(int Tport)
{
int commandport;
int dataport;
int Tcom_number=6;
Tcom_number=Tport+1;
if(Tcom_number%2)
{
commandport=0x2d2+(Tcom_number-3)*2;
dataport=0x2d3+(Tcom_number-3)*2;
}
else
{
commandport=0x2d0+(Tcom_number-4)*2;
dataport=0x2d1+(Tcom_number-4)*2;
}
outp(commandport,0x05); //WR5
outp(commandport,0x69); //rts
}
void interrupt_zi_programe(int Tcom_number)
{
// static int writedata_flag[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int commandport1;
int dataport1;
int commandport2;
int dataport2;
int ifor1;
char recv_char;
disable();
commandport1=0x2d2+(Tcom_number-3)*2;
dataport1=0x2d3+(Tcom_number-3)*2;
commandport2=0x2d0+(Tcom_number+1-4)*2;
dataport2=0x2d1+(Tcom_number+1-4)*2;
Tcom_number=Tcom_number-1;
handle3a:
//********************************************//
//==================CH: A=====================//
//
//
//
//begin
if(Port_Set[Tcom_number][5]==1)
{
outp(commandport1,0x03); //read WR3;
rr3=inp(commandport1);
if((rr3&0x20)==0x20)
{
//------------------------------//
//-----------rxip---------------//
//------------------------------//
//read data;
recv_char=inp(dataport1);
com_received_num[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
{
portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=recv_char;
iportreceivebuffW[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
iportreceivebuffW[Tcom_number]=0;
}
//------------------EOF-----------------//
outp(commandport1,0x01);
rr1=inp(commandport1); //read RR1;
if((rr1&0x80)==0x80) //EOF
{
com_received_num[Tcom_number]--;
com_received_num[Tcom_number]--;
//sync_recevie_7e[Tcom_number]=1;
if((rr1&0x40)==0x40) //CRC;
{
//crc_check_erro[Tcom_number]=1;
if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
{
portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=1;
iportreceivebuffW[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
iportreceivebuffW[Tcom_number]=0;
}
else
{}
outp(commandport1,0x0);
outp(commandport1,0x30);// Error Reset
}
else
{
if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
{
portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=0;
iportreceivebuffW[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
iportreceivebuffW[Tcom_number]=0;
}
else
{}
}
for(ifor1=0;ifor1<4;ifor1++)
{
if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
{
portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=0x7e;
iportreceivebuffW[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
iportreceivebuffW[Tcom_number]=0;
}
else
{}
}
};
//-------------------------End EOF-----
//------------------------------//
//rxip's txip;
//------------------------------//
if((rr3&0x10)==0x10)
{
if(iportsendbuffW[Tcom_number]!=iportsendbuffR[Tcom_number])
{
outp(dataport1,portsendbuff[Tcom_number][iportsendbuffR[Tcom_number]]);
iportsendbuffR[Tcom_number]++;
//if(iportsendbuffR[Tcom_number]>=MAX_DATA)
if(iportsendbuffR[Tcom_number]>=200)
iportsendbuffR[Tcom_number]=0;
sending[Tcom_number]=1;
com_send_count[Tcom_number]++;
}
else
{
//sending[Tcom_number]=0;
if(Port_Set[Tcom_number][5]==0)
{
sending[Tcom_number]=0;
}
else
{
if(sending[Tcom_number]!=0)
{
sending[Tcom_number]++;
if(sending[Tcom_number]>=3)//+++3
sending[Tcom_number]=0;
}
}
outp(commandport1,0x28);
}
com_int_count[Tcom_number]++;
}
//-----------end rxip's txip;
//--------------------------------//
//read WR3 again
//
//--------------------------------//
outp(commandport1,0x03); //read WR3;
rr3=inp(commandport1);
//-----------------------------//
//
//-----------------------------//
if((rr3&0x10)==0x10)
{
if(iportsendbuffW[Tcom_number]!=iportsendbuffR[Tcom_number])
{
outp(dataport1,portsendbuff[Tcom_number][iportsendbuffR[Tcom_number]]);
iportsendbuffR[Tcom_number]++;
if(iportsendbuffR[Tcom_number]>=MAX_DATA)
iportsendbuffR[Tcom_number]=0;
sending[Tcom_number]=1;
com_send_count[Tcom_number]++;
}
else
{
//sending[Tcom_number]=0;
if(Port_Set[Tcom_number][5]==0)
{
sending[Tcom_number]=0;
}
else
{
if(sending[Tcom_number]!=0)
{
sending[Tcom_number]++;
if(sending[Tcom_number]>=3)//+++3
sending[Tcom_number]=0;
}
}
outp(commandport1,0x28);
}
com_int_count[Tcom_number]++;
//............end txip;
};
//-----------------------------
}
//------------------------------//
//----------end rxip------------//
//------------------------------//
else
{
if((rr3&0x10)==0x10)
{
//------------------------------//
//----------txip------------//
//------------------------------//
if(iportsendbuffW[Tcom_number]!=iportsendbuffR[Tcom_number])
{
outp(dataport1,portsendbuff[Tcom_number][iportsendbuffR[Tcom_number]]);
iportsendbuffR[Tcom_number]++;
//if(iportsendbuffR[Tcom_number]>=MAX_DATA)
if(iportsendbuffR[Tcom_number]>=200)
iportsendbuffR[Tcom_number]=0;
sending[Tcom_number]=1;
com_send_count[Tcom_number]++;
}
else
{
//sending[Tcom_number]=0;
if(Port_Set[Tcom_number][5]==0)
{
sending[Tcom_number]=0;
}
else
{
if(sending[Tcom_number]!=0)
{
sending[Tcom_number]++;
if(sending[Tcom_number]>=3)//+++3
sending[Tcom_number]=0;
}
}
outp(commandport1,0x28);
}
com_int_count[Tcom_number]++;
//............end txip;
/*outp(commandport1,0x03); //read WR3;
rr3=inp(commandport1);
if((rr3&0x20)==0x20) //rxip;
{
//........
if(Port_Set[Tcom_number][5]==1)
{
//read data;
recv_char=inp(dataport1);
com_received_num[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
{
portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=recv_char;
iportreceivebuffW[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
iportreceivebuffW[Tcom_number]=0;
}
//---EOF--------------------------------------
outp(commandport1,0x01);
rr1=inp(commandport1); //read RR1;
if((rr1&0x80)==0x80) //EOF
{
//sync_recevie_7e[Tcom_number]=1;
if((rr1&0x40)==0x40) //CRC;
{
//crc_check_erro[Tcom_number]=1;
if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
{
portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=1;
iportreceivebuffW[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
iportreceivebuffW[Tcom_number]=0;
}
else
{}
outp(commandport1,0x0);
outp(commandport1,0x30);// Error Reset
}
else
{
if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
{
portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=0;
iportreceivebuffW[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
iportreceivebuffW[Tcom_number]=0;
}
else
{}
}
for(ifor1=0;ifor1<4;ifor1++)
{
if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
{
portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=0x7e;
iportreceivebuffW[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
iportreceivebuffW[Tcom_number]=0;
}
else
{}
}
};
/////---------------End EOF-----
}
else
{
recv_char=inp(dataport1);
com_received_num[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
{
portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=recv_char;
iportreceivebuffW[Tcom_number]++;
if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
iportreceivebuffW[Tcom_number]=0;
}
}
};
*/
}
//------------------------------//
//----------end txip------------//
//------------------------------//
}
//end;
}
else
//==========================
//Asncy:
//
//
{
outp(commandport1,0x03); //com3 receive;
rr3=inp(commandport1);
rr3=rr3&0x20;
while(rr3==0x20)
{
recv_char=inp(dataport1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -