C++-Windows系统下,如何读写并口

发布于 2017-01-14 20:50:14 字数 287 浏览 1586 评论 5

想通过并口控制外部电路。不知道该如何读写并口?网上搜索到的答案几乎全都是使用IO端口读写的方法。
但这种方法有一些缺陷。一方面,如果要在XP等较高版本系统上运作,需要额外的驱动;这会引起杀毒软件的抱怨。另一方面,一些转换出来的并口(例如通过“USB转并口”转换器),并没有对应的IO端口地址,无法运作。
另外还有一些搜索出来的结果,往往只是轻描淡写的一句:使用CreateFile打开设备文件,然后就可以像普通文件一样进行读写……
不知道各位有没有相关经验?最好能给出一段简单而直接可用的代码(C/C++)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

夜无邪 2017-08-10 12:17:10

linux读写parport设备文件。猜想xp会有相关微软的api操作并口吧。

虐人心 2017-06-02 18:10:41

我用的就是winio这个头文件 操作并口的
我是用pc的并口模拟IIC时序与芯片进行通信。效果还不错。
贴一下我的代码片段

void WriteSda(BOOL b)
{
unsigned long lPortVal;

GetPortVal(BASE_PORT_ADDR, &lPortVal, 1);
//lt
//printf("The Address is:%x,The Value is:%xn",BASE_PORT_ADDR,(unsigned char)(lPortVal));
//lt

lPortVal &= 0xfd;
lPortVal |= b<<1;

//Sleep(1);
SetPortVal(BASE_PORT_ADDR, lPortVal, 1);
}

BOOL ReadSda()
{
unsigned long lPortVal;

GetPortVal(BASE_PORT_ADDR+1, &lPortVal, 1);

lPortVal >>= 4;

//Sleep(1);
return lPortVal&1;
}

void WriteScl(BOOL b)
{
unsigned long lPortVal;

GetPortVal(BASE_PORT_ADDR, &lPortVal, 1);

lPortVal &= 0xfe;
lPortVal |= b;

SetPortVal(BASE_PORT_ADDR, lPortVal, 1);
//Sleep(1);
}

BOOL ReadScl()
{
unsigned long lPortVal;

GetPortVal(BASE_PORT_ADDR, &lPortVal, 1);

//Sleep(1);
return lPortVal&1;

}

BOOL SendByte(unsigned char c)
{
int i, ret;
BOOL b;

WriteScl(LOW);

for(i=7; i>=0; i--)
{
b = (c>>i) & 1;
WriteSda(b);
//printf("%dn", b);
WriteScl(HIGH);
//Sleep(1);
WriteScl(LOW);

}

// Receive Ack
WriteScl(HIGH);
WriteSda(HIGH);
if(ReadSda())
{
//AfxMessageBox("Can't Receive ACK!!");//printf("Can't Receive ACK!!n");
devoffline = false;
ret = 0;
}
else
{
//printf("ACK=0n");
devoffline = true;
ret = 1;
}

WriteScl(LOW);

return ret;
}

void Ack()
{
WriteSda(0);
// Sleep(1);
WriteScl(1);
// Sleep(1);
WriteScl(0);
// Sleep(1);

}

void NoAck()
{
WriteSda(1);
WriteScl(1);
WriteScl(0);
}

void Start()
{
WriteSda(1);
WriteScl(1);
WriteSda(0);
}

void Stop()
{
WriteSda(0);
WriteScl(1);
WriteSda(1);
}

如果想进一步了解,可以和我联系,相互探讨。
企鹅号:19570995
E-mail:fjpmbb@126.com

虐人心 2017-05-08 21:23:33

xp下VC可以用winio或者用dlportio的实现,另外还有用porttalk和input32来实现的。网上应该能够找得到的。

虐人心 2017-03-14 07:20:29

我以前用LABView做的,就是并口控制步进电机,那时我是直接把数据写到内存里的,在电脑上能看见分配给并口的内存地址是多少,然后直接写数据。在C语言下没做过,不太清楚。不过VC应该有相关控件。

想挽留 2017-03-05 07:44:36

我提供一个思路,不一定行:
我记得以前我看过读写串口函数的实现,发现都是都串口地址的操作,比如把某个数据写道某个地址,用write函数,所以,lz可以考虑一下这个方法行不行

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文