C/Visual C - Ayuda VC++ con microcontrolador 68hc12

 
Vista:

Ayuda VC++ con microcontrolador 68hc12

Publicado por Isabel Lara Pollak (1 intervención) el 10/11/2002 23:49:04
Hola!, quisiera saber como programar en Visual c++ a el microcontrolador 68hc12 de motorola, quisiera obtener y enviar datos al microcontrolador, por el puero serie. Gracias de antemano.
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

Comunicación serial con el microcontrolador 68HC12

Publicado por Alejandro (913 intervenciones) el 01/04/2025 18:28:50
Isabel, para programar el microcontrolador 68HC12 de Motorola y comunicarte con él a través del puerto serie utilizando Visual C++, necesitarás seguir algunos pasos básicos. A continuación, te proporciono una guía sobre cómo establecer la comunicación serie y enviar/recibir datos.

1. Configuración del entorno:


- Asegúrate de tener instalado Visual C++ y que tu entorno esté configurado para compilar aplicaciones de consola o de Windows.

2. Conexión del microcontrolador:


- Conecta el microcontrolador 68HC12 a tu PC a través de un adaptador RS-232 si es necesario. Asegúrate de que el microcontrolador esté configurado para comunicarse a través del puerto serie.

3. Código para comunicación serial:


- A continuación, te muestro un ejemplo básico de cómo abrir un puerto serie, enviar y recibir datos en C++ utilizando la API de Windows.

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
65
66
67
68
69
70
71
72
73
74
75
76
#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;
}

Explicación del código:


1. Abrir el puerto serie: Utiliza `CreateFile` para abrir el puerto serie (en este caso, `COM1`).
2. Configurar el puerto: Configura los parámetros del puerto serie, como la velocidad (9600 baudios), el tamaño de los datos (8 bits), los bits de parada (1) y la paridad (ninguna).
3. Enviar datos: Utiliza `WriteFile` para enviar datos al microcontrolador.
4. Leer datos: Utiliza `ReadFile` para recibir datos del microcontrolador.
5. Cerrar el puerto: Finalmente, cierra el puerto serie con `CloseHandle`.

Consideraciones:


- Configuración del microcontrolador: Asegúrate de que el microcontrolador 68HC12 esté configurado para comunicarse a la misma velocidad y parámetros que has establecido en el código.
- Pruebas: Realiza pruebas con diferentes datos y verifica que el microcontrolador esté respondiendo correctamente.
- Errores: Maneja adecuadamente los errores y verifica que el puerto serie esté disponible y no esté siendo utilizado por otro proceso.
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