首页 理论教育 串口通信程序设计主要语句

串口通信程序设计主要语句

时间:2023-11-16 理论教育 版权反馈
【摘要】:串口通信一般分为接收端和发送端两部分。fd=open;取得当前串口值,并保存至oldtio。① 设置波特率为38 400,8个数据位,忽略任何调制解调器状态同时启动接收器。newtio.c_iflag=IGNPAR;③ 设输出模式非标准型,同时不回应。RS-232的通信格式为38 400,n,8,1。图12.2计算机的串口连线步骤2:编辑源程序代码。设接收端的源文件名为12-2-r.c,发送端的源文件名为12-2-s.c,在接收端打开端口COM2后,COM2口会读取计算机COM1口传来的数据,并输出。表12.5tcgetattr函数tcsetattr函数说明如表12.6所示。

串口通信程序设计主要语句

串口通信一般分为接收端和发送端两部分。

1.接收端

(1)打开PC的COM1端口。

如果以读写的方式打开COM1端口,语句可写为:

fd=open(“/dev/ttyS0”,O_RDWR | O_NOCTTY);

(2)取得当前串口值,并保存至结构体变量oldtio。

tcgetattr(fd,&oldtio);

(3)清除结构体变量newtio。

bzero(&newtio,sizeof(newtio));

(4)设置串口参数。

① 假定设置波特率为38 400,8个数据位,忽略任何调制解调器状态,同时启动接收器。

newtio.c_cflag=BAUDRATE |CS8 |CLOCAL|CREAD;

② 忽略奇偶校验错误

newtio.c_iflag=IGNPAR;

③ 设输出模式非标准型,同时不回应。

ewtio.c_oflag=0;

④ 启用正规模式。

newtio.c_lflag=ICANON;

(5)清除所有列队在串口的输入输出。

tcflush(fd,TCIFLUSH);

(6)设置当前的串口参数为newtio。

tcsetattr(fd,TCSANOW,&newtio);

(7)读取缓存中的数据。

read(fd,buf,255);

(8)关闭串口。

close(fd);

(9)恢复旧的端口参数。

tcsetattr(fd,TCSANOW,&oldtio);

2.发送端

(1)打开PC的COM2端口。

fd=open(“/dev/ttyS1”,O_RDWR | O_NOCTTY);

(2)取得当前串口值,并保存至oldtio。

tcgetattr(fd,&oldtio);

(3)清除结构体newtio。

bzero(&newtio,sizeof(newtio));

(4)设置串口参数。

① 设置波特率为38 400,8个数据位,忽略任何调制解调器状态同时启动接收器。

newtio.c_cflag=BAUDRATE |CS8 |CLOCAL|CREAD;

② 忽略奇偶校验错误。

newtio.c_iflag=IGNPAR;

③ 设输出模式非标准型,同时不回应。

ewtio.c_oflag=0;

④ 启用正规模式。

newtio.c_lflag=ICANON;

(5)清除所有列队在串口的输入输出。

tcflush(fd,TCIFLUSH);(www.xing528.com)

(6)设置当前的串口为newtio。

tcsetattr(fd,TCSANOW,&newtio);

(7)向串口写入数据,储存在缓存中。

write(fd,s1,1);

(8)关闭串口。

close(fd);

(9)恢复旧的端口参数。

tcsetattr(fd,TCSANOW,&oldtio);

例12.2 通过计算机的COM1和COM2进行通信,利用RS-232来传送信息,其中COM1为发射端,COM2为接收端,当接收端接收到字符'@'时,结束传输。RS-232的通信格式为38 400,n,8,1(38 400表示波特率大小,n表示不进行奇偶校验,8表示数据位,1表示停止位)。

步骤1:连线。

计算机的COM1和COM2通过RS-232线连接如图12.2所示。

图12.2 计算机的串口连线

步骤2:编辑源程序代码。

设接收端的源文件名为12-2-r.c,发送端的源文件名为12-2-s.c,在接收端打开端口COM2后,COM2口会读取计算机COM1口传来的数据,并输出。若COM2口接收到的字符为'@',则结束传输。

步骤3:用gcc编译程序

[root@localhost root]#gcc 12-2-r.c –o 12-2-r

步骤4:编辑发送端源程序代码。

发送端COM1会把COM1的数据发送给COM2。若COM2接收的字符为'@',则结束传输。

[root@localhost root]#vim 12-2-s.c

#include <stdio.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

步骤5:用gcc编译程序。

[root@localhost root]#gcc 12-2-s.c –o 12-2-s

步骤6:测试运行结果。

(1)打开一个终端,运行发送端程序:

[root@localhost root]#./ 12-2-r2.

(2)打开另一个终端,运行发送端程序,并输入“hello,lupa!”。

(3)接着会在接收端看到传来的数据。

结果分析:接收端收到发送端传来的字符(hello,lupa!),并统计出了字符数。

tcgetattr函数说明如表12.5所示。

表12.5 tcgetattr函数

tcsetattr函数说明如表12.6所示。

表12.6 tcsetattr函数

tcflush函数说明如表12.7所示。

表12.7 tcflush函数

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈