Академический Документы
Профессиональный Документы
Культура Документы
DEPARTAMENTO DE ELECTRONICA
ELO312 Laboratorio de Estructuras de Computadores
Objetivos.
• Conocer los fundamentos y usar una comunicación serial asincrónica.
• Programar los registros que determinan la comunicación serial.
• Conocer las rutinas primitivas de comunicación: putchar y getchar.
• Simular el comportamiento de la comunicación serial.
• Visualizar en un osciloscopio los frames asincrónicos seriales.
• Programar la comunicación serial por interrupciones.
Estudio previo.
Comunicación Serial Asincrónica.
Se emplea para comunicar dos sistemas digitales empleando un mínimo de cables. No se
transmite un reloj entre las unidades que se comunican. Esta forma de intercambio de
información ha sido muy empleada y su uso está normalizado. Básicamente, en la
configuración mínima consiste de tres cables.
Usando la norma RS-232, los nombres lógicos de las señales y su ubicación en conectores
de 9 y 25 pines se ilustran en el siguiente diagrama:
DB9 DB25 DTE DCE
3 2 Tx Rx
2 3 Rx Tx
5 7 Gnd
Conector Cable Conector
Macho Hembra
1 1
Los conectores se muestran mirados de frente. El cable que conecta los dos equipos que
tengan interfaz serial tiene sus propios conectores que deben sintonizar con las salidas
existentes.
Un uno lógico en transmisión debe ser mayor de +5 volts y menor que +15; en recepción
debe estar entre +3 y +25.
Un cero lógico en transmisión debe ser mayor de -15 volts y menor que -5; en recepción
debe estar entre -25 y -3.
En el 8051, el pin 11 corresponde a la señal Rx, que puede denominarse también P3.0. Tx
se encuentra en el pin 10, y se denomina P3.1. Y recibe y transmite en niveles compatibles
TTL.
Tx Pin 13 P3.1
Pin 11 P3.0
Rx
Los pines corresponden al chip de 44 pines PLCC, que se encuetra en la tarjeta xess.
Existen circuitos integrados para cambiar de niveles lógicos entre RS-232 y TTL: Los
chips 1488, 1489 requieren dos fuentes. Los integrados ICL232 o MAX 232 emplean sólo
una fuente de 5 V.
Un frame de datos comienza cuando ocurre un canto de bajada, luego se envía un bit de
start, con nivel bajo. Luego los 8 bits de datos, con el menos significativo(lsb) primero; y el
más significativo (msb) al final. Luego termina el frame un pulso de stop en nivel alto.
lsb msb
1 8
start stop
Puede programarse un frame con uno, 1,5 ó 2 bits de stop. Que agregue un bit de paridad
par o impar, o que no agregue dicho bit, antes del bit se stop.
Las velocidades de transmisión se miden en baudios, que está definido como el número de
bits por segundo. Las velocidades usuales son: 300, 1200, 2400, 4800, 9600, 19.200,
38.400 hasta 115.200 en algunas puertas seriales.
Existen circuitos integrados que realizan la transmisión y recepción serial, tienen diferentes
denominaciones según los fabricantes: USART, ACIA.
SBUF tiene dirección 0x99, pero internamente son dos registros separados; uno para
transmisión y el otro para recepción. Basta mover un byte desde un registro a SBUFF para
que comience la transmisión.
El registro SCON, con dirección 0x98, permite programar el modo. El bit PCON.4 es REN
que estando en 1 habilita la recepción. PCON, también contiene a los flags TI, RI.
SCON 7 6 5 4 3 2 1 0
0x98 SM0 SM1 SM2 REN TB8 RB8 TI RI
bit 0 1 0 1 0 0 1 0
TMODo 7 6 5 4 3 2 1 0
0x89 Gate1 C/T1 M11 M01 Gate0 C/T0 M10 M00
Byte 1
TCONontrol 7 6 5 4 3 2 1 0
0x88 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
bit 1
Luego de esta inicialización pueden ejecutarse las funciones orientadas a entrada salida de
caracteres: putchar, printf, scanf, getch
Las rutinas printf y scanf están implementadas en base a putchar y getchar. Se ilustran a
continuación las rutinas más primitivas para entrada y salida de caracteres.
Ambas rutinas son del tipo dedicación completa(el procesador espera, ejecutando
instrucciones), y operan encuestando(pooling) a los bits TI y RI.
Los siguientes diagramas muestran la generación de las señales TI y RI, cuando el 8031
transmite y recibe respectivamente.
lsb msb
0 7
Tx
start stop
El programa
escribe en SBUF TI
Cuando el buffer de transmisión envía el octavo bit, queda disponible para ser cargado
nuevamente. Debe advertirse que no puede escribirse en SBUF si TI está bajo.
En el caso de recepción:
lsb msb
0 7
Rx
start stop
RI
Cuando se ha recibido los ocho bits en el buffer de Recepción se activa RI, indicando que
puede leerse el carácter. Debe advertirse que no puede leerse SBUF si RI está bajo.
#include <reg51.h>
#define CR 0x0D
#define LF 0x0A
int putchar( const char caracter ) {
if(caracter == LF ) {/* si es \n saca la secuencia CR, LF */
while( !TI ); /*espera buffer transmisor disponible. Que salga el anterior;*/
TI = 0; /*Asume lleno registro transmisión. Debe sacar en serie el dato. */
SBUF = CR; /*Primero escribe CR */
}
while( !TI ); /*espera buffer transmisor disponible/
TI = 0; /*marca ocupado al buffer de transmisión*/
SBUF = caracter; /*graba en el buffer de transmisión lo que transmitirá*/
return(caracter);
}
Pueden escribirse rutinas para entrada y salida serial que operen por interrupciones. De esta
forma se activan sólo cuando se produce la interrupción por tener registro de transmisión
vacío, o cuando se tiene registro de recepción lleno. En lugar de ejecutar instrucciones para
encuestar los flags, el microcontrolador realiza el programa principal, mientras la rutina de
servicio se activa sólo cuando ocurre un evento(en TI o RI) que requiera servicio.
IE 7 6 5 4 3 2 1 0
0xA8 EA -- -- ES ET1 EX1 ET0 EX0
bit
Son de interés los bits EA y ES para la programación de la puerta serial por interrupciones.
La siguiente sentencia instala un vector para enlazar con la rutina de servicio de puerta
serial, empleando el banco 3. Denomina serial a la rutina, a la que se ingresa si se produce
interrupción, en ésta debe determinarse cuál fue el evento que produjo la interrupción; si
fue la llegada de un carácter, o si se terminó de enviar un carácter, y también debe manejar
el estado de los flags TI o RI.
void serial (void) interrupt 4 using 3
Preparación Previa.
a) Escribir en C, un programa que escriba un string hacia la salida, en 4800 baudios.
Efectuar una salida repetitiva de un carácter mediante putchar, ejecutar debug y
analizar el texto assembler incorporado por el compilador, para la función putchar.
Efectuar una salida repetitiva de un carácter mediante printf, ejecutar debug y
visualizar el texto assembler incorporado por el compilador, para la función
printf("%c", ch).
Simular, visualizando la salida(en la consola o terminal del simulador) con:
View/Hardware/UART
P1.1
P1.2
125 ms
En el Laboratorio.
• Ver el frame serial asincrónico mediante el osciloscopio, generado por el programa
descrito en a). Medir los baudios.
• Mostrar la tabla generada en la consola del simulador, por el programa en b).
• Mostrar en el osciloscopio las señales Tx, P1.1 y P1.2. generadas por el programa
escrito en C.