Universidad Antonio Nariño

Aplicación Industrial de Micros
Código: 444405

  CAPITULO 4
Experimentos introductorios

4.3 Servicio de interrupción
Objetivos: Procedimiento:
Para ejemplificar el uso de un servicio de interrupción se ha dispuesto el hardware de la figura 4.3.1 en el cual se decide utilizar la interrupción externa INT (RB0) en un PIC16F84, esta interrupción está vectorizada a la dirección de memoria de programa 004h, dentro de la atención a esta interrupción se opta por complementar el estado del LED colocado al puerto RA0 cada vez que esta sea atendida.

Diagrama eléctrico:

FIG. 4.3.1 Hardware para ejemplo de interrupción
 
  Diagrama de flujo:
FIG. 4.3.2 Diagrama de flujo para acción de interrupción
 
Listado del programa en assembler:
;Programa para realizar el apagado y encendido de un LED colocado en el ;Puerto A0 basado en la interrupción externa INT (RB0)
;
list p=16F84
status   equ   0x03
porta    equ   0x05
portb    equ   0x06
intcon   equ   0x0B
optionr  equ   0x81
trisa    equ   0x85
trisb    equ   0x86
#define  LED   porta,0
#define  BANK1 bsf status,5
#define  BANK0 bcf status,5
         org   000h    ;Indica al ensamblador la dirección de memoria de
                       ;la sig. instrucción
         goto  Inicio
         org   004h    ;Indica al ensamblador la dirección de memoria de
                       ;la sig. instrucción
Interrupcion
     btfss intcon,1    ;es interrupción INT?
     retfie            ;retorna de interrupción y GIE=1
     btfsc porta,0     ;probar estado actual del LED
     goto  Prender     ;va a encender el LED
Apagar
     bsf   porta,0     ;apaga el LED
     goto  Espera
Prender
    bcf    porta,0     ;enciende el LED
Espera
    btfss  portb,0     ;espera a que se suelte el pulsador
    goto   Espera
    bcf    intcon,1    ;borra bandera INT
    retfie             ;retorna de interrupción y GIE=1
;Programa principal
Inicio
    BANK1              ;selección del banco 1
    bcf    trisa,0     ;selecciona porta,0 como salida
    BANK0              ;selección de banco 0
    bsf    porta,0     ;apagar LED
;programación de interrupción
    bsf    intcon,4    ;activar interrupción INT
    BANK1              ;selección banco 1
    bcf    optionr,6   ;selección del flanco de bajada en el pin INT
    BANK0
    bsf    intcon,7    ;Habilitar interrupciones globales
    goto   $           ;queda a la espera de interrupción
    end

El símbolo $ significa la dirección de memoria de programa en donde se encuentra éste (ciclo infinito de espera)
Debe notarse la ubicación de la rutina de interrupción a partir de la posición de memoria de programa 004h.


  índice de capítulo