串口读写程序 (原创,虽然参考了别的程序)

[复制链接]
1833|0
 楼主| wangkj 发表于 2007-12-5 17:16 | 显示全部楼层 |阅读模式
#include&nbsp;&ltstring.h&gt&nbsp;//&nbsp;Check&nbsp;to&nbsp;be&nbsp;sure&nbsp;we&nbsp;need&nbsp;this<br />#include&nbsp;&ltstdlib.h&gt<br />//&nbsp;below&nbsp;are&nbsp;the&nbsp;includes&nbsp;for&nbsp;raw&nbsp;I/O<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&ltunistd.h&gt<br />//#include&nbsp;&quot;configsym.h&quot;<br />#define&nbsp;PORT&nbsp;&quot;/dev/ttyS1&quot;<br />#include&nbsp;&ltstdio.h&gt<br />//#include&nbsp;&quot;curses.h&quot;<br />#include&nbsp;&ltstdlib.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&quot;termio.h&quot;<br />#include&nbsp;&ltstring.h&gt<br />#include&nbsp;&lttime.h&gt<br />int&nbsp;portfd;<br />struct&nbsp;termio&nbsp;newio,oldio;<br />int&nbsp;SetPort()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;portfd&nbsp;&lt&nbsp;0&nbsp;)&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;ioctl(portfd,&nbsp;TCGETA,&nbsp;&oldio)&nbsp;&lt&nbsp;0&nbsp;)&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;ioctl(portfd,&nbsp;TCGETA,&nbsp;&newio)&nbsp;&lt&nbsp;0&nbsp;)&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_cflag&nbsp;&=&nbsp;~CBAUD;<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_cflag&nbsp;&=&nbsp;~CSIZE;<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_cflag&nbsp;|=&nbsp;B115200;<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_cflag&nbsp;|=&nbsp;CS8;<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_cflag&nbsp;|=&nbsp;(CLOCAL&nbsp;|&nbsp;CREAD);<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_cflag&nbsp;&=&nbsp;~(PARENB&nbsp;|&nbsp;CSTOPB);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_iflag&nbsp;&=&nbsp;~(&nbsp;INLCR&nbsp;|ISTRIP&nbsp;|IXON&nbsp;|ICRNL&nbsp;|IGNCR&nbsp;|&nbsp;IGNPAR);<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_oflag&nbsp;&=&nbsp;~OPOST;<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_lflag&nbsp;&=&nbsp;~(&nbsp;ISIG&nbsp;|ECHO&nbsp;|ICANON&nbsp;|&nbsp;NOFLSH);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_cc[VMIN]&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_cc[VTIME]&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;newio.c_cc[VQUIT]&nbsp;=&nbsp;0x7f;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;ioctl(portfd,&nbsp;TCSETAW,&nbsp;&newio)&nbsp;)&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />main()<br />{<br />&nbsp;&nbsp;int&nbsp;ch;<br />&nbsp;&nbsp;static&nbsp;int&nbsp;n;<br /><br />#if&nbsp;defined(O_NDELAY)&nbsp;&&&nbsp;defined(F_SETFL)<br />&nbsp;&nbsp;&nbsp;&nbsp;portfd&nbsp;=&nbsp;open(PORT,&nbsp;O_RDWR|O_NDELAY);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(portfd&nbsp;&gt=&nbsp;0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Cancel&nbsp;the&nbsp;O_NDELAY&nbsp;flag.&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;fcntl(portfd,&nbsp;F_GETFL,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(void)&nbsp;fcntl(portfd,&nbsp;F_SETFL,&nbsp;n&nbsp;&&nbsp;~O_NDELAY);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />#else<br />&nbsp;&nbsp;&nbsp;&nbsp;portfd&nbsp;=&nbsp;open(PORT,&nbsp;O_RDWR);<br />#endif<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(portfd&nbsp;&gt=&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;return&nbsp;value&nbsp;is&nbsp;%d&quot;,SetPort());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n='0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;;){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n&gt('0'+30))&nbsp;n='\n';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;write&nbsp;%d&nbsp;characte:%c\n&quot;,write(portfd,&n,1),n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

580

主题

9972

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部