⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4spcom.cpp

📁 4串口收发程
💻 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 + -