主要函数
int openport(char *Dev) // 打开串口
int setport(int fd, int baudjnt databitsjnt stopbits,int parity)//设置串口,波特率,数据位,
停止位,校验
int readport(intfd.char *buf,int lenjnt maxwaittime)//?数据,参数为串口,BUF,长度,超
时时间
int writeport(int fd,char *buf,int len) //发送数据
void clearport(int fd)〃如果出现数据与规约不符合,可以调用这个函数来刷新串口读写
数据
如果有BUG,请大家及时回复给我,EMAIL:。
#include
#include #include #include #include #include #in elude
vermo.h〉
int ope nport(char *Dev)
{
int fd = open( Dev, O_RDWR|O_NOCTTY|O_NDELAY );
if (-1 == fd)
{
perror(MCanMt Open Serial Port”);
return -1;
}
else
return fd;
} int setport(int fd, int baudjnt databitsjnt stopbitsjnt parity) int baudrate;
struct termios newtio; switch(baud)
{
case 300:
baudrate=B300;
break;
case 600:
baudrate=B600;
break;
case 1200:
baudrate=B1200;
break;
case 2400:
baudrate=B2400;
break;
case 4800:
baudrate=B4800;
break;
case 9600:
baudrate=B9600;
break;
case 19200:
baudrate=B19200;
break;
case 38400:
baudrate=B38400;
break;
default:
baudrate=B9600;
break;
}
tcgetattr(fd,&newtio);
bzero(&newtio,sizeof(newtio));
//setting c_cflag
newtio.c_cflag &=~CSIZE;
switch (databi⑸/"设置数据位数"/
{
case 7:
newtio.c_cflag |= CS7; //7 位数据位 break;
case 8:
newtio.c_cflag |= CS8; //8 位数据位
break;
default:
newtio.c_cflag |= CS8;
break;
}
switch (parity) //设置校验
{
case 'n':
case 'N?:
newtio.c_cflag &= ~PARENB; r Clear parity enable */ newtio.cjflag &= ~INPCK; /* Enable parity checking 7 break;
case 'o':
case O:
newtio.c_cflag |= (PARODD | PARENB);/* 设置为奇效验?/ newtio.cjflag |= INPCK;/* Disnable parity checking V
break;
case O:
case 'E?:
newtio.c_cflag |= PARENB;广 Enable parity */ newtio.c_cflag &= ~PARODD; /* 转换为偶效验*/ newtio.cjflag |= INPCK; /* Disnable parity checking 7 break;
case S:
case 's': /*as no parity*/
newtio.c_cflag &= ~PARENB;
newtio.c_cflag &= ~CSTOPB;break;
default:
newtio.c_cflag &= ~PARENB; /* Clear parity enable */
newtio.c_iflag &= ~INPCK; /* Enable parity checking 7
break;
)
switch (stopbits)//设宜停止位
{