c语言如何获取串口列表,如何通过串口来读写数据,请教达人

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

如何通过终端读取并显示串口连接的某硬件的数据

通过一程序来代替hexdump  从而进行输入输出

用C语言实现

下面一程序为i/o输入输出,请教达人,怎样才能输入输出串口的硬件数据

#include

#include

#include

#include

#include

#include

#include

#include

voidstripcrlf(char *temp);

int write_buffer(int fd,const void *buf,int count);

intread_buffer(int fd,void *buf,int count);

int rednlsting(int socket,char *buf,int maxlen);

int readdelimstring(int socket,char *buf,int maxlen,char delim);

void exiterror(char *message,int errnum);

const char *MESSAGE_filename="Select output filename:";

const char *MESSAGE_numbers="Please enter some numbers. Use -1 when you want to exit.\n";

int main(void)

{

int outfile;

int input[80];

int buffer[80];

write_buffer(1,MESSAGE_filename,strlen(MESSAGE_filename));

readnlstring(0,input,sizeof(input));

outfile=open(input,O_WRONLY | O_CREAT | O_TRUNC,0640);

if(outfile == -1)

{

exiterror("Error opening output file:",errno);

}

write_buffer(1,MESSAGE_numbers,strlen(MESSAGE_numbers));

do

{

readnlstring(0,input,sizeof(input));

if(write_buffer(outfile,input,strlen(input)) 

{

exiterror("Error writing:",errno);

}

if(write_buffer(outfile,"\n",1)<0)

{

exiterror("Error writing:",errno);

}

sprint(buffer,"New:%d\n", atoi(input)*5+(20*100)-12);

if(write_buffer(outfile,buffer,strlen(buffer))<0)

{

exiterror("Error writing:",errno);

}

}

while(atoi(input)!=-1);

close(outfile);

return 0;

}

void stripcrlf(char *temp)

{

while(strlen(temp)&&temp[0]&&((temp[strlen(temp)-1] == 13)||(temp[strlen(temp)-1] ==10)))

{

temp[strlen(temp)-1] = 0;

}

}

int write_buffer(int fd,const void *buf,int count)

{

const void *pts = buf;

int status = 0,n;

if (count<0)  return (-1);

while(status!= count)

{

n=write(fd,pts+status,count-status);

if(n 

status += n;

}

return(status);

}

int read_buffer(int fd,void *buf,int count)

{

void *pts=buf;

int status=0,n;

if(count<0)return(-1);

while(status!=count)

{

n = read(fd,pts+status,count-status);

if(n<1) return n;

status += n;

}

return(status);

}

int readnlstring(int socket,char *buf,int maxlen)

{

return readdelimstring(socket,buf,maxlen,'\n');

}

int readdelimstring(int socket,char *buf,int maxlen,char delim)

{

int status;

int count=0;

while(count

{

if((status=read_buffer(socket,buf+count,1))<1)

{

printf("Error reading./n");

return -1;

}

if(buf[count]==delim)

{

buf[count]=0;

return0;

}

count++;

}

buf[count]=0;

return0;

}

void exiterror(char *message,int errnum)

{

write_buffer(1,message,strlen(message));

write_buffer(1,sys_errlist[errnum],strlen(sys_errlist[errnum]));

write_buffer(1,"\n",1);

exit(255);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言是一种高级编程语言,可以用来开发各种应用程序。其中,串口通信是一种常见的通信方式,可以用于智能家居、工业自动化等领域。 串口通信有两个关键因素:波特率和数据位。波特率指的是单位时间内传输的数据比特数,常见的有9600、115200等,需要在软件中设定一致。数据位指的是每个字符数据传输时占用的比特数,常见的有7、8等,需要和硬件设备一致。 对于C语言来说,可以使用标准的I/O库stdio.h中的fopen()、fread()和fwrite()方法来实现串口读写数据。首先要打开串口通信设备,可以通过fopen()方法以读写方式打开设备文件,然后可以使用fwrite()方法向串口发送数据,使用fread()方法从串口接收数据。 另外,还需要使用系统头文件termios.h中的结构体和函数对串口进行配置。可以使用结构体termios来设置串口属性,例如串口波特率、数据位、停止位等。还可以使用函数tcsetattr()将这些属性设置到操作系统中,并使用tcgetattr()函数获取串口参数。 在C语言中实现串口读写数据需要注意诸多问题,例如数据缓冲区的处理、错误处理等。如果处理不当容易导致程序崩溃或者无法正常工作。 总之,C语言是一种非常强大的编程语言,可以用来实现各种复杂的功能,实现串口读写数据只是其中一种最基础的功能。需要对C语言有深入的理解和丰富的编程经验才能更好地实现串口通信。 ### 回答2: 串口是一种常见的通信接口,可以在计算机和其他设备之间进行数据传输。在C语言中,可以使用串口库函数实现对串口读写操作。下面是一个简单的实现: 1.首先需要打开串口。可以使用open()函数来打开串口设备,指定串口的名称、打开方式和权限等参数。 2.设置串口的属性。可以使用tcgetattr()和tcsetattr()函数来设置串口的波特率、数据位、校验位和停止位等属性。 3.向串口数据。可以使用write()函数向串口写入数据,指定写入数据的缓冲区和数据长度等参数。 4.从串口读取数据。可以使用read()函数从串口读取数据,指定读取数据的缓冲区和数据长度等参数。 5.关闭串口。使用close()函数关闭串口设备。 除了以上基本操作,还可以使用其他的库函数来实现更高级的串口操作,例如设置串口的流控制、超时等属性,或者在串口中异步发送和接收数据等。在实际应用中,需要根据具体的应用需求来选择适合的串口库函数进行编程。 ### 回答3: C语言可以通过调用操作系统的串口API,来实现串口读写串口通信一般使用COM口,可以通过打开COM口来建立串口连接。COM口的打开需要设置串口的参数,包括波特率、数据位、停止位和校验位等等。在C语言中,可以使用Windows API或Linux API来设置串口参数。 在Windows环境下,可以使用CreateFile函数打开串口,设置DCB结构体中的各种属性,然后使用ReadFile和WriteFile函数读写数据。在Linux环境下,可以使用open函数打开串口,使用tcgetattr和tcsetattr函数来设置串口属性,然后使用read和write函数来读写数据。 在进行串口读写时,需要注意数据的格式。一般来说,串口传输的数据是二进制数据,可能包含ASCII码和非ASCII码字符。在读取数据时,需要根据数据的格式进行解析。在写入数据时,需要将数据转换为正确的格式,并按照协议进行组装。 总的来说,C语言实现串口读写数据需要掌握操作系统的API和串口工作原理,熟练使用串口的各种参数设置和数据解析方法,在实现过程中需要仔细处理各种异常情况,确保数据的可靠性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值