You are on page 1of 19

10.

Interrupciones
10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 Introduccin Comunicacin de dispositivos Fuentes de interrupcin Habilitacin y Semforos Proceso de interrupcin Mapa de vectores Prioridad Aplicaciones

86

10.1 Introduccin

11010011 00110011

IMPRIMIR MAS DATOS IMPRESORA SIN PAPEL

ENVIAR OTRO DATO SE RECIBI UN DATO

APAGADO DE EMERGENCIA

PROCESAR DATOS ENTREGAR DATOS

SUBPROGRAMAS ESPECIALES
87

10.2 Comunicacin de dispositivos

a) Consultas (polling): Dentro del programa principal el Microcontrolador consulta el estado de un perifrico para saber si necesita atencin. La consulta es cclica y se realiza mediante los bits de los puertos.

b) Interrupcin: El dispositivo tiene una lnea de atencin directa con el microcontrolador y si ste tiene autorizacin para atenderlo el servicio se dar de manera inmediata.

88

Consultas (polling)

1) La consulta del dispositivo se hace en cada ciclo del programa. 1) La atencin se realiza despus de la consulta y no cuando el dispositivo lo requiera.
89

Interrupcin

1) La solicitud de atencin puede ocurrir en cualquier momento. 2) El dispositivo puede ser atendido en ese preciso momento. (Procesos en tiempo real).
90

10.3 Fuentes de Interrupcin

INT0: Interrupcin Externa 0 (P3.2 / 12) INT1: Interrupcin Externa 1 (P3.3 / 13) TF0 : Interrupcin por el Timer 0 (Interna) TF1 : Interrupcin por el Timer 1 (interna) RI : Interrupcin por Recepcin serie (interna) TI : Interrupcin por Transmisin serie (interna)
91

10.4 Habilitacin y Semforos

MOV

0A8H, # 91H

92

T2CON
8052

TCON
8031 / 8051

93

10.5 Prioridad
La prioridad se define como la jerarqua que tendr cada interrupcin en la operacin del microcontrolador. Cada interrupcin puede programarse para alta o baja prioridad. Una interrupcin de baja prioridad puede ser interrumpida por otra de alta, pero no por otra de baja. Una interrupcin de alta prioridad slo puede ser interrumpida por el RESET (interrupcin externa).

1 0 0 0 1 0 0 0
MOV 0B8H, #11H
94

Qu sucede si son detectadas 2 interrupciones con el mismo nivel de prioridad El microcontrolador tiene una secuencia de servicio predeterminada que define cul interrupcin es atendida primero.

95

Cuadro de Habilitacin y Prioridad

96

10.6 Proceso de Interrupcin

Los semforos de interrupcin son muestreados en el estado 5, fase 2 de cada ciclo mquina. Las muestras son escrutadas en el siguiente ciclo mquina ( Est habilitada , Qu Prioridad tiene ). En los siguientes ciclos mquina el microcontrolador genera una llamada al vector apropiado para ejecutar la subrutina de atencin siempre y cuando no estn presentes las condiciones de bloqueo.

97

Condiciones de bloqueo
1) Que est en proceso una interrupcin de igual o mayor nivel de prioridad. 2) Que no haya finalizado la instruccin en proceso. 3) La instruccin en proceso es una RETI se est accesando a los registros IE o IP.

Casos Especiales
Si un semforo de interrupcin est activado y el sistema no puede responder por encontrarse en condicin de bloqueo, puede ocurrir:

1er. CASO: Que desaparezca la situacin de bloqueo y el semforo siga activado. En este caso el sistema atiende la interrupcin. 2. CASO: Que desaparezca la situacin de bloqueo y el semforo se haya desactivado. La interrupcin es rechazada y necesita ser solicitada nuevamente.

98

Vectoreo de una Interrupcin


0000H LJMP MAIN

0023H 0024H 0025H

LJMP 00H 05H

002BH MAIN

PROGRAMA PRINCIPAL

SI LA SUBRUTINA CABE EN 8 BYTES PUEDE USARSE EN EL AREA DE VECTOREO.

0500H RUTINA DE TRATAMIENTO DE INTERRUPCIN RETI

FFFFH

MEMORIA DE PROGRAMAS 99

NOTA: Observe la importancia de mantener libre la zona de vectoreo en el programa principal; si piensa utilizar las interrupciones ya que ah slo deben guardarse las instrucciones de tratamiento de cada interrupcin o bien un salto a las subrutinas de aquellas.

100

10. Aplicaciones
Oscilador 360 Hz con relacin 2:1

MICRO P1.0

101

IN T _ T 0

ORG CPL RETI

INT_T0 00H

V E C _T 0

ORG OSCILA SJMP MAIN

IN V IE R T E B A N D E R A RETI MAIN

IN T _ T 0

ORG VEC_T0 AJMP INT_T0

ALTA PRIORIDAD AL T0 HABILITAR INT_T0 TIMER 0 EN MODO 1

MAIN

MOV MOV MOV

B8H, #02H A8H, #82H 89H, #01H

PRENDER UNA BANDERA

SETB

00H

DETENER EL TIMER 0 CONFIGURAR RETARDO "1" ARRANCAR TIMER 0

CICLO MOV MOV MOV MOV

88H, #00H 8AH, #69H 8CH, #F9H 88H, #10H

NO

BORRAR P1.0 ?

W1

JB

00H,W1

SI

BORRA P1.0

CLR MOV MOV MOV MOV W2

90H 88H, #00H 8AH, #BDH 8CH, #FCH 88H, #10H

DETENER EL TIMER 0 CONFIGURAR RETARDO "0" ARRANCAR TIMER 0

NO

PRENDER P1.0 ?

JNB 00H,W2

SI

PONE P1.0

SETB 90H SJMP CICLO

102

TITLE "PROGRAMA QUE GENERA UNA OSCILACION DE ; 360 HZ CON CICLO DE TRABAJO DE 2 A 1" ; OSCILA INT_T0 VEC_T0 MODO1 START_0 STOP_0 PALTO_L PALTO_H PBAJO_L PBAJO_H F_NIVEL PRIO_T0 HAB_IT0 P10 EQU EQU EQU ; EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU ORG ; SJMP ORG ; AJMP 0000H 0100H 000BH 01H 10H 00H 69H 0F9H 0BDH 0FCH 00H 02H 82H 90H OSCILA MAIN VEC_T0 INT_T0 ;DIRECCION DE ORIGEN DEL PROGRAMA ;INICIO DEL PROG. DE INTERRUPCION DE T0 ;VECTOR DE INTERRUPCION TIMER 0 ;MODO 1 CONTADOR 16 BITS PARA TIMER 0 ;PARA ARRANQUE DE TIMER 0 ;PARA DETENER TIMER 0 ;AJUSTE DEL TIMER 0 PARA RETARDO DE 2/3 DE ;UN PERIODO DE 1/360 SEGUNDOS ;AJUSTE DEL TIMER 0 PARA RETARDO DE 1/3 DE ;UN PERIODO DE 1/360 SEGUNDOS ;BANDERA DE NIVEL (ALTO O BAJO) ;PARA ALTA PRIORIDAD DEL TIMER 0 ;PARA HABILITAR INTERRUPCION DEL TIMER 0 ;BIT 0 DEL PUERTO 1 ;INICIA PROGRAMA PRINCIPAL ;SALTO A MAIN ;SE VECTORIZA LA INTERRUPCION DEL TIMER 0 ;SALTO A PROGRAMA DE INTERRUPCION DEL T0

MAIN TIMER 0 BITS

INCLUDE "DEFAULT.51" ; MOV IP,#PRIO_T0 MOV MOV SETB ; MOV MOV MOV MOV ; NOP JB ; CLR IE,#HAB_IT0 TMOD,#MODO1 F_NIVEL TCON,#STOP_0 TL0,#PALTO_L TH0,#PALTO_H TCON,#START_0

;DEFINE ALTA PRIORIDAD INT DEL ;HABILITA INTERRUPCION DEL TIMER 0 ;CONFIGURA T0 COMO CONTADOR DE 16 ;ACTIVA BANDERA PARA NIVEL ALTO ;DETIENE EL TIMER 0 ;CONFIGURA TIMER 0 PARA RETARDO DE ;2/3 DE UN PERIODO DE 1/360 SEG ;ARRANCA TIMER 0 ;BUCLE DE ESPERA MIENTRAS EL TIMER

CICLO

WAIT_H 0

F_NIVEL,WAIT_H P10 TCON,#STOP_0 TL0,#PBAJO_L TH0,#PBAJO_H TCON,#START_0

;LLEGA A 1707 CICLOS MAQUINA (2/3) ;LIMPIA EL BIT 0 DEL PUERTO 1 ;DETIENE EL TIMER 0 ;CONFIGURA TIMER 0 PARA RETARDO DE ;1/3 DE UN PERIODO DE 1/360 SEG ;ARRANCA EL TIMER 0

("0") MOV MOV MOV MOV ;

103

WAIT_L 0

NOP JNB ; SETB SJMP ; ORG F_NIVEL,WAIT_L P10 CICLO INT_T0 F_NIVEL

;BUCLE DE ESPERA MIENTRAS EL TIMER ;LLEGA A 853 CICLOS MAQUINA (1/3) ;PONE UN "1" EN EL BIT 0 DE P1 ;SALTA PARA OTRO PERIODO A "CICLO" ;INICIA RUTINA DE INTERRUPCION DE ;SI F_NIVEL = "1" LA PONE A "0" ;SI F_NIVEL = "0" LA PONE A "1" ;RETORNA DE LA INTERRUPCION

T0 CPL ; RETI ; END

104

You might also like