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

📄 4spcomlib.cpp

📁 4串口收发代码的函数库
💻 CPP
字号:
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <bios.h>


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 receive(int nAddress, char * p_rec) ;

void FIFO_rec(int nAddress, char * p_rec, int start, int count);


void initcom(int nAddress, int nBaudrate, int nDataBits, int nStopBits,int nParityBits, int flag)
{
    unsigned int parameter ;
    unsigned int divisor ;
    char c ;

    parameter = nDataBits - 5 ;
    if (nStopBits == 1)
    {
	parameter |= 0x00 ;
    }
    else
    {
	parameter |= 0x04 ;
    }
    switch (nParityBits)
    {
	case 0:
	    parameter |=0x00 ;
	    break ;
	case 1:
	    parameter |=0x08 ;
	    break ;
	case 2:
	    parameter |=0x18 ;
	    break ;
    }
    outportb(nAddress+3, parameter) ;
    divisor = 115200/nBaudrate ;
    c = inportb(nAddress+3) ;
    outportb(nAddress+3, c|0x80) ;
    outport(nAddress, divisor);
    outportb(nAddress+3, c) ;
    outportb(nAddress+2, 0x0F) ;

    c = inportb(nAddress + 4) ;
    if (flag == 0) c&= 0xFD ;
    else c|=0x2;
    outportb(nAddress + 4, c) ;

}

void FIFO_initcom(int nAddress, int nBaudrate, int nDataBits, int nStopBits,int nParityBits, int count, int flag)
{
    unsigned int parameter ;
    unsigned int divisor ;
    char c ;

    parameter = nDataBits - 5 ;
    if (nStopBits == 1)
    {
	parameter |= 0x00 ;
    }
    else
    {
	parameter |= 0x04 ;
    }
    switch (nParityBits)
    {
	case 0:
	    parameter |=0x00 ;
	    break ;
	case 1:
	    parameter |=0x08 ;
	    break ;
	case 2:
	    parameter |=0x18 ;
	    break ;
    }
    outportb(nAddress+3, parameter) ;
    divisor = 115200/nBaudrate ;
    c = inportb(nAddress+3) ;
    outportb(nAddress+3, c|0x80) ;
    outport(nAddress, divisor);
    outportb(nAddress+3, c) ;
    switch (count)
    {
	case 1: outportb(nAddress + 2, 0x0F);
		break;
	case 4: outportb(nAddress + 2, 0x4F);
		break;
	case 8: outportb(nAddress + 2, 0x8F);
		break;
	case 14:outportb(nAddress + 2, 0xCF);
		break;
	case 16:outportb(nAddress + 2, 0xCF);
		break;
	default:break;
    }

    c = inportb(nAddress + 4) ;
    if (flag == 0) c&= 0xFD ;
    else c|=0x2;

    outportb(nAddress + 4, c) ;

}

int send(int nAddress, char send_char, int flag)
{
    int temp, count =0 ;
    temp = inport(nAddress+5) ;
    temp&=0x20 ;
    while((temp == 0) && (count < 32000) )
    {
	count ++ ;
	temp = inport(nAddress + 5) ;
	temp&=0x20 ;
    }
    if (flag == 0)                   //485 Send
    {
	outportb(nAddress+4,3);
	delay(1);
	outportb(nAddress, send_char) ;
	delay(2);
	outportb(nAddress+4, 1);
    }
    else                             //232 Send
    {
	outportb(nAddress, send_char);
    }

    return (temp) ;  	//if temp = 0, send error

}

int receive(int nAddress, char * p_rec)
{
    int temp ;
    temp = inportb(nAddress+ 5) ;
    temp &= 0x01 ;
    if (temp == 0)
    {
	return (0)  ;
    }
    else
    {
	* p_rec = inportb(nAddress) ;
	return (1) ;
    }
}

int FIFO_send (int nAddress, char * send_char, int flag, int count)
{
    int temp, i =0 ;

    temp = inport(nAddress + 5);
    temp &= 0x20;
    while((temp == 0) && (i <32000))
    {
	i ++;
	temp = inport(nAddress + 5);
	temp &= 0x20;
    }
    if (temp == 0) return (temp);
    if (flag == 0)        //485 Send
    {
	outportb(nAddress+4, 3);
	delay(2);
	for (i = 0; i<count; i++)
	{
	    outportb(nAddress, send_char[i]) ;
	}
	delay(20);
	outportb(nAddress+4,1);
    }
    else
    {
	for (i = 0; i<count;i++)
	{
	    outportb(nAddress, send_char[i]);
	}
    }

    return (temp);  	//if temp = 0, send error

}

void FIFO_rec(int nAddress, char * p_rec, int start, int count)
{
    int temp,i ;
    for (i = start; i < (count+start); i++)
    {
	p_rec[i] = inportb(nAddress);
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -