C/Visual C - Me urge, estoy estancado con bios.h

 
Vista:

Me urge, estoy estancado con bios.h

Publicado por milo (4 intervenciones) el 20/11/2002 09:51:08
Hola a todos, estoy haciendo un programa en visual c++ que me envie un $ al puerto serie y lo que me devuelva este lo deje en una variable, tan simple como esto, pero al intentar usar el bios.h me da error, alguien me puede ayudar?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Envío y recepción de datos a través del puerto serie en Visual C++

Publicado por Alejandro (913 intervenciones) el 03/04/2025 00:05:13
Milo, para enviar un carácter (como `$`) a través del puerto serie y recibir la respuesta en una variable en Visual C++, es recomendable utilizar la API de Windows en lugar de `bios.h`, ya que esta última no es compatible con Visual C++ y puede causar errores.

A continuación, te muestro un ejemplo de cómo hacerlo utilizando la API de Windows:

Ejemplo de código



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <windows.h>
#include <iostream>
 
int main() {
    // Configuración del puerto serie
    HANDLE hSerial;
    hSerial = CreateFile(L"COM1",                // Nombre del puerto serie
                         GENERIC_READ | GENERIC_WRITE, // Acceso de lectura y escritura
                         0,                          // No compartir
                         NULL,                       // Sin seguridad
                         OPEN_EXISTING,             // Abrir puerto existente
                         0,                          // Sin atributos
                         NULL);                     // Sin plantilla
 
    if (hSerial == INVALID_HANDLE_VALUE) {
        std::cerr << "Error al abrir el puerto serie." << std::endl;
        return 1;
    }
 
    // Configuración de la comunicación
    DCB dcbSerialParams = {0};
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams)) {
        std::cerr << "Error al obtener el estado del puerto." << std::endl;
        CloseHandle(hSerial);
        return 1;
    }
 
    dcbSerialParams.BaudRate =CBR_9600;     // Velocidad de baudios
    dcbSerialParams.ByteSize = 8;             // Tamaño de byte
    dcbSerialParams.StopBits = ONESTOPBIT;   // 1 bit de parada
    dcbSerialParams.Parity = NOPARITY;        // Sin paridad
 
    if (!SetCommState(hSerial, &dcbSerialParams)) {
        std::cerr << "Error al configurar el puerto." << std::endl;
        CloseHandle(hSerial);
        return 1;
    }
 
    // Enviar el carácter '$'
    DWORD bytesWritten;
    char dataToSend = '$';
    if (!WriteFile(hSerial, &dataToSend, sizeof(dataToSend), &bytesWritten, NULL)) {
        std::cerr << "Error al enviar datos." << std::endl;
        CloseHandle(hSerial);
        return 1;
    }
 
    // Leer la respuesta
    char receivedData;
    DWORD bytesRead;
    if (!ReadFile(hSerial, &receivedData, sizeof(receivedData), &bytesRead, NULL)) {
        std::cerr << "Error al leer datos." << std::endl;
        CloseHandle(hSerial);
        return 1;
    }
 
    // Mostrar la respuesta
    std::cout << "Respuesta recibida: " << receivedData << std::endl;
 
    // Cerrar el puerto
    CloseHandle(hSerial);
    return 0;
}

Notas sobre el código



1. Configuración del puerto: Asegúrate de cambiar `"COM1"` al puerto que estés utilizando en tu sistema. Puedes verificar los puertos disponibles en el Administrador de dispositivos de Windows.

2. Configuración de parámetros: Ajusta la velocidad de baudios y otros parámetros según la configuración de tu dispositivo.

3. Manejo de errores: El código incluye manejo básico de errores. Asegúrate de revisar los mensajes de error para diagnosticar problemas.

4. Compilación: Asegúrate de compilar tu programa con las opciones adecuadas y de tener los permisos necesarios para acceder al puerto serie.

5. Pruebas: Realiza pruebas con el dispositivo conectado al puerto serie para asegurarte de que la comunicación funcione correctamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar