Está en la página 1de 3

Prcticas de Fundamentos de Telemtica.

Prctica 5 (Autor David Graullera)

Practica 5 Configuracin de una conexin RS232


Objetivo: El objetivo de esta prctica es la familiarizacin del alumno con el protocolo RS-232-C, tanto en su parte fsica como en la parte lgica de control del hardware asociado. Material: cable serie de 8 hilos, soldadores, estao y 2 conectores DB9 hembra Primera parte: construccin del cable serie 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 prcticas. 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 utilizarn conectores hembra DB-9 y cable. La nomenclatura y funcin de cada pin en el conector DB9 es la siguiente, de los cuales vamos a utilizar el pin 2, 3 y 5:

Pin 1 2 3 4 5 6 7 8 9 Para la soldadura de los masas o GND.

Nombre Direccin Descripcin CD Deteccin de Portadora RxD Recepcin de Datos TxD Transmisin de Datos DTR Terminal de Datos Preparada GND Masa del Sistema DSR Set de Datos Preparado RTS Peticin para Enviar CTS Listo para Enviar RI Indicador de Llamada conectores se utilizar el esquema cruzado entre transmisin y recepcin, interconectando las

Segunda parte: programacin de la conexin serie Se utilizar el cable realizado en el apartado anterior para conectar dos PCs por el puerto serie. A continuacin 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 carcter correspondiente aparezca en la pantalla del otro computador. Para ello el programa muestrea contnuamente los registros apropiados del puerto y realiza una transmision full-duplex. Se utilizar para la explicacin de este programa la informacin sobre el hardware de comunicaciones de datos de la UART 8250. Adems, se utilizar un compilador bsico de C para crear el programa, compilarlo y ejecutarlo. El programa inicial es el siguiente: main( ) { unsigned char x,y; /* Inicializacin 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) { y=getch(); x=inport(0x3FD); while(!(x&0x30)) x=inport(0x3FD); outport(0x3F8,y); }; /* Si se aprieta una tecla */ /* leemos un carcter */ /* Esperamos Buff.Transm.Vaco */ /* Bit 5 de 3FDh=1 */ /* y mandamos caracter leido */

Prcticas de Fundamentos de Telemtica. Prctica 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 */ } Como puede verse, en nuestro programa no se han utilizado interrupciones. Se pide: Paso 2.1. Teclear, compilar y comprobar el funcionamiento del programa. Paso 2.2. Cambiar la frecuencia de transmisin 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 aadiendo las lneas necesarias al programa anterior, de manera que: Cuando en el computador A el usuario apriete la tecla q minscula (ASCII 71H), entonces se enviar XOFF al computador B, y cuando se apriete la tecla a minscula (ASCII 61H), se enviar el carcter 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 carcter por el puerto serie, sino que se escribir en la propia pantalla de B con el mensaje protocolo XOFF activado. El computador A realizar el mismo protocolo.

Anexo 1: Registros de la UART (direccin base=0x3F8 para COM1). En negrita se muestran los registros utilizados en el programa. Todos los registros son de 8 bits. Registro del buffer de receptor (0x3F8+0) Registro del buffer de transmisor (0x3F8+0) Registro de activacin de interrupciones (0x3F8+1) Registro de identificacin de interrupciones (0x3F8+2) Registro de formato de datos (0x3F8+3). Control de linea. Registro de control de salida RS-232 (0x3F8+4). Control de modem. Registro de estado de linea (0x3F8+5) Registro de estado de entrada RS-232 (0x3F8+6). Estado de modem. Registro de scratch pad (0x3F8+7) Registro de latch divisor (0x3F8+0) (0x3F8+1) con DLAB=1 Explicacin: Bits del registro de Control de linea (0x3F8+3): Bits 0-1. Nmero de bits a transmitir segn la tabla: Bit 1 0 0 1 1 Bit 0 0 1 0 1 bits de datos 5 6 7 8

Bit 2. Indica el nmero de bits de stop (0=> 1 bit, 1=> 2 bits) Bit 3. Refleja si la paridad esta activada (1) o desactivada (0). Bit 4. Selector de paridad, par (1) o impar (0). Bit 5. Habilitacin de paridad. (responde a otra tabla que no vemos aqu) Bit 6. BREAK. Bit 7. DLAB. Acceso al latch divisor.

Prcticas de Fundamentos de Telemtica. Prctica 5 (Autor David Graullera)


Por ejemplo para 7 bits de datos , 1 bit de stop y sin utilizar paridad se debera cargar en este registro el valor en binario 00000010 (2 en decimal), que ademas pone el DLAB a 0 Bits del registro de Estado de linea (0x3F8+5): Los que nos interesan (que se utilizan en el programa) son: Bit 0. (RxRDY) Indica que se ha transferido un byte al buffer de recepcin. Este bit se pondr a 1 cuando se ha ledo un carcter de entrada de forma satisfactoria. Pasa a 0 cuando se accede a dicho buffer y se lee. Bit 5. (TBE) Indica una situacin de buffer de transmisin vaco (transmisor buffer empty) cuando se pone a 1. Se activa para informar que ya se puede aceptar en parte de la CPU un nuevo carcter para transmisin. Si no se verifica este bit antes de enviar un nuevo carcter al 8250, puede producirse una sobreescritura en la transmisin (escribir sobre un dato que an no ha sido transmitido), condicin que no es detectada por el controlador. Registro del buffer de receptor (0x3F8+0) Registro del buffer de transmisor (0x3F8+0) Este registro es el mismo fsicamente, y se utiliza tanto para emisin como para transmisin. La funcin 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. Anexo 2: Consigna del la velocidad (Baud Rate) Para seleccionar la velocidad deseada se escribe en el 8250 el Divisor (o latch divisor) correspondiente mediante la siguiente secuencia de pasos: 1. 2. 3. 4. donde Poner el bit DLAB a 1 Almacenar en 0x3F8+0 el octeto menos significativo Almacenar en 0x3F8+1 el octeto ms significativo Poner el bit DLAB a 0 para proseguir con la operacin normal

Divisor=(Frecuencia reloj referencia)/(16*Velocidad deseada)

Por ejemplo, para una velocidad deseada de 400 bps, y sabiendo que la frecuencia de oscilacin del cristal de la 8250 es de 18432 MHz, nos sale Divisor = 18432x106 / (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 debera cargar un 1.

También podría gustarte