LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 710|回复: 0

串口读数据出现的问题...

[复制链接]
发表于 2005-7-17 21:46:31 | 显示全部楼层 |阅读模式
我在pc上测试串口的读写,串口线连接com1和com2,读写在一个程序里面实现,现在读串口部分一直有问题,达人们看一下,是这样先写后读的测试方法有问题还是串口设置有问题导致读不到数据?
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define FALSE -1
#define TRUE 1

main()

{int fd;
int nread;
int nwrite;
char buff[512];
struct termios newtio;
fd=open("/dev/ttyS1",O_RDWR|O_NOCTTY|O_NDELAY);
if(fd==-1)
{
printf("COM Open Error\n");
return -1;
}
tcgetattr(fd,&newtio);
cfsetispeed (&newtio,B9600);
cfsetospeed (&newtio,B9600);
newtio.c_cflag=CS8|CLOCAL|CREAD;
newtio.c_lflag=~(ICANON|ECHO|ECHOE|ISIG);
newtio.c_oflag=~OPOST;
newtio.c_iflag=IGNPAR;
newtio.c_cc[VINTR]  =0;
newtio.c_cc[VQUIT]  =0;
newtio.c_cc[VERASE] =0;
newtio.c_cc[VKILL]=0;
newtio.c_cc[VEOF]=4;
newtio.c_cc[VTIME]=0;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VSWTC]=0;
newtio.c_cc[VSTART]=0;
newtio.c_cc[VSTOP]=0;
newtio.c_cc[VSUSP]=0;
newtio.c_cc[VEOL]=0;
newtio.c_cc[VREPRINT]=0;
newtio.c_cc[VDISCARD]=0;
newtio.c_cc[VWERASE]=0;
newtio.c_cc[VLNEXT]=0;
newtio.c_cc[VEOL2]=0;
tcflush(fd,TCIFLUSH);
tcsetattr (fd,TCSANOW,&newtio);

if (tcsetattr(fd,TCSANOW,&newtio)!=0)
{
perror("SetupSerial 3");
return (FALSE);
}
printf("lease input:");
scanf("%s",buff);
nwrite=write(fd,buff,strlen(buff));
printf("Len=%d",nwrite);
printf("\n%s",buff);

close(fd);
//* 读数据*//
fd=open("/dev/ttyS0",O_RDWR);
if(fd==-1)
{
printf("COM Open Error\n");
return -1;
}

tcgetattr(fd,&newtio);
cfsetispeed (&newtio,B9600);
cfsetospeed (&newtio,B9600);
newtio.c_cflag=CS8|CLOCAL|CREAD;
newtio.c_lflag=~(ICANON|ECHO|ECHOE|ISIG);
newtio.c_oflag=~OPOST;
newtio.c_iflag &=~(INLCR|ICRNL|IGNCR|IXON|IXOFF|IUCLC);
newtio.c_cc[VINTR]  =0;
newtio.c_cc[VQUIT]  =0;
newtio.c_cc[VERASE] =0;
newtio.c_cc[VKILL]=0;
newtio.c_cc[VEOF]=4;         
newtio.c_cc[VTIME]=0;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VSWTC]=0;
newtio.c_cc[VSTART]=0;
newtio.c_cc[VSTOP]=0;
newtio.c_cc[VSUSP]=0;
newtio.c_cc[VEOL]=0;
newtio.c_cc[VREPRINT]=0;
newtio.c_cc[VDISCARD]=0;
newtio.c_cc[VWERASE]=0;
newtio.c_cc[VLNEXT]=0;
newtio.c_cc[VEOL2]=0;
tcflush(fd,TCIFLUSH);
tcsetattr (fd,TCSANOW,&newtio);

if (tcsetattr(fd,TCSANOW,&newtio)!=0)
{
perror("SetupSerial 3");
return (FALSE);
}

fd_set rfds;
struct timeval tv;
int retval;
long Timeout;
FD_ZERO(&rfd);
FD_SET(fd,&rfds);
Timeout=30000;
tv.tv_sec=Timeout/1000;
tv.tv_usec=(Timeout%1000)*1000;
select(16,&rfds,NULL,NULL,&tv);
if (FD_ISSET(fd,&rfds))
{
nread=read(fd,buff,512);
printf("\nLen=%d\n",nread);
printf("\nbuff=%s",buff);
}
else

//return errno;

close(fd);
exit(0);

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表