USART Universal Synchronous Asynchronous Receiver Transmitter Síncrona o asíncrona Recibe y transmite Operación full duplex asíncrona Aplicación típica: comunicación con un PC mediante el protocolo RS232, para lo que necesita un driver para desplazamiento de niveles 1 1
USART Bloques que forman la USART: Generador de la relación de baudios (BRG) Genera el reloj de transmisión a partir del oscilador de la MCU Determina la velocidad de transferencia Circuito de muestreo Detección del nivel lógico en el terminal de RX Síncronización del reloj Transmisor asíncrono Receptor asíncrono 2 2
USART Diagrama simplificado de transmisión: 3 3
USART Diagrama simplificado de recepción: 4 4
USART Ejemplo: forma de onda de la transmisión serie del dato 25h con 8 y 125h con 9 bits: 5 5
USART. Registros de control SPBRG Generación del baud rate BRGH bit en el registro TXSTA SYNC bit en TXSTA TXSTA Control y estado de transmisión RCSTA - Control y estado de recepción TXREG Registro de transmisión de datos RCREG - Registro de recepción de datos PIR1 Registro de indicadores ( flags ) de interrupción PIE1 Registro de habilitación de interrupciones 6 6
USART. Velocidad de transmisión Formulas para el cáculo de los baudios Baudios = Fosc/(16(SPBRG+1)), BRGH=1 Baudios = Fosc/(64(SPBRG+1)), BRGH=0 Formulas para SPBRG SPBRG = (Fosc/(16 x Baud rate)) - 1, BRGH=1 SPBRG = (Fosc/(64 x Baud rate)) - 1, BRGH=0 Ejemplo: Oscilador: 4MHz oscillator Velocidad de transmisión: 9600 baudios asíncrono Para BRGH = 1 SPBRG = 4000000/(16 x 9600) - 1 = 25.04 Para BRGH = 0 SPBRG = 4000000/(64 x 9600) - 1 = 5.51 Mejor elección: BRGH = 1, SPBRG = 25 7 7
Velocidades de transmisión para: USART BRGH=0 BRGH=1 Registros asociados con el generador de relación de baudios: 8 8
TXSTA: Transmit Status and Control Register USART. Registros de control bit 7 CSRC: Bit de selección de fuente de reloj Modo asíncrono: no utilizado Modo síncrono 1 = Modo maestro (reloj generado internamente por BRG) 0 = Modo esclavo (reloj de la fuente externa) bit 6 TX9: Bit de habilitación de transmisión de 9 bits 1 = Transmisión de 9 bits 0 = Transmisión de 8 bits bit 5 TXEN: Bit de habilitación de transmisión 1 = Transmisión habilitada 0 = Transmisión no habilitada. bit 4 SYNC: Bit de selección de modo en la USART 1 = Modo síncrono 0 = Modo asíncrono 9 9
TXSTA: Transmit Status and Control Register USART. Registros de control bit 3 No implementado se lee 0 bit 2 BRGH: Bit de selección de alta velocidad de trasmisión (High Baud Rate) Modo síncrono: no utilizado Modo asíncrono 1 = Alta velocidad 0 = Baja velocidad bit 1 TRMT: Bit de estado del registro de desplazamiento de transmisión 1 = TSR vacio 0 = TSR lleno bit 0 TX9D: Noveno bit del dato a transmitir. Puede ser el bit de paridad. 10 10
Diagrama de bloques USART. Transmisor TXREG vacío si TXIF=1 Buffer del registro de desplazamiento (R/W) Salida de datos Habilitación de TX Registro de desplazamiento de transmisión Bit 9 TSR vacio (TRMT=1) Habilitación bit 9 Habilitación puerto serie 11 11
USART. Transmisor Registros asociados en el 16F87x: 12 12
USART. Transmisor Cronogramas de transmisión: 13 13
USART Inicialización de la transmisión Inicializar el registro SPBRG con el valor apropiado para la velocidad a utlizar (tener en cuenta el bit BRGH) Habilitar el puerto serie asíncrono poniendo a 0 el bit SYNC y a 1 el bit SPEN. Para utilizar interrupciones poner a 1 los bits TXIE, GIE y PEIE. Para una trasmisión de 9 bits poner a 1 el bit TX9. Habilitar la transmisión con un 1 en el bit TXEN, qué también pondrá a uno el bit TXIF. Si se utiliza la transmisión de 9 bits cargar el noveno bit en TX9D. Cargar el dato en el registro TXREG (comienza la transmisión). 14 14
USART. Registros de control RCSTA: Receive Status and Control Register bit 7 SPEN: Bit de habilitación de puerto serie 1 = Puerto serie habilitado (configura RX/DT y TX/CK como pines del puerto serie) 0 = Puerto serie inhibido bit 6 RX9: Bit de habilitación de datos de 9 1 = Recepción de 9 bits 0 = Recepción de 8 bits bit 5 SREN: Bit de habilitación de recepción sencilla. Modo asíncrono: no utilizado Modo síncrono - maestro 1 = Habilitada 0 = Inhibida Se pone a cero cuando se completa una recepción. Modo síncrono - esclavo: no utilizado 15 15
RCSTA: Receive Status and Control Register USART. Registros de control bit 4 CREN: Bit de habilitación de recepción continua Modo asíncrono 1 = Habilitado 0 = Inhibido Modo síncrono 1 = Habilitado 0 = Inhibido bit 3 No implementado se lee 0 bit 2 FERR: Bit de error de trama 1 = Error de trama (se puede actualizar leyendo el registro RCREG y leyendo el siguiente byte válido) 0 = Sin error de trama bit 1 OERR: Bit de error de overrun 1 = Error de overrun (se puede borrar poniendo a cero CREN) 0 = Sin error de overrun bit 0 RX9D: Noveno bit recibido. Puede ser el bit de paridad 16 16
Diagrama de bloques: Recepción continua =1 USART. Receptor Indicadores de error Entrada de datos Registro de desplazamiento de recepción Habilitación puerto serie Datos de 9 bits Recepción completa Datos no leído en FIFO Doble buffer de recepción (FIFO) 17 17
USART. Receptor Registros asociados en la MCU 16F87x: 18 18
USART Inicialización de la recepción Inicializar el registro SPBRG con el valor apropiado para la velocidad a utlizar (tener en cuenta el bit BRGH) Habilitar el puerto serie asíncrono poniendo a 0 el bit SYNC y a 1 el bit SPEN. Para utilizar interrupciones poner a 1 los bits TXIE, GIE y PEIE. Para una trasmisión de 9 bits poner a 1 el bit RX9. Habilitar la recepción con un 1 en el bit CREN. El bit RCIF se pondrá a 1 cuando la recepción se complete, se generará una interrupción si RCIE esta activado. Leer RCSTA para coger el noveno bit si es necesario y determinar si ha ocurrido algun error. Recoger el dato recibido del registro RCREG. Si se ha producido algun error poner a cero el bit.cren 19 19
USART. Ejemplo de programa 20 20
USART. Muestreo El dato en el pin de RX se muestrea tres veces y se determina su nivel (alto o bajo) por mayoría. 21 21