gpt4 book ai didi

c++ - 在 Windows 中将位写入 COM 端口 - 相当于 INPORTB 函数

转载 作者:行者123 更新时间:2023-11-27 23:28:42 25 4
gpt4 key购买 nike

我正在编写一个程序来控制通过串行 (RS-232) COM1 端口连接的继电器开关。我使用的设备包含两个继电器开关。这些要么是“开放的”,要么是“封闭的”。

默认情况下,两个继电器都打开。 1 号继电器通过设置调制解调器控制寄存器中的位 1 来关闭。通过设置调制解调器控制寄存器中的位 0 关闭 2 号继电器。

在 C 中,这可以按如下方式实现:

x = inportb(0x3FC);
x=x & ~2; //Set bit 1 to zero
x=x | 2; //Set bit 1 to one
x=x & ~1; //Set bit 0 to zero
x=x | 1; //Set bit 0 to one

然而,C++ 并没有使 COM 端口访问变得如此容易(或者我被引导相信)。我目前有以下代码,它成功地打开和关闭了 COM 端口,以便它可以在 C++ 和 Windows 中进行通信:

#include <windows.h>

//Initialise Windows module
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
LPSTR lpszArgument, int nFunsterStil)

{
//Define the serial port precedure
HANDLE hSerial;

//Initialise relay
hSerial = CreateFile("COM1",GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

//SOME CODE MUST GO HERE

//Deactivate relay
CloseHandle(hSerial);

return 0;
}

但是,我不知道如何“设置位”。我对 C++ 还是很陌生。任何帮助将不胜感激。

最佳答案

您需要了解设备的工作原理。您不能直接在 hSerial 中“设置位”。打开 COM 端口后,您可以发送/接收字节。可能您需要使用 WriteFile(hSerial, ...) 向设备发送内容。也许您需要使用 ReadFile(hSerial, ...) 从设备读取信息。 COM 端口不是 DOS 中调用的端口,这不是地址或寄存器。这是输入/输出流。您使用 COM 端口就像 C 程序使用 STDIN 和 STDOUT 一样 - 从端口读取和写入信息。

一旦您了解您的设备需要什么(这意味着定义通信协议(protocol)),请在程序中实现它。阅读本文:串行通信 http://msdn.microsoft.com/en-us/library/ff802693.aspx - Win32 程序员需要了解的有关串行通信的一切。

关于c++ - 在 Windows 中将位写入 COM 端口 - 相当于 INPORTB 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7500386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com