📄 4spcom.cpp
字号:
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <bios.h>
#define PORT1_ADD 0X330
#define PORT2_ADD 0X338
#define PORT3_ADD 0X340
#define PORT4_ADD 0X348
#define ESC 27
unsigned char M_main, M_slave ;
unsigned char rec1, rec2, rec3, rec4 ;
unsigned char p_rec1[16], p_rec2[16], p_rec3[16], p_rec4[16];
unsigned char send1, send2, send3, send4 ;
unsigned char p_send1[16], p_send2[16], p_send3[16], p_send4[16];
int RS232, FIFO;
void interrupt (* oldvect1) (...) ;
void interrupt (* oldvect2) (...) ;
void interrupt (* oldvect3) (...) ;
void interrupt (* oldvect4) (...) ;
void interrupt far com1_int(...) ;
void interrupt far com2_int(...) ;
void interrupt far com3_int(...) ;
void interrupt far com4_int(...) ;
void init_intr(int com, int nAddress) ;
void init_8259(...) ;
void init_data(...) ;
void initcom(int nAddress, int nBaudrate, int nDataBits, int nStopBits,int nParityBits, int flag) ;
void FIFO_initcom(int nAddress, int nBaudrate, int nDataBits, int nStopBits,int nParityBits, int count, int flag);
int send (int nAddress, char send_char, int flag) ;
int FIFO_send (int nAddress, char * send_char, int flag, int count) ;
int FIFO_rec (int nAddress, char * p_rec, int start, int count);
void print();
void initwindow(...);
void nextwindow(...);
int Read_Scr(...);
main()
{
int i ;
init_data();
initwindow();
i = Read_Scr();
RS232 = 1 ;
FIFO = 0 ;
switch(i)
{
case '1': RS232 = 1; //RS-232 mode
FIFO = 0;
break;
case '2': RS232 = 0; //RS-485 mode
FIFO = 0;
break;
case '3': RS232 = 1;
FIFO = 1;
break;
case '4': RS232 = 0;
FIFO = 1;
break;
case ESC: return(0);
break;
default: break;
}
// print() ;
if (FIFO == 1)
{
FIFO_initcom(PORT1_ADD, 9600, 8, 1, 0, 14, RS232) ;
FIFO_initcom(PORT2_ADD, 9600, 8, 1, 0, 14, RS232) ;
FIFO_initcom(PORT3_ADD, 9600, 8, 1, 0, 14, RS232) ;
FIFO_initcom(PORT4_ADD, 9600, 8, 1, 0, 14, RS232) ;
}
else
{
initcom(PORT1_ADD, 9600, 8, 1, 0, RS232) ;
initcom(PORT2_ADD, 9600, 8, 1, 0, RS232) ;
initcom(PORT3_ADD, 9600, 8, 1, 0, RS232) ;
initcom(PORT4_ADD, 9600, 8, 1, 0, RS232) ;
}
init_intr(1, PORT1_ADD) ;
init_intr(2, PORT2_ADD) ;
init_intr(3, PORT3_ADD) ;
init_intr(4, PORT4_ADD) ;
init_8259() ;
nextwindow();
while (!bioskey(1))
{
if (FIFO == 0)
{
gotoxy (30, 7) ;
printf("%s"," ");
gotoxy (30, 7);
printf("%2X", send1) ;
i = send(PORT1_ADD,send1, RS232) ;
send1= send1 + 1 ;
gotoxy(30, 10) ;
printf("%s"," ");
gotoxy(30, 10) ;
printf("%2X", send2) ;
i = send(PORT2_ADD, send2, RS232) ;
send2 = send2 + 1 ;
gotoxy(30, 13) ;
printf("%s"," ");
gotoxy(30, 13) ;
printf("%2X", send3) ;
i = send(PORT3_ADD, send3, RS232) ;
send3 = send3 + 1 ;
gotoxy(30, 16) ;
printf("%s"," ");
gotoxy(30, 16) ;
printf("%2X", send4) ;
i = send(PORT4_ADD, send4, RS232) ;
send4 = send4 + 1 ;
delay(50) ;
gotoxy(30, 8) ;
printf("%s"," ");
gotoxy(30, 8) ;
printf("%2X", rec2) ;
gotoxy(30, 11) ;
printf("%s"," ");
gotoxy(30, 11) ;
printf("%2X", rec1) ;
gotoxy(30, 17) ;
printf("%s"," ");
gotoxy(30, 17) ;
printf("%2X", rec3) ;
gotoxy(30, 14) ;
printf("%s"," ");
gotoxy(30, 14) ;
printf("%2X", rec4) ;
delay(800) ;
}
else
{
for ( i = 0; i<16; i ++)
{
gotoxy (30+i*3, 7) ;
printf("%s"," ");
gotoxy (30+i*3, 7);
p_send1[i] ++ ;
printf("%2X", p_send1[i]) ;
}
i = FIFO_send(PORT1_ADD,p_send1, RS232, 16) ;
for ( i = 0; i<16; i ++)
{
gotoxy (30+i*3, 10) ;
printf("%s"," ");
gotoxy (30+i*3, 10);
p_send2[i] ++ ;
printf("%2X", p_send2[i]) ;
}
i = FIFO_send(PORT2_ADD,p_send2, RS232, 16) ;
for ( i = 0; i<16; i ++)
{
gotoxy (30+i*3, 13) ;
printf("%s"," ");
gotoxy (30+i*3, 13);
p_send3[i] ++ ;
printf("%2X", p_send3[i]) ;
}
i = FIFO_send(PORT3_ADD,p_send3, RS232, 16) ;
for ( i = 0; i<16; i ++)
{
gotoxy (30+i*3, 16) ;
printf("%s"," ");
gotoxy (30+i*3, 16);
p_send4[i] ++ ;
printf("%2X", p_send4[i]) ;
}
i = FIFO_send(PORT4_ADD,p_send4, RS232, 16) ;
for ( i = 0; i<16; i ++)
{
gotoxy (30+i*3, 8) ;
printf("%s"," ");
gotoxy (30+i*3, 8);
printf("%2X", p_rec2[i]) ;
}
for ( i = 0; i<16; i ++)
{
gotoxy (30+i*3, 11) ;
printf("%s"," ");
gotoxy (30+i*3, 11);
printf("%2X", p_rec1[i]) ;
}
for ( i = 0; i<16; i ++)
{
gotoxy (30+i*3, 14) ;
printf("%s"," ");
gotoxy (30+i*3, 14);
printf("%2X", p_rec4[i]) ;
}
for ( i = 0; i<16; i ++)
{
gotoxy (30+i*3, 17) ;
printf("%s"," ");
gotoxy (30+i*3, 17);
printf("%2X", p_rec3[i]) ;
}
delay(2000) ;
}
}
disable() ;
setvect(0x0D, oldvect1) ;
setvect(0x72, oldvect2) ;
setvect(0x73, oldvect3) ;
setvect(0x74, oldvect4) ;
outportb(0x21, M_main) ;
outportb(0xA1, M_slave) ;
enable() ;
return 0 ;
}
void init_intr(int com, int nAddress)
{
char c ;
disable() ;
switch (com)
{
case 1:
oldvect1= getvect(0x0D) ;
outportb(nAddress+1, 0x01) ; //Enable receive-data-available interrupt
setvect(0x0D, com1_int) ;
case 2:
oldvect2= getvect(0x72) ;
outportb(nAddress+1, 0x01) ; //Enable receive-data-available interrupt
setvect(0x72, com2_int) ;
case 3:
oldvect3= getvect(0x73) ;
outportb(nAddress+1, 0x01) ; //Enable receive-data-available interrupt
setvect(0x73, com3_int) ;
case 4:
oldvect4= getvect(0x74) ;
outportb(nAddress+1, 0x01) ; //Enable receive-data-available interrupt
setvect(0x74, com4_int) ;
}
c = inportb(nAddress+4) ;
c |= 0x08 ;
outportb(nAddress+4, c) ; //enabel external Interrupt
enable() ;
}
void interrupt far com1_int(...)
{
unsigned int temp ;
if (FIFO == 0)
{
rec1 = inportb(0x330) ;
}
else
{
temp = inportb(PORT1_ADD + 2);
temp &=0x08 ;
if (temp == 0)
{
FIFO_rec(PORT1_ADD, p_rec1, 0, 14) ;
}
else
{
FIFO_rec(PORT1_ADD, p_rec1, 14, 2);
}
}
outportb(0x20, 0x20) ;
}
void interrupt far com2_int(...)
{
unsigned char temp ;
if (FIFO == 0)
{
rec2 = inportb(PORT2_ADD) ;
}
else
{
temp = inportb(PORT2_ADD + 2);
temp &=0x08 ;
if (temp == 0)
{
FIFO_rec(PORT2_ADD, p_rec2, 0, 14) ;
}
else
{
FIFO_rec(PORT2_ADD, p_rec2, 14, 2);
}
}
outportb(0x20, 0x20) ;
outportb(0xA0, 0x20) ;
}
void interrupt far com3_int(...)
{
unsigned char temp ;
if (FIFO == 0)
{
rec3 = inportb(PORT3_ADD) ;
}
else
{
temp = inportb(PORT3_ADD + 2);
temp &=0x08 ;
if (temp == 0)
{
FIFO_rec(PORT3_ADD, p_rec3, 0, 14) ;
}
else
{
FIFO_rec(PORT3_ADD, p_rec3, 14, 2);
}
}
outportb(0x20, 0x20) ;
outportb(0xA0, 0x20) ;
}
void interrupt far com4_int(...)
{
unsigned char temp ;
if (FIFO == 0)
{
rec4 = inportb(PORT4_ADD) ;
}
else
{
temp = inportb(PORT4_ADD + 2);
temp &=0x08 ;
if (temp == 0)
{
FIFO_rec(PORT4_ADD, p_rec4, 0, 14) ;
}
else
{
FIFO_rec(PORT4_ADD, p_rec4, 14, 2);
}
}
outportb(0x20, 0x20) ;
outportb(0xA0, 0x20) ;
}
void init_8259 (...)
{
char c ;
disable() ;
M_main = inportb(0x21 ) ;
c = M_main & 0xDF ;
outportb(0x21, c) ; //Set the main 8259 mask bits
M_slave = inportb(0xA1) ;
c = M_slave & 0xE3 ;
outportb(0xA1, c) ; //Set the slave 8259 mask bits
enable() ;
}
void initwindow(...)
{
int i, j;
clrscr();
window(1,1,80,25);
textcolor(WHITE);
textbackground(BLUE);
clrscr();
for( i=1; i<80; i++ )
{
gotoxy(i, 1); putch(0xc4); //put 哪 on screen
gotoxy(i,24); putch(0xc4);
}
for (i = 2; i < 80; i++)
{
gotoxy(i, 11) ; putch(0xc4);
}
for( i=1; i<24 ;i++ )
{
gotoxy( 1,i); putch(0xb3); //put
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -