Está en la página 1de 6

1. Describa la función utilizada para enviar un byte por el puerto serie.

//Función para enviar bytes por el puerto serie


If(!WriteFile(h, &a/*puntero al buffer*/, 1/* 1 byte*/, &n, NULL))
{
/* Error al enviar */
}
if(!WriteFile(h, &Tx/*puntero al buffer*/, 10/* 1 byte*/, &n, NULL))
{
/* Error al enviar */
}
int i;
b=1;
for (i=0; i<8; i++)
{
b=b*2;
if(!WriteFile(h, &b/*puntero al buffer*/, 1/* 1 byte*/, &n, NULL))
{
/* Error al enviar */
//Delay ms
}
}

La función indica el envío de bytes por el puerto serial. Esta función indica como es el proceso de
envio de 1byte (8bits) a través del puerto serial. Se declara una variable b (byte) y el i (como bit)
por eso observara en la condición del for (i=0; i<8; i++) indicando la cantidad de bits que hay en un
byte (8 bits), en este caso el proceso se dará por los encendidos de led’s con un retardo indicado
en ms.
 Los bytes se transmiten bit a bit
 Se transmite un bit de comienzo (start bit), los bits de información y un bit de parada (stop
bit) que indica que el dato se ha transmitido con éxito.
 Se puede detectar errores de un solo bit, mediante la paridad.
2. Escriba el código en C para enviar un byte por el puerto serie.
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <iostream>
#include <string.h>
#include <windows.h>
using namespace std;
int main()
{
HANDLE h; /* handler, sera el descriptor del puerto */
DCB dcb; /* estructura de configuracion */
DWORD dwEventMask; /* mascara de eventos */

/* Configuramos el puerto */
dcb.BaudRate = 9600; // 9600 baudios
dcb.ByteSize = 8; // 8 bits
dcb.Parity = NOPARITY; // Sin paridad
dcb.StopBits = ONESTOPBIT; // Un bit de parada
dcb.fBinary = TRUE;
dcb.fParity = TRUE;
/* Establecemos la nueva configuracion */
if(!SetCommState(h, &dcb))
{
/* Error al configurar el puerto */
}
//Función para enviar bytes por el puerto serie
If(!WriteFile(h, &a/*puntero al buffer*/, 1/* 1 byte*/, &n, NULL))
{
/* Error al enviar */
}
if(!WriteFile(h, &Tx/*puntero al buffer*/, 10/* 1 byte*/, &n, NULL))
{
/* Error al enviar */
}
int i;
b=1;
for (i=0; i<8; i++)
{
b=b*2;
if(!WriteFile(h, &b/*puntero al buffer*/, 1/* 1 byte*/, &n, NULL))
{
/* Error al enviar */
//Delay ms
}
}
return 0;
}
3. Escriba el código para enviar una cadena de caracteres por el puerto serie.
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <iostream>
#include <string.h>
#include <windows.h>
using namespace std;
int main()
{
HANDLE h; /* handler, será el descriptor del puerto */
DCB dcb; /* estructura de configuración */
DWORD dwEventMask; /* mascara de eventos */
/* abrimos el puerto */
//Abrir el puerto COM
h=CreateFile("COM10",GENERIC_READ|
GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

if(h == INVALID_HANDLE_VALUE)
{
/* ocurrio un error al intentar abrir el puerto */
}

/* obtenemos la configuración actual */


if(!GetCommState(h, &dcb))
{
/* error: no se puede obtener la configuración */
}

/* Configuramos el puerto */
dcb.BaudRate = 9600; // 9600 baudios
dcb.ByteSize = 8; // 8 bits
dcb.Parity = NOPARITY; // Sin paridad
dcb.StopBits = ONESTOPBIT; // Un bit de parada
dcb.fBinary = TRUE;
dcb.fParity = TRUE;

/* Establecemos la nueva configuracion */


if(!SetCommState(h, &dcb)) {
/* Error al configurar el puerto */
}

/* Para que WaitCommEvent espere el evento RXCHAR */


SetCommMask(h, EV_RXCHAR);

while(1) { //Bucle infinito


char a; //-128 - +127
a = getch();
cout<<a;

unsigned char b; //0-255


DWORD n;
char Tx[11]="hola mundo";
char recibido;

//Función para enviar bytes por el puerto serie

if(!WriteFile(h, &a/*puntero al buffer*/, 1/* 1 byte*/, &n, NULL))


{
/* Error al enviar */
}

if(!WriteFile(h, &Tx/*puntero al buffer*/, 10/* 1 byte*/, &n, NULL))


{
/* Error al enviar */
}

int i;
b=1;
for (i=0; i<8; i++)
{
b=b*2;
if(!WriteFile(h, &b/*puntero al buffer*/, 1/* 1 byte*/, &n, NULL))
{
/* Error al enviar */
//Delay ms
}

}
return 0;
}
4. Dibuje el diagrama de bloques de cómo se realiza la comunicación serial
entre la PC y un dispositivo que tenga el protocolo RS232.

Para conectar el PC a un microcontrolador por el puerto serie se utilizan las señales TXD,
RXD y GND. El PC utiliza la norma RS232, por lo que los niveles de tensión de las patillas
entán comprendidos entre +15 y -15 voltios. Los microcontroladores normalmente trabajan
con niveles TTL (0-5v). Es necesario por tanto intercalar un circuito que adapte los
niveles:

Uno de los que más se utiliza es el MAX232.


Cable de conexión

Para realizar la conexión entre el PC y un microcontrolador circuito podemos usar


diferentes alternativas. Una manera es utilizar un cable serie macho-hembra no cruzado, y
en el circuito un conector hembra DB9 para circuito impreso.

5. Dibuje la trama bit a bit para la transmitir lo siguiente: ‘H’, ‘O’, ‘L’, ‘A’,
indicando la configuración usada.

LETRA HEXADECIMAL BINARIO


H 48 0100 1000
O 4F 0100 1111
L 4C 0100 1100
A 41 0100 0001

0 1 0 0 1 0 0 0 0 1
Bit start 7bits de data bit parity bit stop

0 1 0 0 1 1 1 1 0 1
Bit start 7bits de data bit parity bit stop

0 1 0 0 1 1 0 0 0 1
Bit start 7bits de data bit parity bit stop

0 1 0 0 0 0 0 1 0 1
Bit start 7bits de data bit parity bit stop

También podría gustarte