How to:判断串口的输入缓冲是否有数据?

ChineseAnt 2000-05-28 02:06:00
...全文
459 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gg 2000-05-30
  • 打赏
  • 举报
回复
根据以上的情况,我不能很清楚地判断怎么回事,不过用ClearCommError来取得状态是不是值得商讨。你看一下MSDN下Technical Articals下Windows Platform下Base Services下Serial Communications in Win32文章,相信对你有用。
ChineseAnt 2000-05-30
  • 打赏
  • 举报
回复
给gg:
使用Windows API进行传口通信,就我个人认为,比之直接使用inp(),outp()更稳定,而且大部分工作都有系统完成了.但是要判断串口中是否有数据这一方面,我就出了问题.
打开一个COM口,如COM2.我在判断input buffer中是否有数据时发现API函数ClearCommError()可行.代码片断如下:
COMMSTAT commstat;
DWORD dwError;
fSuccess=ClearCommError(hComm,&dwError,&commstat);
if (commstat.inQueue>0)
//TODO :ReadFile();
else
//TODO: no data in inputbuffer.
但实际操作中如果是在执行ClearCommError()函数之前,未曾执行过ReadFile(),即使input buffer 中人有未读取的数据,commstat.inQueue的值为0. 反过来,之前曾执行过一次ReadFile(),假使input buffer中有数据,commstat会如实报告.
原因何在,盼望答复.
gg 2000-05-28
  • 打赏
  • 举报
回复
WINDOWS 提 供 的 标 准 通 信API 函 数 很 多(win16 和win32 中 有 所 不 同), 一 般 来 说 常 用 的 有:

win16 win32 作用
OpenComm CreateFile (打开通信口);
BuildCommDCB BuildCommDCB (填充DCB数据结构);
SetCommState SetCommStae (设置通信口状态);
FlushComm PurgeComm (清除通信接收或发送缓冲区);
GetCommError ClearCommError
(恢复或取得通信口的状态);
ReadComm ReadFile (从通信接收缓冲区读字符);
WriteComm WriteFile (向通信发送缓冲区写字符);
CloseComm CloseHandle (关闭通信口);

gg 2000-05-28
  • 打赏
  • 举报
回复
给你一个例子:
一 般 情 况 下 的 串 口 通 讯 无 非 采 用 两 种 方 法: 一 是 利 用Windows 的 通 讯API 函 数, 二 是 利 用VC++( 或 其 它 语 言) 的 标 准 通 讯 函 数_inp、_outp 来 实 现。

---- Windows 的API 函 数 虽 然 使 用 面 很 广, 但 由 于 比 较 复 杂 而 有 一 定 的 难 度, 故 简 单 述 之, 其 编 程 过 程 分 为 初 始 化 串 口、 配 置 串 口、 超 时 控 制、 数 据 传 输、 关 闭 串 口 等。

---- VC++ 串 口 通 讯

---- 一、 初 始 化 串 行 通 讯 口

---- 通 过 计 算 机 串 口 进 行 通 讯 之 前, 必 须 根 据 监 控 设 备 的 有 关 通 讯 参 数, 约 定 双 方 的 通 讯 方 式, 包 括 波 特 率 的 设 置、 奇 偶 位 校 验 及 停 止 位 的 设 立。 确 定 数 据 传 输 帧 格 式, 确 定UART 操 作 方 式。 逐 个 对 线 路 控 制 寄 存 器、 波 特 率 因 子 寄 存 器 和M0DEM 寄 存 器 写 入 操 作。

---- 先 确 定 计 算 机 的 通 讯 口 地 址 是3F8 还 是2F8( 根 据 用 户 的 不 同 要 求, 可 加 插 卡 而 有3E8、2E8, 甚 至 使 用 多 用 户 卡 而 有3220、3228、4220、4228、5220、5228), 例 中 以2F8 做 为 端 口 地 址。 利 用_outp(PORT,0x0c) 将 波 特 率 设 置 为9600,(_outp(PORT,0x30) 将 波 特 率 设 置 为2400,_outp(PORT,0x18) 将 波 特 率 设 置 为4800)。

---- 数 据 传 输 格 式 则 由 地 址PORT+3 确 定, 如 选 用 七 位 一 停 止 位 偶 校 验, 则 采 用outp(PORT+3,0x3a) 及outp(PORT+3 ,0x1a) 两 个 语 句; 如 选 用 八 位 一 停 止 位 无 奇 偶 校 验, 则 采 用outp(PORT+3,0x3a) 及outp(PORT+3 ,0x03) 两 个 语 句; 至 于 为 什 么, 可 参 考 有 关 异 步 通 讯 数 据 格 式 方 面 的 书。

---- 二、 查 询 发 送 流 程

---- 只 需CPU 检 测 到UART 发 送 器 保 持 寄 存 器 为 空, 即 向UART 输 出 一 个 字 符。 发 送 方 首 先 输 出RTS 和DTR 有 效, 检 测MODEM 寄 存 器, 只 有 收 到DEC 输 入 的CTS、DSR 有 效,CPU 才 向UART 输 出 一 发 送 字 符。

---- 三、 查 询 接 收 流 程

---- 只 需CPU 检 测 到UART 接 收 器 数 据 准 备 就 绪, 即 可 从 接 收 器 数 据 寄 存 器 中 读 取 一 字 符。 接 收 方 首 先 输 出 数 据 终 端 就 绪 有 效(DTR=1), 然 后 检 测MODEM 状 态 寄 存 器, 只 有DSR=1,CPU 才 接 收 一 字 符。

---- 程 序 例

---- 为 了 编 程 的 方 便, 我 把 实 时 监 控 过 程 中 的 串 口 初 始 化、 串 口 接 收、 串 口 发 送 等 以 子 程 序 的 形 式 呈 现。

确 定 通 讯 口 地 址:int PORT=0x2F8;
接 收 字 符 子 程 序:
char near readbyte(void)
{
int time_limit;
char sta;
time_limit=5000;
while ((sta=inp(PORT+5) & 0x01) !=1)
{ time_limit--;
if (time_limit==0) {
/*printf("s=%4xm ",sta);*/return 0;}
}
return inp(PORT);
printf("%s",inp(PORT));
}

发 送 字 符 子 程 序:
void sendbyte(unsigned char sdata)
{
long int time_limit;
time_limit=50000;
while ((inp(PORT+5) & 0xf0) != 0x60)
{ time_limit--;
if (time_limit==0) break;
}
outp(PORT,sdata);
}

串 口 初 始 化 子 程 序:
void init_com(PORT)
{
char i;
outp(PORT+3,0x80);
outp(PORT ,0x0C); /* baud rate 9600 */
outp(PORT+1,0);
/*8bit 1stop no even */
outp(PORT+3 ,0x3a);
outp(PORT+3 ,0x03);
i=inp(PORT+5) & 0xfe;
outp(PORT+5,i);
}

字 符 串 发 送 子 程 序:
void sendstrn(char *mess)
{
for (; *mess; mess++)
sendbyte(*mess);
sendbyte(0X0D);
/*sendbyte(0X0A); */
}

简 单 的 主 程 序:
init_com(ox2f8);
sendstrn(PORT,"FUNC");
j=0;
line=0;
do {
for(i=0;i< 25;i++) ttemp[i]='\0';
if(readbyte(PORT)=='M') {
i=0;
do {
ttemp[i]=readbyte(PORT);
i++;
}while((ttemp[i-2]!=13)&&(ttemp[i-1]!=10));
line++;
dcqd.TextOut(450,line*20+180,ttemp);}
j++;}
while((j< 1000)&&(line< 5));
vc源代码合集0951.rarvc源代码合集0951.rar 2012-06-12 11:54 80,235 (MSDN oct 2001)VC6 适用的最后一个版本[ISO].rar 2012-06-13 09:53 0 1.txt 2012-06-12 11:56 17,755 2011年北航计算机考研复试上机题.rar 2012-06-12 07:14 11,172,336 91算命软件.zip 2012-06-12 11:53 334,303 advanced+windows+debugging+resources.zip 2012-06-12 12:45 1,647,769 ATM - 副本.zip 2012-06-12 11:41 3,468,299 C++how to program源代码.rar 2012-06-12 12:32 405,625 C++中国象棋游戏源代码.rar 2012-06-12 12:56 10,743,192 C++数据图像获取.rar 2012-06-12 11:43 3,861 C++矩阵加法和乘法运算(可运行但未排除BUG).txt 2012-06-12 11:52 2,753 C++词法分析器.txt 2012-06-12 12:44 2,035,571 Clock.rar 2012-06-12 12:44 1,915,984 CZG.rar 2012-06-12 12:22 10,537 C和C++字符串处理函数.txt 2012-06-12 12:21 8,825 c扫描器源码.txt 2012-06-12 12:39 505,110 c语言也能干大事全部板书(带书签)-感谢rupeng.com鹏友的整理.rar 2012-06-12 12:10 183,001 C语言函数大全语法着色版.chm 2012-06-12 12:07 25,088 C语言加密程序.doc 2012-06-12 12:27 13,961 C语言图像函数库详解.txt 2012-06-12 11:54 38,018 C语言图形编程.rar 2012-06-12 12:26 521,167 C语言实现可视化人机界面的有效方法.pdf 2012-06-12 12:23 3,250,257 C语言精髓例子.rar 2012-06-12 11:41 334,336 C语言编程规范-1.0.doc 2012-06-12 12:52 1,960 ddos源代码_c语言实现 VC6.rar 2012-06-12 12:11 366,777 DeviceTree.rar 2012-06-12 12:53 2,127,246 Ethernet帧封装_解析_模拟发送.rar 2012-06-12 12:57 2,722 FFT_C语言.txt 2012-06-12 12:52 572,659 gbk+unicode+汉字编码对照表.rar 2012-06-12 12:31 16,598 GDI简化程序.rar 2012-06-12 12:50 25,088 H.264编码算法的完整源代码二.doc 2012-06-12 12:51 3,074,435 H264帧内预测算法的研究与优化.pdf 2012-06-12 12:49 1,629,393 H264流媒体RTP打包源代码和相关资料.rar 2012-06-12 12:26 397 HEXtoTXT.TXT 2012-06-12 12:23 11,439,766 iccvar C编译器.rar 2012-06-12 13:04 56,110 InfInstall.rar 2012-06-12 11:56 17,999 IPHelper.rar 2012-06-12 11:58 942,551 JEPG图像中数字的识.rar 2012-06-12 11:59 19,418 Lucas定理--组合数求摸.docx 2012-06-12 12:51 1,826,942 md5加密算法源代码.rar 2012-06-12 11:48 79,221 MFC音乐播放器(滑块控制音量).zip 2012-06-12 13:01 74,769 MyQQ-VC开发的局域网通信程序.rar 2012-06-12 12:18 1,154 N个数中1的个数.txt 2012-06-12 12:03 176,988 ODBCApiDataManager.rar 2012-06-12 11:50 54,935 PlayWithDataStructureSourceCode.zip 2012-06-12 13:00 23,174 random.rar 2012-06-12 12:27 138,307 RGB各种颜色对照表.pdf 2012-06-12 11:43 86,759 Socket编程例子_MFC_SDK.rar 2012-06-12 12:01 45,155 SpyXX.rar 2012-06-12 11:47 5,121,939 Unix源代码.rar 2012-06-12 07:10 2,678,026 VC++6.0.rar 2012-06-12 11:58 2,458,686 vc++avi媒体播放器 保存所需窗口bmp.zip 2012-06-12 11:55 3,721,136 VC++动态链接库(dll)编程深入浅出.rar 2012-06-12 13:02 23,185 VC++图像平滑处理+程序.rar 2012-06-12 12:12 45,056 VC++操作INI配置文件的实现.doc 2012-06-12 11:48 11,728,284 VC++数字图像模式识别技术及工程实践.pdf 2012-06-12 12:58 1,863,715 VC++设置和获得一组单选按钮的选中状态.rar 2012-06-12 12:52 565,945 VCHOME图形图像编程技术篇.chm 2012-06-12 11:59 34,816 VC__T的用途.doc 2012-06-12 11:45 4,438,581 VC坦克大战带地图编辑器.rar 2012-06-12 13:09 7,108,412 VC数据库编程技术与实例.ISO.part 2012-06-13 09:46 199,929,772 vc源代码合集0951.rar 2012-06-12 11:47 46,602 vector使用方法.doc 2012-06-12 13:04 959,370 VirtualNES.rar 2012-06-12 12:49 8,323,796 Visual C++实现图像获取、处理与分析.rar 2012-06-12 12:49 6,275,839 Visual C++实现数字图像处理源代码.rar 2012-06-12 11:57 182 Visual C++技术内幕摘要笔记.rar 2012-06-12 11:50 3,620,678 visual c++网络通信编程实用案例精选(源代码).rar 2012-06-12 12:23 3,982,016 Visual_C++网络编程经典案例详解PPT.rar 2012-06-12 12:26 428,875 Visual_Studio_2008_入门教程.pdf 2012-06-12 11:47 56,320 VOIP语音数据实际码率 .doc 2012-06-12 12:10 71,680 vs2010安装msdn.doc 2012-06-12 12:00 970,347 WebServer源代码.rar 2012-06-12 12:31 157,391 windiff_src.zip 2012-06-12 12:44 12,282,377 Windows2000设备驱动程序设计指南.pdf 2012-06-12 12:43 1,155,676 Windows2000驱动程序设计指南.rar 2012-06-12 12:51 540,654 winsock.zip 2012-06-12 12:45 7,417,271 YY.rar 2012-06-12 12:21 1,267 [自毁程序]源代码.txt 2012-06-12 12:25 1,826,678 《Keil Software –Cx51 编译器用户手册 中文完整版》(403页).pdf 2012-06-12 12:58 24,097 《黑客攻击手段之偷梁换柱》配套源代码.zip 2012-06-12 11:53 237 【Visual C++】18.简单的愤怒小鸟弹球demo无删减版.rar 2012-06-12 12:22 2,615 【乱码加密】源代码.txt 2012-06-12 12:06 228,818 一个简单的学生成绩管理系统.rar 2012-06-12 12:47 2,916 中缀表达式转后缀表达式代码(数据结构C++).rar 2012-06-12 11:57 6,246,172 串口助手源码.7z 2012-06-12 11:55 9,382 免疫算法源代码.txt 2012-06-12 13:02 318,455 再再论指针.pdf 2012-06-12 12:54 183,362 写一个图形界面的操作系统.rar 2012-06-12 11:51 49,152 列主元消去法.doc 2012-06-12 12:20 524 判断质数.dsw 2012-06-12 12:12 1,987,273 单词拼写检查器.rar 2012-06-12 11:40 2,477,013 双人配合俄罗斯方块beta版(源码).rar 2012-06-12 11:57 5,633,867 双向循环链表.rar 2012-06-12 12:44 140,600 双缓冲技术.rar 2012-06-12 12:07 86,668 基于CStatic波形显示控件.rar 2012-06-12 12:22 33,669 太极.zip 2012-06-12 12:06 346,073 安装文件注册表提取工具.zip 2012-06-12 11:48 159,232 对象作为函数参数.doc 2012-06-12 12:20 564 将三个数按从大到小的顺序排序.dsw 2012-06-12 11:48 118,272 建立一个学生信息链表.doc 2012-06-12 11:47 106,496 按照类层次编写程序.doc 2012-06-12 12:21 513 明码序列号保护的实现.txt 2012-06-12 11:51 103,936 最大堆实现排序(从大到小输出).doc 2012-06-12 11:51 240,128 最小生成树(prim算法)贪心算法.doc 2012-06-12 12:26 772,419 最简单的c++静态链接.zip 2012-06-12 11:45 202,240 最长公共子序列算法.doc 2012-06-12 12:24 956 步进电机C程序.c 2012-06-12 12:20 377 求三个数中的最大者和最小者.c 2012-06-12 12:03 411,683 注册表编程应用实例.pdf 2012-06-12 13:03 260,549 用C和汇编写的Dos操作系统的源码.rar 2012-06-12 11:43 34,816 用sql实现查询重复记录的代码.doc 2012-06-12 13:05 41,472 用VC++实现USB接口读写数据的程序.doc 2012-06-12 12:22 3,939 用邻接矩阵表示的图的深度优先搜索和广度优先搜索.txt 2012-06-12 11:43 1,845,250 界面美化Prof-UIS.rar 2012-06-12 11:45 440,342 着名的CDX游戏开发工具.zip 2012-06-12 12:19 91,035 离散余弦正逆变换+CODE.pdf 2012-06-12 11:58 3,261 笔记识别.rar 2012-06-12 11:46 1,579,321 简单远程备份(V1.0).rar 2012-06-12 12:21 23,476 编程求主范式.rar 2012-06-12 12:17 65,536 编译原理词法分析.doc 2012-06-12 11:50 220 能提高你的效率的十个Visual Studio使用技巧.rar 2012-06-12 06:34 11,131,920 自动加群软件.zip 2012-06-12 11:47 240,640 虚基类的使用实例.doc 2012-06-12 12:15 1,660,959 虚拟桌面.rar 2012-06-12 07:09 7,654,095 计算机等级考试C语言上机软件_VC++6.0中文版.zip 2012-06-12 12:17 2,126 语法分析器(C语言).cpp 2012-06-12 11:41 6,934,136 边缘检测.zip 2012-06-12 11:55 12,915 运算符重载实例.docx 2012-06-12 11:46 4,995,615 运行程序.rar 2012-06-12 12:24 36,864 选择排序和冒泡排序的C++和C的实现(总结).doc 2012-06-12 11:56 6,100 遗传算法源代码.txt 2012-06-12 06:41 1,720,354 飞秋FeiQ.rar 2012-06-12 06:48 6,015,720 黄金屋-文件排重软件V2.00.rar

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧