📄 4spcomlib.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 + -