#include <windows.h>
#include <iostream>
int main() {
HANDLE hSerial;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts = {0};
// Abre el puerto serie (COM1 en este caso)
hSerial = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0, // No compartir
NULL, // Sin seguridad
OPEN_EXISTING,
0, // Sin atributos
NULL);
if (hSerial == INVALID_HANDLE_VALUE) {
std::cerr << "Error al abrir el puerto serie." << std::endl;
return 1;
}
// Configura los parámetros del puerto serie
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 9600 baudios
dcbSerialParams.ByteSize = 8; // 8 bits de datos
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;
}
// Establece los tiempos de espera
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
SetCommTimeouts(hSerial, &timeouts);
// Enviar datos al microcontrolador
const char *dataToSend = "Hola 68HC12";
DWORD bytesWritten;
if (!WriteFile(hSerial, dataToSend, strlen(dataToSend), &bytesWritten, NULL)) {
std::cerr << "Error al enviar datos." << std::endl;
CloseHandle(hSerial);
return 1;
}
// Leer datos del microcontrolador
char dataReceived[256];
DWORD bytesRead;
if (!ReadFile(hSerial, dataReceived, sizeof(dataReceived) - 1, &bytesRead, NULL)) {
std::cerr << "Error al leer datos." << std::endl;
CloseHandle(hSerial);
return 1;
}
// Asegúrate de que la cadena esté terminada en nulo
dataReceived[bytesRead] = '\0';
std::cout << "Datos recibidos: " << dataReceived << std::endl;
// Cierra el puerto
CloseHandle(hSerial);
return 0;
}