Está en la página 1de 24

Automatización industrial:

Sistemas de control basados en


microcontroladores.

Profesor: Dr. René J. Díaz Martínez


E-mail: renejdm@tec.mx
Conferencia 2: Interrupciones de la familia 16FXXX.
Sumario:
- La interrupción como forma de atención a la E/S.
- Interrupciones de la familia 16FXXX.
- Diseño de aplicaciones en ensamblador y en C.

Bibliografía:
1. Angulo, J. M. y otros. Microcontroladores PIC. Diseño práctico de
aplicaciones. 2ª parte. 2da edición. McGraw-Hill, 2006.
2. Manual del PIC 16F887.
3. García Breijo, Eduardo. Compilador C CSS y simulador Proteus para
Microcontroladores PIC. MARCOMBO S.A. Barcelona, España. 2008.
4. Reinoso, Sixto y otros. Programación de microcontroladores PIC con
lenguaje C (2 tomos). Primera edición electrónica. Octubre de 2018. ISBN:
978-9942-765-36-9
- La interrupción como forma de atención a la E/S.
Dentro de las formas de atención a los dispositivos o eventos de E/S
están:
1. Por programa: se realizan a través de un programa y se emplea un
registro para contener el dato proveniente de un dispositivo de
entrada o que se enviará a un dispositivo de salida.
a) Por encuesta o polling: un lazo de programa queda a la espera de la
obtención del dato
b) Por interrupción: una señal externa provoca la activación del
mecanismo de obtención del dato (enmascarables y no
enmascarables).
2. Por DMA: los datos se transfieren de un dispositivo de entrada a la
memoria interna o de la memoria interna a un dispositivo de salida, sin
pasar por el procesador. Requiere un hardware especializado.
- Interrupciones de la familia 16FXXX.
Características generales:
1. Posee múltiples fuentes de interrupción:
a) Interrupciones comunes.
b) Interrupciones de periféricos. ;gestión de prioridades
2. La interrupción es vectorizada, y todas las ORG 4
fuentes provocan un salto a la misma dirección btfsc INTCON, INTF
(0004h). goto IT_Ext
3. Las prioridades las establece el programador btfsc INTCON, T0IF
mediante el orden en que encueste las goto IT_Timer0
banderas de solicitud de interrupción. btfsc INTCON, RBIF
4. Banderas de solicitud y de habilitación de las goto IT_PuertoB
interrupciones (individual y general). goto IT_EEPROM
5. Distintos registros asociados con la
interrupción (INTCON, PIE1, PIR1, etc.)
Fuentes de interrupción de la familia 16FXXX.
- Interrupciones comunes 4. Puerto serie
1. Interrupción externa por pin Sincrónico/Asincrónico
RB0/INT (subida o caída) 5. EUSART, RC-TX)
2. Por desbordamiento del 6. Fin de conversión A/D
Timer 0/RTCC 7. Escritura en EEPROM
3. Cambio en el estado de los finalizada
bits 4-7 del puerto B 8. Lectura/escritura del puerto
- Interrupciones de periféricos paralelo de comunicación.
1. Desbordamiento de Timers 1 9. Modo de ultra baja potencia
y2 (ULPW)
2. Modo Comparación/ (1 y 2) 10. Colisión en el bus
3. Modo Captura 11. Fallo del oscilador
4. Dispone del registro INTCON (0Bh, 8Bh, 10Bh y 18Bh) para conocer el estado de cada una de
las ITs, los bits para su habilitación independiente y un bit para su habilitación general. Después
de un MCLR el INTCON= 00h (todas las fuentes inhabilitadas).

7 6 5 4 3 2 1 0
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

• RBIF= 1 cuando hay un cambio de nivel en cualquiera de los bits 4-7 de RB.
• INTF= 1, cuando hay un cambio por flanco de subida o de caída en RB0/INT.
• T0IF= 1 cuando el temporizador pasa de 0FFh a 00h.
• En algunos PICs en PEIE radica la bandera de fin de escritura en la EEPROM.
• T0IE, INTE y RBIE son los bits activos en 1 que habilitan las fuentes de IT asociadas a la escritura
en EEPROM, desbordamiento en el temporizador, interrupción externa y por cambio de nivel de
los bits de RB, respectivamente.
• GIE es la habilitación general de las interrupciones (cuando vale 1)
• Una vez que se activen en “1” las banderas de las fuentes, deben ser puestas a “0” por programa
para que se puedan volver a solicitar.
Mecanismo de una interrupción
1.Una fuente solicita IT seteando su bandera.
2.La CPU:
- Finaliza la instrucción en curso
- Chequea si hay alguna fuente solicitando IT
- Chequea los bits de habilitación (individual y GIE).
- Guarda PC en la pila.
- Resetea bit GIE
- Carga PC con 0004h.
3.Al finalizar la IT la instrucción RETFIE:
- Restablece GIE= 1.
- Recupera PC de la pila.
4.Continua la corrida del programa principal.
Interrupción externa.
• External interrupt on RB0/INT pin is edge triggered: either rising if
INTEDG bit (OPTION_REG-6) is set, or falling, if INTEDG bit is clear.
• When a valid edge appears on the RB0/INT pin, the INTF bit
(INTCON-1) is set.
• It can be disabled by clearing control bit INTE (INTCON-4).
• Flag bit INTF must be cleared in software via the interrupt service
routine before re-enabling this interrupt.
• The INT interrupt can wake the processor from SLEEP, only if the
INTE bit was set prior to going into SLEEP. The status of the GIE bit
decides whether the processor branches to the interrupt vector
following wake-up.
Interrupción por cambio en los pines 4-7 del
puerto B.
• An input change on PORTB-4:7 sets flag bit
RBIF (INTCON-0).
• The interrupt can be enabled/disabled by
setting/clearing enable bit RBIE (INTCON-3).
• For a change on the I/O pin to be recognized,
the pulse width must be at least TCY wide.
Interrupción por desbordamiento del
temporizador.
• An overflow (FFh → 00h) in TMR0 will set
flag bit T0IF (INTCON-2).
• The interrupt can be enabled/disabled by
setting/clearing enable bit T0IE (INTCON-5).
Lógica de solicitud de interrupción en PIC 16F72.
Lógica de
solicitud de
interrupción
en el PIC
16F887.
Registro OPTION (81h, 181h)
Bancos de
SRAM del
PIC 16F887.
- Diseño de aplicaciones en ensamblador y en C.

Ejemplo 1: Diseñar un sistema con PIC 16F72 que


lleve el conteo de las veces que se deprime un
interruptor. El interruptor será atendido por
interrupción a través de RB0-INT. Tener en cuenta
eliminar el rebote del interruptor (rutina de
demora), la subrutina de atención a la IT y el
programa principal (inicialización y resto del
programa).
Solución:

VCC VCC VCC


Interruptor 1KΩ
VDD VCC 330Ω
RB0 RA0 A a
RB1 RA1 B b
C c .
RB2 RA2 .
D .
RB3 RA3 d
9368 e
f
g
20pF
VCC
PIC16F887 VSS
10KΩ
4MHz RESET
RB4
100Ω
OSC1
20pF RB5
RB6

RB7
;Programa: conteo depresión de push-button atendido por IT
;Definición de registros
CONTA equ 20h ;contador de pulsaciones
LOOPS equ 21h ;registro utilizado en retardos (ms)
LOOPS2 equ 22h ;utilizado en retardos
OPTION equ 81h ;registro para configurar flanco de IT
INTCON equ 0Bh ;registro de habilitación de ITs y flags
;
reset org 0 ;vector de RESET en la dirección 00h
goto Inicio ;salta al inicio del programa
;Subrutina de atención a la IT
org 4 ;vector de RESET en la dirección 00h
CALL RETARDO ;para eliminar el rebote inicial
BTFSC PORTB,0
GOTO sale
BTFSS INTCON,1 ;averiguar la fuente que provocó la IT
GOTO sale
INCF CONTA
MOVF CONTA,W
XORLW 0Ah ;averiguar si llegó a 10
BTFSC STATUS,Z ;si Z=1 limpiamos CONTA
CLRF CONTA ;si Z=0 se saca conteo por PORTA
MOVF CONTA,W ;leer CONTA y guardarlo en W (CONTA → W)
MOVWF PORTA ; escribir en PORTA (W → PORTA)
CALL RETARDO ;para eliminar el rebote final
sale BCF INTCON,1 ;limpia bandera de INT
RETFIE ;retorno al Programa Principal
Retardo ;subrutina de retardo de 100 ms
MOVLW D’100’ ;valor decimal a cargar en el registro loops
MOVWF loops ;loops contiene el número de ms del retardo
top2: MOVLW D’110’ ;valor decimal para completar los 100ms
MOVWF loops2
top: NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ loops2 ;pregunta si terminó 1 ms
GOTO top ;repite desde ciclo
DECFSZ loops ;pregunta si terminó el retardo
GOTO top2
RETURN ;también retlw 0
; Programa Principal
Inicio BANKSEL ANSEL ;se ubica en banco 3 de RAM
CLRF ANSEL ;configura todos los pines de PORTA como E/S digitales
BANKSEL TRISA ;se ubica en banco 1 de RAM
CLRF TRISA ;programa los pines del puerto A como salidas
MOVLW 0xFFh ;programa los pines del puerto B como entradas
MOVWF TRISB
MOVLW 80h ;flanco de caída para la IT externa
MOVWF OPTION ;en el registro OPTION
BANKSEL PORTA ;se ubica en el banco 0 de RAM
MOVLW 90h ;habilita IT en INTCON
MOVWF INTCON ;habilita INT por RB0 y la habilitación de IT general (GIE)
CLRF CONTA ;inica contador en cero
MOVF CONTA,W ;carga W con el valor del conteo
MOVWF PORTA ;pasa el valor de W al puerto A
ciclo NOP ;el micro queda a la esper de cualquier solicitud de IT
NOP
GOTO ciclo
END
Diagrama en bloques de los bits 0-3 del PORTB

Registro IOCB para habiltar la interrupción


por cambio de los pines 0-7 del PORTB

Puerto Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Direcc.

IOCB IOCB7 IOCB6 IOCB5 IOCB4 IOCB3 IOCB2 IOCB1 IOCB0 96h
Problema propuesto 1: Diseñe el Hw y el Sw que
permita encender y apagar un LED consecutivamente,
conectado en el terminal RB7, cada vez que se
produzca un cambio de nivel en el terminal RB0 del PIC
16F887.

Problema propuesto 2: Diseñe el Hw y el Sw que


permita atender dos interruptores (0 y 1) por IT, y en
dependencia del que se active se visualice un 0 o un 1
en una lámpara de 7 segmentos. Emplee un PIC
16F887.

También podría gustarte