Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Prac5 232
Prac5 232
Objetivo:
El objetivo de esta práctica es la familiarización del alumno con el protocolo RS-232-C, tanto en su parte física como
en la parte lógica de control del hardware asociado.
Material:
cable serie de 8 hilos, soldadores, estaño y 2 conectores DB9 hembra
Se realizará un cable RS-232 con un cable de 3 hilos y el conector DB-9 siguiendo las instrucciones del profesor, y
utilizando el material disponible en el aula de prácticas. Se comprobará debidamente el funcionamiento del cable.
El cable que vamos a confeccionar es de tres hilos para conectar de forma simple dos DTEs. Se utilizarán conectores
hembra DB-9 y cable. La nomenclatura y función de cada pin en el conector DB9 es la siguiente, de los cuales vamos
a utilizar el pin 2, 3 y 5:
Se utilizará el cable realizado en el apartado anterior para conectar dos PC’s por el puerto serie. A continuación se
probará un programa en C que controle los registros del puerto serie RS-232. Este programa permite que cuando en un
computador se apriete una tecla, el carácter correspondiente aparezca en la pantalla del otro computador. Para ello el
programa muestrea contínuamente los registros apropiados del puerto y realiza una transmision full-duplex.
Se utilizará para la explicación de este programa la información sobre el hardware de comunicaciones de datos de la
UART 8250. Además, se utilizará un compilador básico de C para crear el programa, compilarlo y ejecutarlo.
main( )
{ unsigned char x,y; /* Inicialización de variables */
x=inport(0x3FB);
x=x|0x080;
outport(0x3FB,x); /* DLAB=1 respetando el resto del contenido*/
outport(0x3F9,1); /* Pongo el Divisor Latch (D=288) para */
outport(0x3F8,32); /* 400 bps a frec=1,8432 MHz */
outport(0x3FB,2); /* DLAB=0 y 7 bits de longitud, 1 bit de stop */
do
{
if(kbhit()!=0) /* Si se aprieta una tecla */
{
y=getch(); /* leemos un carácter */
x=inport(0x3FD); /* Esperamos Buff.Transm.Vacío */
while(!(x&0x30)) x=inport(0x3FD); /* Bit 5 de 3FDh=1 */
outport(0x3F8,y); /* y mandamos caracter leido */
};
1
Prácticas de Fundamentos de Telemática.
Práctica 5 (Autor David Graullera)
if((x=inport(0x3FD)) & 0x01) /* Si datos en buffer de recepcion */
{
x=inport(0x3F8); /* Leemos el dato */
putch(x); /* y lo ponemos en pantalla */
};
} while(1); /* el bucle se repite indefinidamente */
}
Se pide:
Paso 2.2. Cambiar la frecuencia de transmisión a 1200 bps, datos de 8 bits y 2 bits de stop. Ver anexo I y II.
Paso 2.3. Implementar un protocolo de control de flujo XON/XOFF añadiendo las líneas necesarias al programa
anterior, de manera que:
Cuando en el computador A el usuario apriete la tecla ‘q’ minúscula (ASCII 71H), entonces se enviará XOFF al
computador B, y cuando se apriete la tecla ‘a’ minúscula (ASCII 61H), se enviará el carácter XON.
En el computador B, desde que le llegue el XOFF hasta que le llegue el XON cada vez que se apriete cualquier tecla
no se enviará el carácter por el puerto serie, sino que se escribirá en la propia pantalla de B con el mensaje
“protocolo XOFF activado”.
En negrita se muestran los registros utilizados en el programa. Todos los registros son de 8 bits.
Explicación:
Bit 0. (RxRDY) Indica que se ha transferido un byte al buffer de recepción. Este bit se pondrá a ‘1’ cuando se ha leído
un carácter de entrada de forma satisfactoria. Pasa a ‘0’ cuando se accede a dicho buffer y se lee.
Bit 5. (TBE) Indica una situación de buffer de transmisión vacío (“transmisor buffer empty”) cuando se pone a ‘1’. Se
activa para informar que ya se puede aceptar en parte de la CPU un nuevo carácter para transmisión. Si no se verifica
este bit antes de enviar un nuevo carácter al 8250, puede producirse una sobreescritura en la transmisión (escribir sobre
un dato que aún no ha sido transmitido), condición que no es detectada por el controlador.
Este registro es el mismo físicamente, y se utiliza tanto para emisión como para transmisión. La función en un
momento dado depende de si estamos leyendo o escribiendo en él. Para su funcionamiento correcto hay que realizar
comprobaciones de los bits vistos en los registros anteriores.
Para seleccionar la velocidad deseada se escribe en el 8250 el Divisor (o latch divisor) correspondiente mediante la
siguiente secuencia de pasos:
Por ejemplo, para una velocidad deseada de 400 bps, y sabiendo que la frecuencia de oscilación del cristal de la 8250
es de 1’8432 MHz, nos sale Divisor = 1’8432x106 / (16*400) = 288 , que ha de expresarse mediante dos octetos=
0000 0001 0010 0000 . Por lo tanto el byte menos significativo, que hay que introducir en 0x3F8+0 será el valor 32, y
en 0x3F8+1 (MSB) se debería cargar un 1.