INTRODUCCIÓN La función principal de este tipo de comunicación es la de convertir datos de salida de forma paralela a serial y la de convertir datos de entrada de forma serial a paralela. El acceso al puerto serial (UART) se realiza a través de RxD (P3.0) y TxD (P3.1) mediante la característica FULL-DUPLEX. Además contiene un buffer para almacenar un segundo dato antes de que se haya leído el primer Byte. Los registros especiales (SFR s) SBUF y SCON proveen el control del puerto serial.
INTRODUCCIÓN Registro SFR SBUF (Buffer serie) Escribir al registro SBUF carga el dato a ser transmitido y leer el registro SBUF accede al dato recibido. El registro SBUF (99H) son en realidad dos registros buffer.
INTRODUCCIÓN Registro SFR SCON (Control Serie) Este registro controla el modo de operación del puerto serie y el estado del mismo (fin de transmisión y recepción). Los bits de estado pueden ser monitoreados por software (poleo) ó programados para producir una interrupción. SM0 (SCON.7). Bit de programación del modo de operación. SM1 (SCON.6). Bit de programación del modo de operación. SM2 (SCON.5). Bit de programación del modo de operación. Habilita la comunicación multiprocesador en los modos 2 y 3. REN (SCON.4). Bit de habilitación de recepción en SBUF.
INTRODUCCIÓN Registro SFR SCON (Control Serie) Este registro controla el modo de operación del puerto serie y el estado del mismo (fin de transmisión y recepción). Los bits de estado pueden ser monitoreados por software (poleo) ó programados para producir una interrupción. TB8 (SCON.3). Bit 8 de transmisión y 9º bit transmitido en los modos 2 y 3. Activado y limpiado por software. RB8 (SCON.2). Bit 8 de recepción y 9º bit recibido en los modos 2 y 3. Activado y limpiado por software. TI (SCON.1). Bandera de fin de transmisión. RI (SCON.0). Bandera de fin de recepción.
La UART del µc51 tiene cuatro modos de operación seleccionados por la combinación de los bits SM0 y SM1. Tres de esos modos habilitan una comunicación asíncrona, con un bit de inicio y otro bit de paro para cada Byte de datos. Este tipo de comunicación se requiere para comunicar al microcontrolador con una PC bajo el protocolo 232. Un cuarto modo configura a la UART para operar como un simple registro de corrimiento. La frecuencia de operación puede ser fija o variable y en este caso el Timer 1 es usado para generar esta frecuencia.
SM0 SM1 Modo Descripción Baud Rate 0 0 0 Registro de corrimiento Fijo: f osc 12 0 1 1 8 bits UART + ini, fin 1 0 2 9 bits UART + ini, fin 1 1 3 9 bits UART + ini, fin Variable, activado por Timer Fijo: f osc 32 ó 64 Variable, activado por Timer
Modo 0 (Registro de Corrimiento) Este modo de operación trabaja mediante ocho corrimientos con una velocidad o frecuencia de 1/12 de la frecuencia de oscilación. BAUD RATE = f osc /12 La transmisión inicia cuando se utiliza cualquier instrucción que use al registro SBUF como destino ó como fuente para la recepción: mov SBUF, (fuente) (transmisión) mov (destino), SBUF (recepción) En este modo la línea RxD sirve para enviar o recibir datos y la línea TxD es usada como señal de reloj para sincronizar los dispositivos.
Modo 0 (Registro de Corrimiento) Cuando la transmisión en modo 0 inicia, la CPU coloca un 1 en la posición a la izquierda del bit más significativo del dato a transmitir (msb). La transmisión inicia con el bit menos significativo del dato (lsb) realizando un corrimiento a la derecha cada ciclo de máquina. Conforme salen los datos (bits) la CPU coloca ceros a la izquierda:
Modo 0 (Registro de Corrimiento) Cuando el bit msb esta en la posición de salida (lsb) y todas las demás posiciones contienen ceros 0, se establece la condición final para que la CPU realice el ultimo corrimiento y active la bandera TI:
Modo 0 (Registro de Corrimiento) La recepción en modo 0 se habilita mediante la activación del bit REN (SCON.4), y al limpiar la bandera RI. En este momento el registro de corrimiento se carga con el dato FEH (1111 1110). Cuando inicia la recepción, el corrimiento es hacia la izquierda y cuando el cero menos significativo ocupa el lugar del bit msb, la CPU realiza un ultimo corrimiento.
Modo 0 (Registro de Corrimiento) Una vez que la CPU ha realizado el ultimo corrimiento, el contenido del registro de corrimiento es transferido al registro SBUF y la bandera RI es activada para indicar que la recepción ha terminado y poder leer el dato.
Modo 1 (8 bits datos, inicio y paro) En este modo son enviados (TxD) y recibidos (RxD) 10 bits, los cuales contienen un bit de inicio 0, 8 bits de datos y un bit de paro 1. En este modo la velocidad de trabajo es variable, generalmente se usa el Timer 1 para generarla, por tanto las interrupciones por Timer 1 deben ser deshabilitadas: BAUD RATE = (2 SMOD * sobreflujo en Timer1) / 32 = (2 SMOD / 32) * (f osc / 12*(256-TH1))
Modo 1 (8 bits datos, inicio y paro) La transmisión en modo 1 inicia con cualquier instrucción que use a SBUF como registro destino. La señal de escritura a SBUF carga un 1 en la novena posición del registro de corrimiento, además de colocar el bit de inicio 0 en la terminal TxD (P3.1) para empezar la transferencia de los 8 bits de datos. Como en el modo 0, al realizar los corrimientos se colocan ceros en las posiciones de la izquierda del registro de corrimiento. Cuando el bit de paro 1 se encuentra en la posición del lsb del registro de corrimiento, se activa TI y se realiza el ultimo corrimiento (bit de paro).
Modo 1 (8 bits datos, inicio y paro) La recepción en modo 1 se inicia al detectar una transición negativa en la terminal RxD (P3.0) si esta activado el bit REN. Si el bit de inicio es valido se carga el registro de corrimiento con 1FFH y se realiza el corrimiento del bit de inicio 0 y se almacenan los bits de datos. Cuando el bit de inicio se encuetntra en la novena posición del registro de corrimiento, el registro SBUF es cargado con los datos, se activa la bandera RI y se carga RB8 con el bit de paro 1. Esta secuencia es generada sólo si RI = 0 y cualquiera de SM2 = 0 ó RB8 = 1.
Modo 2 (9 bits datos, inicio y paro) El Baud Rate en este modo depende del valor del bit SMOD en el registro PCON: Si SMOD = 0 entonces BAUD RATE = (1/64) f osc Si SMOD = 1 entonces BAUD RATE = (1/32) f osc BAUD RATE = (2 SMOD /64) f osc En este modo 11 bits son transmitidos o recibidos como: bit de inicio 0, 8 bits de datos, un 9 bit programable y un bit de paro 1. El noveno bit puede ser de paridad. Este bit se encuentra en el registro SMOD (TB8 y RB8).
Modo 2 (9 bits datos, inicio y paro) La transmisión en modo 2 inicia con cualquier instrucción que use a SBUF como registro destino. La señal de escritura a SBUF carga el bit TB8 dentro de la novena posición del registro de corrimiento para activar la transmisión de datos colocando el bit de inicio 0 en TxD. Cuando el bit TB8 se encuentra en la posición de salida, el bit de paro se encuentra a la izquierda de TB8 y todas las posicione de la izquierda se encuentran cargadas con ceros. Esta condición realiza un ultimo corrimiento (transisión de TB8) y activa la bandera TI.
Modo 2 (9 bits datos, inicio y paro) La recepción en modo 2 se inicia cuando se detecta una transición negativa en RxD. En este momento es cargado un 1FFH en el registro de corrimiento. Cuando el bit de inicio se encuentra en la posición mas a la izquierda del registro de corrimiento, se realiza un ultimo corrimiento, se carga SBUF con los datos, el noveno bit es colocado en RB8 y se activa RI. Esta secuencia es generada sólo si RI = 0 y cualquiera de SM2 = 0 ó 9 bit = 1. Si cualquiera de estas condiciones no se cumplen, los datos se perderan y se esperará un nuevo bit de inicio.
Modo 3 (9 bits datos, inicio y paro) En este modo se transmiten y reciben un bit de inicio 0, 8 bits de datos, un 9 bit programable y un bit de paro 1. El modo de funcionamiento es identico al funcionamiento en modo 2 pero con la diferencia de que el BAUD RATE es variable: BAUD RATE = (2 SMOD * sobreflujo en Timer1) / 32 = (2 SMOD / 32) * (f osc / 12*(256-TH1))
BAUD RATE El Timer 1 es usado para generar la velocidad de transmisiónrecepción de datos en serie, cuando el puerto es programado para trabajar en el modo 1 o 3. La frecuencia de transmisión es obtenida a partir del valor almacenado en TH1 y el valor de SMOD mediante la ecuación siguiente: BAUD _ RATE = 2 SMOD * FREC _ OSCILADOR 32*12*(256 ( TH1)) El valor 2 SMOD /32, es debido a los circuitos divisores de frecuencia que se encuentran en la etapa de control del puerto serie, los cuales dividen entre 16 ó 32 dependiendo del bit PCON.7 (SMOD) y la frecuencia que nos proporciona la salida del Timer 1 (sobreflujo).
BAUD RATE El valor 12 que divide a la frecuencia del oscilador proviene del divisor, que se encuentra en la etapa de control del Timer 1, cuando este es utilizado como temporizador. Cabe recalcar que el valor que se almacena en TH1 es el valor negativo de la cuenta que se desea, debido a que el contador se incrementa cada vez que un pulso es detectado, de ahí, que en la ecuación se representa como 256 (TH1). La interrupción del Timer 1, en este caso, no tendría mucha aplicación por lo que se podría deshabilitar. El Timer 1 actúa en modo 2, es decir, en modo autorecargable, el valor de conteo se encuentra fijo en el registro TH1, el cual se recarga cada vez que existe un sobreflujo.
BAUD RATE Tabla de valores de TH1, para generar el Baud Rate, tomando en cuenta la frecuencia del oscilador. Baud Rate (KHz) Fosc (MHz) SMOD Timer 1 C/T Modo Valor de TH1 19.2 11.059 1 0 2 FDH 9.6 11.059 0 0 2 FDH 4.8 11.059 0 0 2 FAH 2.4 11.059 0 0 2 F4H 1.2 11.059 0 0 2 E8H 0.1375 11.986 0 0 2 1DH 0.110 6.000 0 0 2 72H
MODOS MULTIPROCESADOR Este tipo de comunicación se activa cuando se tiene un sistema con multiples µc51 conectados en RED con un arreglo maestro esclavos: Con esta comunicación se reciben 9 bits de datos donde el noveno bit es cargado en RB8, seguido por un bit de paro. El puerto puede ser programado de forma que cuando el bit de paro sea recibido, la interrupción por puerto serial se active sólo si RB8 = 1, esta condiciónse habilita cuando SM2 = 1.
MODOS MULTIPROCESADOR Cuando el procesador desea transmitir un bloque de datos a uno de varios esclavos, primero debe enviar un Byte de dirección (nodo) que identifique al esclavo seleccionado. Un Byte de dirección difiere de un Byte de datos por el 9 bit, de forma que si el 9 bit (TB8) es 1, entonces el Byte es dirección; si el 9 bit = 0, entonces el Byte es dato. Un byte de dirección siempre interrumpira a todos los esclavos (TB8 = 1), así que cada uno de ellos debe examinar el Byte de dirección para determinar a quién se le esta hablando. Una vez seleccionado el esclavo, este debe limpiar el bit SM2 para recibir los Bytes de datos.
MODOS MULTIPROCESADOR Los esclavos que no fueron seleccionados deben dejar activados sus bits SM2 y seguir con su trabajo, ignorando los Bytes que se encuentran en las líneas comunes RxD y TxD. Estos esclavos serán interrumpidos nuevamente cuando se envie un nuevo Byte de dirección por el µc Maestro (TB8 = 1). SM2 no tiene efecto sobre el modo 0 y en el modo 1 se puede usar para checar la validez del bit de paro. En modo 1, en recepción si SM2 = 1, la interupción no es valida a menos que el bit de paro sea valido.