| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4291 人关注过本帖
标题:C语言操作PC串口
只看楼主 加入收藏
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:3 
C语言操作PC串口
快疯了。。。。。。。。
前几天在论坛里问了一个关于“C语言操作PC串口”的问题。感觉是不是太简单了,大家都不屑一顾。
然后自己瞎捣腾,捣腾了好几天,终于捣腾一点点点点东西,然后又彻底没有头绪了。。。
程序代码:
#include <stdio.h>
int main(void)
{
    FILE *fp;
    if((fp=fopen("com1","r"))==NULL)
        puts("COM 1 opened!\n");
    else
        puts("Can't open COM1!\n");
    return 0;
}
以下是想到的解决方案:
(1)C++、C#编写串口调试工具。
(2)使用VC++6.0的MFC的com控件。
(3)使用Turbo C 的outportb()函数。
(4)上面这段代码。
以下是对上面方案的评价:
(1)不懂C++、C#
(2)win7(x64)下无法加载控件(亲测)。
(3)turbo C是老古董了,只能在dos环境下运行。
(4)看上去这段代码很诱人、很简单,但是现在完全没有头绪,快疯了!!!!我线能打开串口了,现在主要是不知道怎么去配置串口,比如:波特率、奇偶校验、停止位、几位数据位等等。
版主,快来救我。
如果这个被我搞定了,我就宣布我从“C语言论坛”毕业!!!进军“C++论坛”。
搜索更多相关主题的帖子: C语言 
2015-06-11 20:04
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
收藏
得分:0 
顶自己
2015-06-11 20:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
我认为 这个需要实际需求  闭门造车弄不出来

DO IT YOURSELF !
2015-06-11 20:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:10 
“现在主要是不知道怎么去配置串口,比如:波特率、奇偶校验、停止位、几位数据位等等。”
------ 所以说,提问时对问题描述要清晰简洁。你说了一大堆话,看完你的问题后,乱七八糟不知道要回答什么。
你的问题不是“C语言操作PC串口”,而是“在windows平台上,C语言怎么操作PC串口?”,没有“在windows平台上”这个限语,没有人有能力回答你的问题。
比如你以前的一个帖子,看到“#include "dos.h",#include "conio.h"”后,得,dos的我忘了,放弃回答;
比如你这个帖子,又是什么“C#、com控件、Turbo C”的,皆非我所会或所愿意回答的。

回正题,在windows平台,只使用API操作COM,我给个例子给你

打开COM1
HANDLE hCom = CreateFile(TEXT("COM1"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( hCom==INVALID_HANDLE_VALUE ) return false;

设置 波特率、奇偶校验、停止位 等等
DCB CommDCB;
GetCommState( hCom, &CommDCB );
CommDCB.BaudRate = BaudRate;
CommDCB.Parity = EVENPARITY;
CommDCB.StopBits = ONESTOPBIT;
CommDCB.ByteSize = 8;
CommDCB.fBinary = 1;
CommDCB.fParity = 1;
CommDCB.fOutxCtsFlow = 0;
CommDCB.fOutxDsrFlow = 0;
CommDCB.fDtrControl = 0;
CommDCB.fDsrSensitivity = 0;
CommDCB.fTXContinueOnXoff = 0;
CommDCB.fOutX = 0;
CommDCB.fInX = 0;
CommDCB.fErrorChar = 0;
CommDCB.fNull = 0;
CommDCB.fRtsControl = RTS_CONTROL_TOGGLE;
CommDCB.fAbortOnError = 0;
SetCommState( hCom, &CommDCB );

设置缓冲大小
SetupComm( hCom, 100, 100 );

设置超时时间
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts( hCom, &CommTimeouts );
CommTimeouts.ReadIntervalTimeout = MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.ReadTotalTimeoutConstant = 0;
SetCommTimeouts( hCom, &CommTimeouts );

/////////////// 这期间就是对COM进行读写了 ///////////////
COMSTAT ComStat; ClearCommError(hCom,&Errors,&ComStat); 后 ComStat.cbInQue 保存着一个数值,指明还有多少字节已经获得但没有用ReadFile取走。
读用 ReadFile,写用 WriteFile。
/////////////////////////////////////////////////////////

关闭COM
CloseHandle( hCom );

基本上就这些,详见 MFC
2015-06-12 08:56
快速回复:C语言操作PC串口
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018239 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved