📄 port.c
字号:
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;
}
else
{}
outp(commandport1,0x03);
rr3=inp(commandport1);
rr3=rr3&0x20;
}
outp(commandport1,0x03); //com3 send;
rr3=inp(commandport1);
rr3=rr3&0x10;
while(rr3==0x10)
{
com_int_count[Tcom_number]++;
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;
outp(commandport1,0x28);
}
outp(commandport1,0x03);
rr3=inp(commandport1);
rr3=rr3&0x10;
}
}
//==================End CH: A=================//
//==================CH: B=====================//
//
//
//
//begin
if(Port_Set[Tcom_number+1][5]==1)
{
outp(commandport1,0x03); //read WR3;
rr3=inp(commandport1);
if((rr3&0x04)==0x04)
{
//------------------------------//
//-----------rxip---------------//
//------------------------------//
//read data;
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;
}
//------------------EOF-----------------//
outp(commandport2,0x01);
rr1=inp(commandport2); //read RR1;
if((rr1&0x80)==0x80) //EOF
{
com_received_num[Tcom_number+1]--;
com_received_num[Tcom_number+1]--;
//sync_recevie_7e[Tcom_number+1]=1;
if((rr1&0x40)==0x40) //CRC;
{
//crc_check_erro[Tcom_number+1]=1;
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
{}
}
};
//-------------------------End EOF-----
//------------------------------//
//rxip's txip;
//------------------------------//
if((rr3&0x02)==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
{
//sending[Tcom_number+1]=0;
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]>=3)//+++3
sending[Tcom_number+1]=0;
}
}
outp(commandport2,0x28);
}
}
//-----------end rxip's txip;
/*/--------------------------------//
//read WR3 again
//
//--------------------------------//
outp(commandport1,0x03); //read WR3;
rr3=inp(commandport1);
//-----------------------------//
//
//-----------------------------//
if((rr3&0x02)==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]>=3)//+++3
sending[Tcom_number+1]=0;
}
}
outp(commandport2,0x28);
}
//............end txip;
}
//-----------------------------*/
}
//------------------------------//
//----------end rxip------------//
//------------------------------//
else
{
if((rr3&0x02)==0x02)
{
//------------------------------//
//----------txip------------//
//------------------------------//
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
{
sending[Tcom_number+1]=0;
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]>=3)//+++3
sending[Tcom_number+1]=0;
}
}
outp(commandport2,0x28);
}
/*/............end txip;
outp(commandport1,0x03); //read WR3;
rr3=inp(commandport1);
if((rr3&0x04)==0x04) //rxip;
{
//........
if(Port_Set[Tcom_number+1][5]==1)
{
//read data;
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;
}
//---EOF--------------------------------------
outp(commandport2,0x01);
rr1=inp(commandport2); //read RR1;
if((rr1&0x80)==0x80) //EOF
{
//sync_recevie_7e[Tcom_number+1]=1;
if((rr1&0x40)==0x40) //CRC;
{
//crc_check_erro[Tcom_number+1]=1;
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
{}
}
};
/////---------------End EOF-----
}
else
{
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;
}
}
}*/
}
//------------------------------//
//----------end txip------------//
//------------------------------//
}
//end;
}
else
//======================
//Asncy:
//
//
{
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;
}
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
{
sending[Tcom_number+1]=0;
outp(commandport2,0x28);
}
outp(commandport1,0x03);
rr3=inp(commandport1);
rr3=rr3&0x02;
}
}
//==================End CH: B=================//
//********************************************//
outp(commandport1,0x03);
rr3=inp(commandport1);
//if(rr3 & 0x66!=0) goto handle3a;
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);
outp(intcommand1,0x20);
outp(intcommand2,0x20);
enable();
}
void port_end(void)
{
disable();
asm{
push ds
mov dx,300h
mov al,01
out dx,al
pop ds
}
setvect(0x0c,old_com1int); //recover interrupt vector
setvect(0x0b,old_com2int); //recover interrupt vector
setvect(0x0d,old_int5);
setvect(0x0e,old_int6);
setvect(0x0f,old_int7);
setvect(0x71,old_int9);
setvect(0x73,old_int11);
//setvect(0x76,old_int14);
setvect(0x77,old_int15);
setvect(0x72,old_int10);
//outp(com1_intflag,0x0);
/*outp(com2_intflag,0x0);
outp(com3_intflag,0x0);
outp(com4_intflag,0x0);
outp(com5_intflag,0x0);
outp(com6_intflag,0x0);
outp(com7_intflag,0x0);
outp(com8_intflag,0x0);
outp(com9_intflag,0x0);
outp(com10_intflag,0x0);
outp(inter_state,0x0); */
/*setvect(0x0c,old_com1int);
setvect(0x0b,old_com2int);
setvect(0x0d,old_com3int);
setvect(0x0e,old_com4int);
setvect(0x0f,old_com5int);
setvect(0x73,old_com6int);
setvect(0x77,old_com7890int);
setvect(0x77,old_com8int);
setvect(0x09,old_keyint);
setvect(0x72,old_int10);
setvect(0x08,old_int0);*/
outp(intmask1,old_intmas_reg1);
outp(intmask2,old_intmas_reg2);
outp(com3_commandport,0x09);
outp(com3_commandport,0xc0); //hardeware reset;
outp(com5_commandport,0x09);
outp(com5_commandport,0xc0); //hardeware reset;
outp(com7_commandport,0x09);
outp(com7_commandport,0xc0); //hardeware reset;
outp(com9_commandport,0x09);
outp(com9_commandport,0xc0); //hardeware reset;
outp(com11_commandport,0x09);
outp(com11_commandport,0xc0); //hardeware reset;
outp(com13_commandport,0x09);
outp(com13_commandport,0xc0); //hardeware reset;
enable();
}
/****************************************
*
*
*
*/
void interrupt_zi_programe_async(int Tcom_number)//2003-06-10
{
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;
handleasyn:
//.........................A
/////////////////////////////
/////////////////data receive;
outp(commandport1,0x03); //A receive;
rr3=inp(commandport1);
rr3=rr3&0x20;
while(rr3==0x20)
{
com_int_count[Tcom_number]++;
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;
iportreceive
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -