TEMA 2 Interrupciones y periféricos básicos
INDICE 1. Interrupciones 1. Fuentes y habilitación de interrupciones 2. Vectores de interrupción 3. Prioridad y anidamiento 4. Registros de configuración 5. Latencia 6. Interrupciones externas 7. Manejo de interrupciones desde C 8. Ejemplos 2. Perifericos básicos 1. Timers 0 y 1 2. Comunicaciones serie asíncronas 3-2
FUENTES Y HABILITACIÓN DE INTERRUPCIÓN 8051 NO ENMASCARABLES NO HAY ENMASCARABLES EXTERNAS INT0 (Externa 0) INT1 (Externa 1) INTERNAS TF0 (Timer 0) TF1 (Timer 1) RI/TI (UART Rx/Tx) 5 FUENTES 80C51_FH Pg 16 3-3
FUENTES Y HABILITACIÓN DE INTERRUPCIÓN 80c552 NO ENMASCARABLES (NO HAY) ENMASCARABLES EXTERNAS INT0 (Externa 0) INT1 (Externa 1) INTERNAS TF0 (Timer 0) TF1 (Timer 1) RI/TI (UART Rx/Tx) SIO (I2C) T2 (8 ints) ADC (Conversor A-D) 15 FUENTES 80C552_OV Pg 42 3-4
VECTORES DE INTERRUPCION INTERRUPCIONES (8051) Cada fuente de interrupción hace saltar a una dirección fija de la memoria de programa Las direcciones son las más bajas (0x0003-0x0023) 8 bytes para cada rutina 0000 Direcciones 0003 entre 0 y 3? IE0 000B RESET TF0 0013 IE1 001B TF1 0023 RI+TI 80C552_OV Pg 48 3-5
VECTORES DE INTERRUPCION Rutinas de atención Tamaño Si es < 8 bytes Se atiende en el propio vector (más rápida) Si es > 8 bytes Se realiza el salto a la dirección en la que está la rutina (mas lenta) Finalización La última instrucción debe ser RETI. 80C552_OV Pg 48 3-6
PRIORIDAD Y ANIDAMIENTO 2 NIVELES DE PRIORIDAD PARA LA CPU (INTL e INTH). CADA FUENTE PUEDE CONECTARSE A UNO DE LOS NIVELES. HABILITACION GLOBAL E INDIVIDUAL. INTH TF0 TF1 CPU IE0 TF0 IE1 TF1 RI+TI INTL 80C552_OV Pg 48 3-7
PRIORIDAD Y ANIDAMIENTO TF1 (INTL) TF0 (INTL) Programa Principal Principal Programa Principal ISR TF1 ISR TF0 LAS INTERRUPCIONES DE IGUAL PRIORIDAD (INTH O INTL) NO SE ANIDAN 3-8
PRIORIDAD Y ANIDAMIENTO TF1 (INTL) TF0 (INTH) INTH interrumpe a INTL Programa Principal Programa Principal ISR TF1 ISR TF1 ISR TF0 SÓLO ES POSIBLE ANIDAR 2 NIVELES DE INTERRUPCIÓN 3-9
LATENCIA TIEMPO MININO PARA ATENDER UNA INTERRUPCION 3 CICLOS MAQUINA @ 12MHz = 3 us TIEMPO MAXIMO PARA ATENDER UNA INTERRUPCION 9 CICLOS MAQUINA @ 12 MHz = 9 us PROBLEMÁTICA Tiempo no despreciable Tiempo no constante 8051_FH Pg 7 y 16 3-10
INTERRUPCIONES EXTERNAS ACTIVACIÓN POR NIVEL O FLANCO FLANCO: Liberación automática del flag en el momento en el que se accede a la dirección de atención a la rutina. NIVEL: Periférico debe liberar el nivel una vez que se atienda. Puede ocurrir que: El periférico no libere el nivel por lo que se producirá otra interrupción. El periférico no mantenga suficiente tiempo activo el nivel por lo que se perdería la interrupción. 8051_FH Pg 7 y 16 3-11
INTERRUPCIONES EXTERNAS Ejemplo de Interrupciones externas IE0 Activa por flanco (Todas las INTs de la misma prioridad) ISR RI+TI ISR IE0 P.P. PP PP RI+TI Acti. IE0 DesAct IE0 t 3-12
INTERRUPCIONES EXTERNAS Ejemplo de Interrupciones externas IE0 Activa por nivel (Todas las INTs de la misma prioridad) ISR RI+TI P.P. PP RI+TI Acti. IE0 DesAct IE0 t 3-13
INTERRUPCIONES EXTERNAS Ejemplo de Interrupciones externas IE0 Activa por nivel. (Todas las INTs de la misma prioridad) ISR RI+TI ISR IE0 ISR IE0 P.P. PP PP PP RI+TI Acti. IE0 DesAct IE0 t 3-14
MANEJO DE INTERRUPCIONES DESDE C PARA ATENDER A UNA INTERRUPCION HAY QUE. Habilitar la interrupción individualmente Nivel de byte IEN0 = 0x01; //Habilita INT externa 0 Nivel de bit EX0 = 1; //Habilita INT externa 0 Elegir la prioridad de la interrupción Nivel de byte IP0 = 0x01; //INT externa 0 de alta prioridad Nivel de bit PX0 = 1; //INT externa 0 de alta prioridad Si son externas seleccionar nivel o flanco Nivel de byte TCON = 0x01; //INT externa 0 por flanco de bajada Nivel de bit IT0 = 1; //INT externa 0 por flanco de bajada Activar las interrupciones Nivel de byte IP0 = 0x80; Nivel de bit EA = 1; 3-15
MANEJO DE INTERRUPCIONES DESDE C Declaración de una ISR (Interrupt Service Routine) 1. void nombre_rutina (void) interrupt num_int Hace que en las direcciones del vector se coloque un salto a la dirección de la rutina. Hace que se salven en la pila los registros que use la rutina. Hace que la rutina retorne con RETI recuperando PC y registros de la pila. 2. void nombre_rutina (void) interrupt num_int using num_banco Hace que se emplee un banco de registros diferente 3-16
EJEMPLOS Prioridad entre INTH e INTL P.P. TF1 (INTH) ISR TF1 (INTH) TF0 (INTL) RI+TI (INTH) P.P. ISR RI+TI (INTH) P.P. ISR TF0 (INTL) P.P. t 3-17
EJEMPLOS Prioridad dentro de la misma cadena de prioridad P.P. TF1 (INTH) ISR TF1 (INTH) TF0 (INTL) IE0 (INTL) P.P. ISR IE0 (INTL) P.P. ISR TF0 (INTL) P.P. t 3-18
EJEMPLOS Perdida de Interrupciones P.P. RI+TI ISR RI+TI RI+TI RI+TI RI=0 TI=0 P.P. t 3-19
TIMER 0-1. Diagrama de bloques básico TIMER PUEDE CONTAR EVENTOS O TEMPORIZAR Reloj Interno Señal Externa Contador /Temporizador CLK Enable CONTADOR Habilitación Bus Interno OVF Flag HW OR SW 3-20
Modelo de los Timer 0 y 1 PATILLAJE T0 /INT0 T1 /INT1 P3.4 P3.2 P3.5 P3.3 REGISTROS (SFR) TMOD (89h) TCON (88h) 7 TH0 (8Ch) TL0 (8Ah) 0 TH1 (8Dh) TL1 (8Bh) 3-21
FUNCIONALIDAD MODO 0 y MODO 1 Contar eventos hasta 2 13 o 2 16 eventos Generar tiempos de retardo programables (Monoestable) dependiendo de los valores cargados en TH y TL. Modo 0 Modo 1 t MODO0 = 2 13 ( THx*32 + TLx[4..0]) f /12 OSC t MODO1 = 2 16 ( TH1*256 + TL1) f /12 OSC 3-22
FUNCIONALIDAD MODO 2 Generar interrupciones periódicas de periodo: t MODO2 Frecuencia Máxima. Guardar en TH1=0xFF Frec _ Max = fosc Frecuencia Mínima. Guardar en TH1=0x00 = 2 8 f Generar la frecuencia de reloj para las comunicaciones serie asíncronas 2 12 f _ Min OSC 8 Frec = TH /12 osc *12 3-23
FUNCIONALIDAD MODO 3 Los timers 0 y 1 se convierten en tres contadores de 8 bits. TL0 puede temporizar o contar eventos y generar IE0. TH0 sólo puede temporizar y generar IE1 por lo que esta interrupción no puede ser empleada por el Timer 1. Timer 1 se puede emplear para generar la frecuencia de funcionamiento de la UART. Cuando el timer 0 funciona en modo 3, el Timer 1 puede configurarse como temporizador o contador en uno de los modos: 0, 1 o 2, estando siempre funcionando y sin indicador de desbordamiento; para pararlo hay que configurarlo también en modo 3. 3-24
REGISTROS DE CONTROL TF1: Flag de desbordamiento del TIMER 1. Puesto a 1 automáticamente cuando el contador llega a 0. Si la interrupción correspondiente está permitida, este indicador automáticamente se vuelve a poner a 0 cuando se ejecuta la subrutina de interrupción. Si se utiliza por sondeo hay que borrar el flag manualmente. TR1: Bit de arranque del TIMER 1. Se debe poner a 1 por software para permitir la cuenta y a 0 para pararlo TF0: Idem que TF1 para Timer 0 TR0 Idem que TR1 para Timer 0 80C51_FH Pg 7 3-25
REGISTROS DE CONTROL GATE: Habilitación HW del timer =1, el TIMER x está habilitado solamente cuando su patilla de entrada INTx está a 1 y el bit TRx del registro TCON está a 1 = 0, el TIMER x está habilitado si TRx está a 1. C/T: Funcionamiento como contador o temporizador = 0, el TIMER actúa como TEMPORIZADOR = 1, el TIMER actúa como CONTADOR de los eventos presentes en la patilla de entrada Tx. 80C51_FH Pg 7 3-26
REGISTROS DE CONTROL M1 M0 0 0 Contador de 13 bits 0 1 Contador de 16 bits Modos de funcionamiento 1 0 Contador de 8 bits con recarga automática. El contenido de THx se carga en TLx cuando éste llega a 0 1 1 TIMER 0: El registro TL0 actúa como contador de 8 bits controlado normalmente por los bits de control del TIMER 0. Por otra parte, TH0 es configurado como temporizador de 8 bits controlado por los bits de control del TIMER 1. TIMER 1: El contador trabaja como temporizador sin salida de interrupción ni control. 80C51_FH Pg 7 3-27
Comunicaciones Serie y Paralelo COMUNICACIONES PARALELO Comunicaciones serie Síncronas Transmisor serie 1 línea de datos Transmisor paralelo línea de reloj Receptor serie n líneas de datos líneas de protocolo Receptor paralelo COMUNICACIONES SERIE Comunicaciones serie Asíncronas Transmisor serie 1 línea de datos Receptor serie 3-28
Comunicaciones Serie Síncronas Sistema Digital A TxD RxD CLK GND Formato de la trama: d n-1 Canal de Comunicación d 0 d 1 d n-1 RxD TxD Sistema Digital B CLK GND d 0 d 1 CLK Dato i-1 Dato i Dato i+1 3-29
Comunicaciones Serie Asíncronas Sistema Digital A TxD RxD GND Formato de la trama: 0 d 0 Canal de Comunicación RxD TxD Sistema Digital B GND d 1 d n-1 P 1 Bit de Arranque Bits de Datos Bit de Paridad Bits de Parada Línea desocupada TRAMA DE BITS PARA CADA DATO Línea desocupada 3-3030
Comunicaciones Serie Asíncronas CARACTERISTICAS DE LAS COMUNICACIONES SERIE ASINCRONAS Velocidad de la comunicación: inversa del tiempo dedicado a transmitir un bit en la línea. Velocidades normalizadas: 110, 300, 600, 1200, 2400, 4800, 9600, 19200, 57600, 115200, baudios Numero de bits de datos: entre 1 y 8. Habitualmente 7 u 8 Numero de bits de parada: puede ser 1, 1.5 o 2 (tiempos de bit en la línea). Paridad: el criterio para el bit de paridad puede ser par, impar, sin paridad, marca (1) o espacio (0) El Transmisor y el Receptor conectados por una línea serie asíncrona deben estar configurados con los mismos parámetros 3-3131
Comunicaciones Serie Asíncronas Controlador de Comunicaciones Serie Asíncronas genérico INT D0..D7 RD WR A i CS RESET CLK Lógica de control Velocidad de la comunicación Paralelo-serie Reg. de salida Reg. de entrada Serie-paralelo Salida serie Entrada serie Reg. Estado (flags) Configuración 3-3232
Comunicaciones Serie Asíncronas Transmisor de las Comunicaciones Serie Asíncronas Orden de arranque RELOJ Configuración: 1 Habilitación del transmisor Permiso interrupciones Tx DATOS REGISTRO DE DESPLAZAMIENTO 0 Indicadores ( Flags ): Salida serie Listo para transmitir otro dato 3-3333
Comunicaciones Serie Asíncronas Receptor de las Comunicaciones Serie Asíncronas Entrada serie Detector de arranque Configuración: Rx Reloj DATO Registro de desplazamiento - Habilitación del receptor - Permiso interrupciones Señal de entrada Muestreo Indicadores ( Flags ): - Dato recibido - Errores de recepción: Error de trama Error de paridad Overrun Ruptura línea 3-3434
UART MCS-51 (DIAGRAMA DE BLOQUES) Diagrama de bloques Generador Velocidad comunicación SCON (configuración y flags) SBUF (Tx) (sólo escritura) BUFFER SBUF (Rx) (sólo lectura) Tx (P3.1) Rx (P3.0) 3-3535
UART MCS-51 (DIAGRAMA DE BLOQUES) PATILLAJE Rx P3.1 Tx P3.0 REGISTROS (SFR) SBUF (99h) SCON (98h) PCON (87h) NOTA: En los microcontroladores 8xC552 los registros se llaman S0BUF y S0CON para distinguirlos de los asociados al bus I2C 3-3636
UART MCS-51 (MODO 0) Modo 0: registro de desplazamiento de entrada RX TX CLK Línea desocupada % 12 SCON (configuración y flags) d 0 d 1 d 7 Dato recibido BUFFER SBUF (solo lectura) Línea desocupada Tx (P3.1) Rx (P3.0) Tx: salida de la señal de reloj de la transmisión Rx: entrada de datos recibidos, un bit por cada ciclo de reloj Velocidad: la frecuencia del oscilador dividido por 12 80C51_FH Pg 10 3-3737
UART MCS-51 (MODO 0) Ejemplo de aplicación de modo 0 como entrada 3-3838
UART MCS-51 (MODO 0) Modo 0: registro de desplazamiento de salida RX TX CLK Línea desocupada % 12 SCON (configuración y flags) d 0 d 1 d 7 Dato transmitido SBUF (solo escritura) Línea desocupada Tx (P3.1) Rx (P3.0) Tx: salida de la señal de reloj de la transmisión Rx: salida de datos, un bit por cada ciclo de reloj Velocidad: la frecuencia del oscilador dividido por 12 80C51_FH Pg 10 3-3939
UART MCS-51 (MODO 0) Ejemplo de aplicación de modo 0 como salida 3-40
UART MCS-51 (MODO 1) Tramas modo 1 Bit de Arranque 0 0 0 0 Bits de Datos: SBUF Bit de Parada d 0 d 1 d 6 d 7 1 d 0 d 1 d 6 P 1 d 0 d 1 d 6 1 1 d 0 d 1 P 1 1 Datos Parada Paridad 8 1 no 7 1 si 7 2 no 6 2 si La velocidad se genera a través del timer 1, configurado como temporizador con autorecarga (modo 2). BAUD RATE = 32 2 12 f (256 SMOD OSC TH 1) 80C51_FH Pg 11 3-41
UART MCS-51 (MODO 2) Tramas modo 2 Bit de Arranque Velocidad constante Bits de Datos: SBUF TB8 o RB8 Bit de Parada 0 d 0 d 1 d 6 d 7 d 8 1 0 d 0 d 1 d 6 d 7 P 1 0 d 0 d 1 d 6 d 7 1 1 0 d 0 d 1 d 6 P 1 1 BAUD RATE = SMOD 2 f OSC 64 Datos Parada Paridad 9 1 no 8 1 si 8 2 no 7 2 si 80C51_FH Pg 11 3-42
UART MCS-51 (MODO 3) Tramas modo 3 Bit de Arranque Bits de Datos: SBUF TB8 o RB8 Bit de Parada 0 d 0 d 1 d 6 d 7 d 8 1 0 d 0 d 1 d 6 d 7 P 1 0 d 0 d 1 d 6 d 7 1 1 0 d 0 d 1 d 6 P 1 1 Datos Parada Paridad 9 1 no 8 1 si 8 2 no 7 2 si La velocidad se genera a través del timer 1, configurado como temporizador con autorecarga (modo 2). BAUD RATE = 32 2 12 f (256 SMOD OSC TH 1) 80C51_FH Pg 11 3-43
Frecuencia de comunicación serie Configuración TMOD Frecuencias comunicación típicas FRECUENCIA DE COMUN. 19200 9600 4800 TIMER 1 TIMER 0 GATE C/T M1 M0 GATE C/T M1 M0 0 0 1 0 0 0 0 0 FRECUENCIA OSCILADOR 11,059 Mhz. 11,059 Mhz. 11,059 Mhz. VALOR SMOD 1 0 0 C/T 0 0 0 MODO 2 2 2 TIMER 1 TH1 FDH FDH FAH 2400 11,059 Mhz. 0 0 2 F4H 1200 11,059 Mhz. 0 0 2 E8H 300 6 Mhz. 0 0 2 CCH 110 6 Mhz. 0 0 2 72H 31250(MIDI) 12 Mhz. 0 0 2 FFH 3-44
UART MCS-51 (INTERRUPCIONES) Interrupciones de las comunicaciones serie TI RI Interrupción puerto serie ES EA PS Petición prioridad alta Petición prioridad baja - Se genera una única interrupción del puerto serie - Es necesario consultar los flags (RI y TI) para diferenciar interrupciones del receptor y del transmisor - Es necesario borrar los flags por programa 3-45
REGISTROS DE CONTROL 7 6 5 4 3 2 1 0 SCON SM0 SM1 SM2 REN TB8 RB8 TI RI (98H) (MSB) (LSB) Bit Símbolo Función SCON.7 SM0 Selección del modo de funcionamiento SCON.6 SM1 SM1 SM0 MODO DESCRIPCION VELOCIDAD COMUNICACION 0 0 0 Reg. Desplazamiento CLK / 12 0 1 1 UART 8 bits variable (timer 1) 1 0 2 UART 9 bits CLK / 64 o CLK / 32 1 1 3 UART 9 bits variable (timer 1) SCON.5 SM2 Habilitación de comunicaciones multiprocesador (modos 2 y 3). En modo 0 debe ser 0. En modo 1: si SM2=1 sólo se activa RI si se recibe un bit de parada correcto SCON.4 REN Habilitación del receptor 80C51_FH Pg 10 3-46
REGISTROS DE CONTROL 7 6 5 4 3 2 1 0 SCON (98H) SM0 (MSB) SM1 SM2 Bit Símbolo Función REN TB8 RB8 SCON.3 TB8 Bit noveno a transmitir en los modos 2 y 3. En los modos 0 y 1 no se utiliza SCON.2 RB8 Noveno bit recibido en los modos 2 y 3. En modo 0 debe ser 0. En modo 1: si SM2=0, RB8 es el bit de parada recibido SCON.1 TI Flag de interrupción del transmisor. Indica que está listo para transmitir un nuevo dato. Hay que borrarlo por programa TI RI (LSB) SCON.0 RI Flag de interrupción del receptor. Indica que SBUF tiene un dato recibido. Hay que borrarlo por programa 80C51_FH Pg 10 3-47
REGISTROS DE CONTROL PCON 7 6 5 4 3 2 1 0 SMOD (87H) (MSB) (LSB) Bit Símbolo Función PCON.3 SMOD Multiplicar por dos la velocidad de transmisión en los modos 1, 2 y 3 80C51_PG Pg 5 3-48