VC中读取串口数据的函数是什么?

h_s_h 2000-07-18 01:00:00
各位大虾,请教一个问题,两台计算机用串口通讯,在VC中用那些函数读、写消息。先谢谢了。
...全文
509 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
坎坷的菜贩 2000-07-18
  • 打赏
  • 举报
回复
不知ActiveX控件合不合你的口味?可以用MsComm控件试试看。
zzh 2000-07-18
  • 打赏
  • 举报
回复
我改写了一个串口类,可以用来收发数据,稍加改造,可加入MODEM控制,如果需要,请来EMAL:zzh1415@21cn.com
bzjbest 2000-07-18
  • 打赏
  • 举报
回复
看看下面的东东,应该有用,此程序可参考,但不必拘泥.

一、 初 始 化 串 行 通 讯 口

通 过 计 算 机 串 口 进 行 通 讯 之 前, 必 须 根 据 监 控 设 备 的 有 关 通 讯 参 数, 约 定 双 方 的 通 讯 方 式, 包 括 波 特 率 的 设 置、 奇 偶 位 校 验 及 停 止 位 的 设 立。 确 定 数 据 传 输 帧 格 式, 确 定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));

 
DragonCheng 2000-07-18
  • 打赏
  • 举报
回复
一般用CreateFile,ReadFile,WriteFile即可
boyhill 2000-07-18
  • 打赏
  • 举报
回复
我知道三种:
1、windows API CreateFile()
2、outp()、inp()
3、汇编

16,472

社区成员

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

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

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