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