interrupciones en el pic16f84a arquitectura de computadoras

Upload: tenshikiller-arthuro-castro

Post on 27-Feb-2018

235 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    1/19

    Nombre del Alumno:Angel Arturo Rendon Castro

    Nombre del Profesor:

    Francisco Javier Ramrez Sandoval

    Nombre de la Materia:

    Arquitectura de Computadoras

    Interrupciones en PIC16F84A

    Semestre: Quinto

    Grupo: B

    Nmero de control: 13670019

    Carrera: Ingeniera en Sistemas Computacionales

    Horario: LunesViernes; 2:00p.m3:00pm

    Ciclo escolar: AgostoDiciembre 2015

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    2/19

    NDICE

    Marco terico......................................................................................... 3

    Definicin .............................................................................................3

    Funcionamiento ...................................................................................3

    Fuentes ................................................................................................4

    Interrupciones en el PIC16F84A .........................................................4

    Tipos de Interrupciones en el PIC16F84A ..........................................5

    1.-Interrupciones Externas..............................................................5

    2.-Interrupcin por finalizacin de la temporizacin .......................6

    3.-Interrupcin por cambio en el puerto RB. ..................................6

    4.-Interrupcin por finalizacin de la escritura. ..............................6

    Aplicaciones ..........................................................................................7

    Ejemplos ................................................................................................8

    Ejemplo 1(Programacin en MPLAB) ..................................................8

    Ejemplo 2(Programacin en MPLAB) ................................................11

    Ejemplo 3(Programacin en C) .........................................................13

    Conclusin........................................................................................... 19

    Bibliografa ..........................................................................................19

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    3/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    3

    Marco terico

    Definicin:El sistema de interrupciones consiste en un mecanismo por el cual un evento interno o

    externo, asncrono respecto del programa, tambin visto como un aviso provocado por un

    mdulo del PIC, por un cambio en el estado de un pin o un recordatorio de que ha pasadoun cierto tiempo. Como su nombre indica este aviso interrumpir la tarea que se est

    haciendo en ese momento y pasaremos a ejecutar una rutina de servicio o gestin de la

    interrupcin.

    Funcionamiento:Las interrupciones se comportan casi exactamente igual que las subrutinas. En uno de los

    registros de control del sistema de interrupciones existe un bit de habilitacin general de

    interrupciones GIE, que debe ser programado en 1 para que las interrupciones puedan

    actuar.Al generarse la seal de interrupcin, el microcontrolador termina primero la

    ejecucin de la instruccin que se est procesando en ese momento, guarda en el STACK

    PILA la direccin de memoria de cdigo de la siguiente instruccin y posteriormente hace

    un llamado a la "subrutina de atencin de interrupciones", cuyo inicio siempre se encuentra

    en la direccin 04H de la memoria de cdigo.

    Imagen 1.- funcionamiento de una interrupcin bsica

    Al producirse una interrupcin, este bit se borra automticamente para evitar nuevasinterrupciones. La instruccin RETFIE que se utiliza al final de la rutina de interrupcin, es

    idntica a un retorno de subrutina, salvo que adems coloca en uno automticamente el bit

    GIE volviendo a habilitar las interrupciones. Dentro de la rutina de interrupcin, el programa

    deber probar el estado de los flags de interrupcin de cada una de las fuentes habilitadas,

    para detectar cual fue la que caus la interrupcin y as decidir qu accin tomar.

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    4/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    4

    Para la ejecucin que ste produciendo automticamente un salto a una subrutina de

    atencin, de manera que pueda atender inmediatamente el evento, y retomar luego la

    ejecucin del programa exactamente en donde estaba en el momento de ser interrumpido.

    Este mecanismo es muy til por ejemplo para el manejo de timers o rutinas que deben

    repetirse peridicamente (refresh de display, antirebote de teclado, etc.), deteccin depulsos externos, recepcin de datos, etc.

    FuentesLa seal que produce la interrupcin es en realidad una sola, que resulta de la combinacin

    de todas las fuentes posibles y de los bits de habilitacin. Existen dos grupos de fuentes,

    unas que se habilitan con solo colocar en uno el bit GIE, y otras que adems necesitan que

    este puesto a uno el bit PEIE. Adems, cada fuente de interrupciones tiene su respectivo

    bit de habilitacin individual (Las fuentes de interrupcin varan con cada versin de PIC).

    Interrupciones en el PIC16F84A

    El PIC16F84A tiene cuatro recursos de interrupciones:

    Pin de Interrupcin externa RB0/INT

    Interrupcin de desbordamiento TMR0

    Interrupciones de cambio PORTB(pines RB7:RB4)

    Finalizacin de escritura en la EEPROM de datos

    El registro 0Bh o INTCON contiene las banderas de las interrupciones INT, cambio en el

    puerto B y finalizacin del conteo del TMRO, al igual que el control para habilitar o

    deshabilitar cada una de las fuentes de interrupcin, incluida la de escritura en memoria

    EEPROM. Slo la bandera de finalizacin de la escritura reside en el registro 88h

    (EECON1).

    Si el bit GIE (Global Interrupt Enable) se coloca en 0, deshabilita todas las interrupciones.

    Cuando una interrupcin es atendida, el bit GIE se coloca en 0 automticamente para evitar

    interferencias con otras interrupciones que se pudieran presentar, la direccin de retorno

    se coloca en la pila y el PC se carga con la direccin 04h. Una vez en la rutina de servicio,

    la fuente de la interrupcin se puede determinar examinando las banderas de interrupcin.

    La bandera respectiva se debe colocar, por software, en cero antes de regresar de la

    interrupcin, para evitar que se vuelva a detectar nuevamente la misma interrupcin.

    La instruccin RETFIE permite al usuario retornar de la interrupcin, a la vez que habilita

    de nuevo las interrupciones, al colocar el bit GIE en uno. Debe tenerse presente quesolamente el contador de programa es puesto en la pila al atenderse la interrupcin; por lo

    tanto, es conveniente que el programador tenga cuidado con el registro de estados y el de

    trabajo, ya que se pueden producir resultados inesperados si dentro de ella se modifican.

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    5/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    5

    Imagen 2.- Lgica de interrupciones en el PIC16F84A

    Tipos de Interrupciones en el PIC16F84A

    1.-Interrupcin externa

    Acta sobre el pin RB0/INT y se puede configurar para activarse con el flanco de subida o

    el de bajada, de acuerdo al bit INTEDG (OPTION). Cuando se presenta un flanco vlido

    en el pin INT, la bandera INTF (INTCON) se coloca en uno. La interrupcin se puede

    deshabilitar colocando el bit de control INTE (INTCON) en cero. Cuando se atiende la

    interrupcin, a travs de la rutina de servicio, INTF se debe colocar en cero antes de

    regresar al programa principal. La interrupcin puede reactivar al microcontrolador despus

    de la instruccin SLEEP, si previamente el bit INTE fue habilitado.

    WAKE-UP usando interrupciones:

    Cuando las interrupciones globales son desactivadas (GIE limpiado o en cero) y alguna

    fuente de interrupcin tiene tanto su bit de interrupcin habilitado y bit de indicacin de

    interrupcin, una de las siguientes puede ocurrir:

    Si la interrupcin ocurre antes de la ejecucin de una instruccin sleep, la instruccin

    sleep va completarse con un NOP, por lo tanto, el WDT y WDT postscaler no sernvaciados, el bit TO negada no se ajustara y los bits negados PD no sern vaciados.

    Si la interrupcin ocurre durante o despus de una ejecucin de una instruccin

    sleep, el dispositivo va inmediatamente a ser despertado del sleep. La instruccin

    sleep va a ser ejecutada completamente antes de despertar, por lo tanto, el WDT y

    WDT postscaler sern vaciados, el bit TO negada se ajustara y los bits negados PD

    sern vaciados

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    6/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    6

    Incluso si los bits de marca fueron marcados antes de la ejecucin de una instruccin sleep,

    puede ser posible para los bits de marcas el hacerse fijados antes de la ejecucin de la

    instruccin sleep se complete para determinar una instruccin sleep ejecutada, prueba el

    bit PD negado, si el bit PD negado est fijado, la instruccin sleep fue ejecutada como un

    NOP.

    Para asegurar que el WDT se vaca una instruccin CLRWDT debera ser ejecutada antes

    de una instruccin sleep.

    2.-Interrupcin por finalizacin de la temporizacin.

    La superacin del conteo mximo (0FFh) en el TMR0 colocar el bit TOIF en uno

    (INTCON). El bit de control respectivo es TOIE (INTCON).

    Interrupcin Timer0

    La interrupcin TMR0 es generada cuando el registro TMR0 se desborda desde el FFh al

    00h. Este desbordamiento ajusta el bit T0IF (INTCON).La interrupcin puede serenmascarada por el borrado del bit T0IE (INTCON).El bit T0IF debe ser borrado en el

    software por el mdulo de servicio de interrupcin de rutina Timer0 antes de volver a

    habilitar esta interrupcin. La interrupcin TMR0 no puede despertar el procesador del sleep

    desde que el timer es apagado durante el sleep.

    Imagen 4.-diagrama de bloque del timer0

    3.-Interrupcin por cambio en el puerto RB.

    Un cambio en los pines del puerto B colocar en uno el bit RBIF (INTCON). El bit

    de control respectivo es RBIE (INTCON).

    4.-Interrupcin por finalizacin de la escritura.

    Cuando la escritura de un dato en la EEPROM finaliza, se coloca en 1 el bit EEIF

    (EECON1). El bit de control respectivo es EEIE (INTCON)

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    7/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    7

    Imagen 3.-Registro INTCON

    AplicacionesUna interrupcin es un aviso provocado por un mdulo del PIC, por un cambio

    en el estado de un pin o un recordatorio de que ha pasado un cierto tiempo.El

    uso de las interrupciones en la programacin de PICs trae consigo muchos beneficios ya

    que est al pendiente de los eventos que procesa el PIC. Estas interrupciones tienen una

    subrutina que permite darle solucin y seguir con el proceso normal del programa principal.

    Algunas de sus aplicaciones son tales como:

    Implementacin de bases de tiempo para relojes de tiempo real.

    Temporizadores industriales.

    Control de riego automtico

    Control de puertas automticas del metro

    Control de robots de mltiples propsitos

    Y en teora nos ayuda a poder manejar muchos tipos de eventos sin estar

    pendientes de ello por lo cual cuentan con un gran rango de aplicacin.

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    8/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    8

    Ejemplos

    Ejemplo 1(Programacin en MPLAB)Este ejemplo consiste en un programa que prepara todo para el encendido de un LED que

    conectaremos en RB1, slo prepararemos todo, porque luego haremos dormir al micro

    hasta que interrumpamos su sueo para atender un pulsador conectado a RB0/INT,momento en el cual deber encender el LED, y regresar a dormir nuevamente, y cuando se

    vuelva a presionar el pulsador har que lo apague y otra vez lo despacharemos a dormir.

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    9/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    9

    ORG 0x04

    GOTO ISR

    La primera lnea es el vector de interrupcin, y cuando sta se produzca, el cdigo de

    programa apuntar a esta direccin y continuar con la siguiente instruccin, es decir

    GOTO ISR, la cual es un salto a ISR (Rutina de Servicio de Interrupciones) para atender

    dicha interrupcin. Configuramos el puerto B, como habrs notado, hemos configurado

    RB0/INT como entrada y el resto de los bits como salida, luego...

    BCF OPTION_REG,6 seleccionamos flanco descendente

    En la pgina anterior dijimos que podamos seleccionar el flanco con el cual se producir la

    interrupcin, pues eso es lo que estamos haciendo con esta instruccin, entonces vamos

    al registro OPTION y ponemos el BIT6 a "0" de este modo la interrupcin se producir

    cuando suelten el pulsador.

    Ahora pasamos a lo ms interesante, la habilitacin de las interrupciones...

    BSF INTCON,GIE ; habilitamos todas las interrupciones

    BSF INTCON,INTE ; que sean interrupciones externas

    Observa que la habilitacin de interrupciones se hace en el banco0 ya que el Registro

    INTCON se encuentra en este banco. Bien, En la primera lnea hacemos una habilitacin

    general de todas las interrupciones, hacemos GIE=1, en la segunda lnea, habilitamos

    interrupciones externas, hacemos INTE=1, recuerda que la bandera para la interrupcin por

    el pin RB0/INT es INTF, no lo olvides, pues esta cambiar cuando la interrupcin se

    produzca y luego de atenderla deberemos volverla a cero.

    Lo que viene ahora es simplemente limpiar el puerto B, y luego...

    sueo SLEEP

    GOTO sueo

    SLEEP es la instruccin que pone al micro en estado de bajo consumo, es como que todo

    se detiene y ste pasa a modo de reposo, (consulta el set de instrucciones para mayor

    detalle...) deb haber puesto simplemente SLEEP pero veamos, si se ejecutara la

    instruccin SLEEP el micro entrara en reposo hasta que se produce la interrupcin, lo cual

    dijimos anteriormente que es como una llamada (un call), cuando regrese se encontrar

    con GOTO sueo y lo volveremos a dormir.

    Te imaginas...??? si no pusiramos el GOTO sueo, cuando regrese de la interrupcin

    pasara a la ISR (Rutina de servicio de interrupcin), y lo peor de todo, es que lo hara sin

    que se produzca la interrupcin, gran dolor de cabeza...!!!Pero bueno, ahora nos quedamos

    a dormir con el micro hasta que un chico traviezo active el pulsador de RB0/INT ...Felices

    sueosssss...!!!!Chico malo...!!!, que siempre me pones a prueba, Ya veo que no pudiste

    esperar y presionaste el pulsador...De acuerdo... sabes a donde me llevaste...??? justo a...

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    10/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    10

    ORG 0x04

    GOTO ISR

    Entonces vamos hacia all, ahora te dar para que tengas, guardes y repartas...Lo que

    viene, es la rutina de servicio de interrupcin ISR y comenzamos con un...

    ISR BTFSC PORTB,0 ; verificamos que suelten el pulsador

    GOTO ISR

    ISRno es una instruccin, sino la etiqueta que atiende la interrupcin (pude haber puesto

    rut_serv u otra cosa, en fin...). ConBTFSC PORTB,0, prevenimos los rebotes, no s si era

    necesario ya que seleccionamos flanco descendente para este pin, pero por si las moscas

    lo puse, en realidad suele pasar que cuando se libera el pulsador se genera una pequea

    chispa, la cual ya conocemos como rebote elctrico, slo lo puse por prevencin. Ahora si

    atenderemos la interrupcin, comenzando por...

    BTFSC PORTB,1

    BTFSC PORTB,1 Es probar si el segundo bit (Bit1 de PORTB) est en 0 , es decir si el LED

    est apagado y saltar un lnea si es as.

    En elecciones anteriores utilizamos un registro llamado cont con el cual sabamos si el LED

    estaba prendido o apagado, y aqu tienes una forma de optimizar ese cdigo, espero que

    no te pierdas con esto...!!!

    Bien... como recin iniciamos, el LED est apagado, por lo tanto saltamos una lnea y

    pasamos a...

    BSF PORTB,1

    Es decir hacemos RB1=1 (prendemos el LED). Perfecto, la interrupcin ya fue atendida,

    pero ahora debemos habilitarla de nuevo as permitimos que se vuelva a ejecutar, y como

    tenemos un nico pulsador el cual me cambi la bandera INTF, deberemos borrarla

    nuevamente, as es que...

    BCF INTCON,INTF ; borro bandera de interrupcin

    Obviamente al producirse la interrupcin se hizo GIE=0 para darnos lugar a atenderla,

    entonces...

    RETFIE

    y ahora GIE=1, las interrupciones estn nuevamente habilitadas la bandera deRB0/INT est

    lista para una nueva interrupcin y retornamos a ...

    sueo SLEEP

    GOTO sueo

    y esperar a que pulses RB0, pues si ya lo hiciste habrs ido por segunda vez a ...

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    11/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    11

    ORG 0x04

    GOTO ISR

    Prevenimos los rebotes y luego vamos a...

    BTFSC PORTB,1

    Es decir, prueba y salta si el Bit1 de PORTB es cero, y como esta vez el LED est prendido...

    simplemente hars un...

    GOTO off_led ; ire a off_led para apagarlo

    Un salto a la etiqueta off_led...

    off_led BCF PORTB,1 ; sino, apago el LED

    No se si requiere explicacin pero bueno, pones a cero el Bit1 de PORTB. Finalmente...

    BCF INTCON,INTF ; borro bandera de interrupcin

    RETFIE

    Ejemplo 2(Programacin en MPLAB)

    El siguiente programa sirve para generar una base de tiempo de un segundo por

    interrupciones enciende y apaga en bit RB7, se usa el temporizador TRM0 y su

    preescalador para generar 65.536 milisegundos por ciclo de interrupcin

    ; ARCHIVO EJEMPLO1INTERRUPCIONES.ASM

    ; CODIGO FUENTE PARA EL MICROCONTROLADOR PIC16F84

    ; PROGRAMA PARA GENERAR UNA BASE DE TIEMPO DE UN SEGUNDO; POR INTERRUPCIONES. ENCIENDE Y APAGA EL BIT RB7; SE USA EL TEMPORIZADOR TMR0 Y SU PREESCALADOR PARA GENERAR; 65.536 MILISEGUNDOS POR CADA CICLO DE INTERRUPCION.; 15 CICLOS ES APROXIMADAMENTE 1 SEGUNDO.

    ; VERSION PARA OSCILADOR CRISTAL 4 MHZ

    ; CPU configuration; (It's a 16F84, XT OSCILADOR; watchdog timer off, power-up timer on)

    processor 16f84include

    __config _XT_OSC & _WDT_OFF & _PWRTE_ON

    #DEFINE BANCO0 BCF STATUS,RP0#DEFINE BANCO1 BSF STATUS,RP0

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    12/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    12

    CONT1 EQU H'20' ;CONTADOR DE CICLOS DE 65.5 MILISEGUNDOS.;15 CICLOS ES APROX. UN SEGUNDO

    ;aqu inicia el programa

    org H'0'inicio goto begin ;salta a inicio del programa

    org H'4' ;subrutina de interrupcin en la direccin4int BANCO0

    clrf TMR0 ;inicializa TMR0bcf INTCON,T0IF ;apaga bandera de overflow del TMR0incf CONT1,f ;incrementa contador de 65.5 ms.movlw D'15'subwf CONT1,w ;prueba si la cuenta es igual a 15btfss STATUS,Z ;bandera Z encendida?retfie ;cuenta diferente a 15, regresaBTFSS PORTB,7 ;LED ENCENDIDO?GOTO ENCBCF PORTB,7 ;APAGA LEDCLRF CONT1retfie

    ENC BSF PORTB,7 ;ENCIENDE LEDCLRF CONT1retfie

    begin clrf CONT1 ;programa principalBANCO1movlw B'00011110'

    movwf TRISA ;INICIALIZA ENTRADAS Y SALIDAS PUERTO Aclrf TRISB ;PUERTO B SON SALIDASmovlw B'00000111' ;ACTIVA TEMPORIZADOR Y CLOCK INTERNOmovwf OPTION_REG ;PREESCALADOR DIVIDE ENTRE 256BANCO0clrf PORTBBCF PORTA,0movlw D'00'movwf TMR0 ;INICIALIZA TEMPORIZADOR=00bsf INTCON,GIE ;habilita interrupciones globalbsf INTCON,T0IE ;activa interrupcin decontador

    sigue goto sigueend

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    13/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    13

    Ejemplo 3 (programacin en C)

    En este ejemplo vamos a ver el uso de la interrupcin externa a travs de la patilla RB0/INT,

    para ello vamos a utilizar el PIC 16f84A, aunque si utilizas otro PIC de mayores prestaciones

    el proceso ser el mismo.

    Vamos a ver las patillas y los registros del PIC implicados en el tema:

    En cuanto a los pines del PIC la seal externa para producir la interrupcin en el PIC ser atravs de de la patilla 6 y se podr determinar por software que flanco de la seal producir

    la interrupcin, el de subida (cuando la seal pasa de un nivel 0 a 1) el de bajada (cuando

    pasa de 1 a 0).

    Vamos a ver ahora los registros especficos (SFR) que nos proporciona el PIC para el control

    de esta interrupcin.

    INTEDG: flanco activo interrupcin externa.

    1- la interrupcin se producir en el flanco ascendente.

    0- la interrupcin se producir en el flanco descendente.

    GIE: (Habilita las interrupciones globalmente). Este bit permite que cualquier

    interrupcin sea posible. Para poder usar cualquier interrupcin hay que habilitarla

    globalmente e individualmente.

    INTE: Permiso de interrupcin por activacin de la patilla RB0/INT

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    14/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    14

    1- permite la interrupcin

    0- prohbe la interrupcin

    INTF: bit de sealizacin (solo lectura) de interrupcin externa RB0/INT

    Para ver como CCS gestiona estos recursos, vamos a crear el siguiente circuito en Proteus:

    El circuito es una alarma sencilla, lo que tiene que hacer es lo siguiente:

    Cuando se pulse el sensor de alarma y no est cerrado el interruptor de desactivacin de

    alarma, se pondr a uno la patilla RB7 del PIC el cual polarizar directamente el transistor

    Q1, que a su vez activar el Micro-rel RL1 (Rel auxiliar), este a su vez activar un rel de

    potencia que activar una alarma conectada a 220V.

    Cuando queremos activar una carga con una potencia importante, es necesario adaptar el

    circuito de salida para poder controlar con los pocos miliamperios que nos da el PIC la carga

    que queramos. Hay muchas formas de hacer esto, se puede utilizar un par de transistores

    en configuracin Darlington y atacar directamente el rel de potencia no utilizar rels y

    controlar la carga por medio de un triac, lo podis hacer como queris.

    Una vez activada la alarma, permanecer activa hasta que no la desactivemos por medio del

    interruptor de desactivacin de alarma (interruptor cerrado).

    Ahora vamos a crear el programa en C, para ello vamos a crear un nuevo proyecto a travs

    del asistente, de esta forma vamos viendo las posibilidades que nos da esta herramienta,

    configuraremos las opciones segn se muestra en las siguientes figuras:

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    15/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    15

    Los dems valores dejamos los de por defecto.

    Una vez creada la plantilla con el asistente, aadiremos las siguientes lneas de cdigo para

    hacer nuestro programa funcional:

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    16/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    16

    Nota:el asistente como ya he comentado en mas de alguna ocasin, genera dos archivos

    de cdigo fuente, el .h y el .c esta es la forma correcta de trabajar en C, la famosa frase de

    divide y vencers es perfectamente aplicable a la programacin en C, si sigo utilizando un

    solo archivo para todo el cdigo es porque de momento los archivos son muy pequeos y me

    resulta ms cmodo incluir una imagen en el sitio en vez de dos. Realmente cuando tengamos

    un proyecto grande, estar formado por varios archivos .h y .c

    Comentario del programa

    Al igual que hacamos con la directiva #bytepara mapear un registro en la memoria RAM y

    utilizarlo como una variable ms, con la directiva #bit identificador registro.bitpodemos

    mapear un bit en concreto de un registro. Aunque ya vimos que CCS incluye funciones parael manejo de bits, est opcin es muy cmoda de utilizar y har que nuestro cdigo sea ms

    portable para utilizar en otros compiladores.

    #int_EXT

    void EXT_isr(void)

    {

    //pon aqu el cdigo de la interruptor

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    17/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    17

    }

    Esta parte como ya sabis nos la crea el asistente e incluye la funcin de interrupcin, donde

    tendremos que incluir el cdigo que queremos que se ejecute, cuando se active la

    interrupcin externa por la patilla RB0. En nuestro caso lo que hace es comprobar si el

    interruptor de desactivacin est abierto, si es as, activar la alarma conectada a RB7. Y

    permanecer en un bucle infinito hasta que la desactivemos por medio del interruptor.

    Si el interruptor est cerrado y pulsamos el sensor de alarma la interrupcin se producir

    igualmente, pero al no cumplirse la condicin del if no ejecutar ninguna sentencia.

    Dentro del bloque principal main, tenemos las sentencias que habilitan las interrupciones

    globales y la particular a RB0.

    enable_interrupts(GLOBAL);

    globalenable_interrupts(INT_EXT);

    Nota: Por defecto la activacin de la interrupcin se produce en el flanco de subida, si

    queremos que sea en el flanco descendente podemos hacerlo por medio de la funcin:

    ext_int_edge(flanco)

    Ejemplo:

    ext_int_edge(L_TO_H);--> flanco de subida.

    ext_int_edge(H_TO_L);--> flanco de bajada.

    Si no queremos utilizar las funciones de CCS. Podemos modificar directamente el bit INTEDG

    Ejemplo:

    #bit INTEDG=0x81.6

    INTEDG=1;//flanco ascendente

    INTEDG=0;//flanco descendente

    Para ver como realmente CCS maneja estos registros lo podemos ver si ejecutamos el

    programa paso a paso en Proteus, si paramos la simulacin en el bucle while de la funcin

    principal obtendremos lo que se muestra en la figura de abajo. Donde se puede ver el estado

    de los bits de configuracin:

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    18/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    18

    INTEDG=1(Flanco de activacin ascendente, el que tiene por defecto)

    GIE= 1(Permitidas las interrupciones globales)

    INTE=1 (Permiso de activacin interrupcin RB0/INT)

    INTF=0 (Sealizacin de interrupcin)

    Si ponemos un Breakpoint en el if que hay dentro de la rutina de interrupcin y pulsamos el

    sensor de alarma para activar la interrupcin los valores de los bits sern estos:

    INTEDG=1(Flanco de activacin ascendente, el que tiene por defecto)

    GIE= 0(No permite otra interrupcin mientras no se salga de esta)

    INTE=1(Permiso de activacin interrupcin RB0/INT, da igual que este a 1 por que

    la global est a 0)

    INTF= 1(Sealizacin de interrupcin)

    Al salir de la interrupcin los bits de configuracin vuelven a quedar como al principio, a la

    espera de que se vuelva a producir otra interrupcin.

    El bit de sealizacin INTF no lo hemos usado en este ejemplo, pero en cualquier otro ejemplo

    podremos leer su valor y utilizarlo para lo que queramos.

  • 7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras

    19/19

    Instituto Tecnolgico de Iguala

    Arquitectura de Computadoras

    19

    ConclusinA travs de esta investigacin puedo determinar la importancia de las interrupciones en el

    manejo de un PIC que en este caso es el F1684A, para mi esta importancia reside en el

    programar el PIC para atender varios eventos, eventos de los cuales no conocemos cuando

    o como ocurrirn pero se tienen en cuenta en la programacin ya que se sabe que van a

    ocurrir y tener una subrutina de cdigo necesaria para atender la interrupcin de forma

    ptima, si bien con lo expuesto en este documento se pueden determinar los diferentes

    tipos de interrupciones que existen para nuestro PIC adems de cmo se modifican las

    diferentes configuraciones para cada tipo de interrupcin ya que una interrupcin no solo

    comprende a un evento en especfico esperado pero gracias a las especificaciones

    incluidas en este documento sobre el pic se alcanza a comprender un poco el panorama

    aunado a ejemplos que fortalecen en entendimiento de las interrupciones, todo esto en

    conjunto compone una gran herramienta para el programador, en este caso encuentro esta

    herramienta de gran utilidad para diversas aplicaciones que con ms estudio y

    conocimientos que completen mi aprendizaje me permitan elaborar sistemas de control

    como por ejemplo de riego automtico, en este ejemplo encuentro un uso para lasinterrupciones de forma que si en su proceso de riego a la hora de activar un sistema

    hidrulico para el riego, cuenta con un contenedor con un sensor de deteccin de nivel de

    agua que puede activar una bomba para su llenado automtico, se mide el nivel de agua,

    si es bajo se interrumpa la accin de riego si es que se est llevando acabo y se activen

    unas marcas que permitan la activacin de la bomba de agua que abastezca el contenedor

    y al llegar al indicador de nivel mximo acabe la subrutina contine con la funcin de riego.

    Siendo as encuentro las interrupciones de gran ayuda y con un amplio rango de

    aplicaciones en distintas ramas y de las cuales puedo sacar un gran provecho en un futuro

    cercano que me permitan integrar todos mis conocimientos en proyectos innovadores.

    BibliografaRecursos impresos:

    PIC16F84A Data-Sheet,Microchip Technology Inc,2001.

    Recursos web:

    AquiHayapuntes-biblioman 25 Noviembre 2013

    www.aquihayapuntes.com

    tutoriales PIC- ANTONIO S. 22 DE JUNIO DE 2012

    picfernalia.blogspot.mx

    Ero-PIC- de rueda luis 2007

    perso.wanadoo.es

    PIC 16F84 una gua para el aprendizaje-Luis Galeano Ivan De Giacomi Jabet Sanchez 2008

    entrrnadorpic16f84.wordpress.com/

    Punto Flotante S.A.- Punto Flotante S.A. 2004

    www.puntoflotante.net

    El PIC16F84A Curso avanzado de Microcontroladores PIC- Cekit

    http://www.utp.edu.co/

    Are you reading the datasheet? Siddhart 2013

    http://embedjournal.com/