Professional Documents
Culture Documents
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
APAGADO DE EMERGENCIA
SUBPROGRAMAS ESPECIALES
87
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
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
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
96
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
002BH MAIN
PROGRAMA PRINCIPAL
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
INT_T0 00H
V E C _T 0
IN V IE R T E B A N D E R A RETI MAIN
IN T _ T 0
MAIN
SETB
00H
NO
BORRAR P1.0 ?
W1
JB
00H,W1
SI
BORRA P1.0
NO
PRENDER P1.0 ?
JNB 00H,W2
SI
PONE P1.0
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
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
;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
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
104