microcontroladores - interrupciones para el pic16f84a en ensamblador

10
 INSTITUTO TECNOLÓGICO DE CUAUTLA MICROCONTROLADORES ING. GENARO ALFREDO ALCÁZAR MARÍN 1 Interrupciones en el PIC16F84A utilizando lenguaje ensamblador y MPLABX. Una interrupción consiste en un mecanismo por el cual un evento interno o externo puede interrumpir la ejecución de un programa en cualquier momento. A partir de entonces se produce automáticamente un salto a una subrutina de atención a la interrupción, ésta atiende inmediatamente el evento y luego la ejecución del programa retorna exactamente donde estaba en el momento de ser interrumpido, continuando su tarea justo donde la dejó. La interrupción tiene la característica de la inmediatez, nace de la necesidad de ejecutar una subrutina en el instante preciso y, por tanto, se considera una intervención urgente. Éste método es más eficaz que la técnica de lectura de entradas del microcontrolador (también llamada Polling), ya que el microcontrolador no perderá tiempo preguntando a la línea de entrada para leer el estado, sino que únicamente atenderá al periférico cuando éste se lo pida mediante la solicitud de interrupción. El PIC16F84A dispone de 4 posibles fuentes de interrupción: - Interrupción externa INT. Por activación del pin RB0/INT. - Interrupción RBI. Por el cambio de estado de en una o varias de las 4 líneas de más peso RB4:RB7 del puerto B. - Interrupción T0I. Por el desbordamiento del Timer 0. - Interrupción EEI. Por la finalización de la escritura en la EEPROM de datos. El funcionamiento de la interrupción se muestra en el siguiente diagrama: Figura 1. Funcionamiento de la i nterrupción. Programa Principal Inicio Fin Proceso X (Subrutina de atención a la interrupción). Interrupción

Upload: alfre2alcazar

Post on 07-Oct-2015

39 views

Category:

Documents


0 download

DESCRIPTION

En el presente documento, se presenta una breve descripción del funcionamiento de las interrupciones en los micorocontroladores PIC (PIC16F84A), utilizando lenguaje ensamblador y el MPLABX.

TRANSCRIPT

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    1

    Interrupciones en el PIC16F84A utilizando lenguaje ensamblador y MPLABX.

    Una interrupcin consiste en un mecanismo por el cual un evento interno o externo puede interrumpir la ejecucin de un programa en cualquier momento. A partir de entonces se produce automticamente un salto a una subrutina de atencin a la interrupcin, sta atiende inmediatamente el evento y luego la ejecucin del programa retorna exactamente donde estaba en el momento de ser interrumpido, continuando su tarea justo donde la dej. La interrupcin tiene la caracterstica de la inmediatez, nace de la necesidad de ejecutar una subrutina en el instante preciso y, por tanto, se considera una intervencin urgente.

    ste mtodo es ms eficaz que la tcnica de lectura de entradas del microcontrolador

    (tambin llamada Polling), ya que el microcontrolador no perder tiempo preguntando a la lnea de entrada para leer el estado, sino que nicamente atender al perifrico cuando ste se lo pida mediante la solicitud de interrupcin.

    El PIC16F84A dispone de 4 posibles fuentes de interrupcin: - Interrupcin externa INT. Por activacin del pin RB0/INT. - Interrupcin RBI. Por el cambio de estado de en una o varias de las 4 lneas de ms

    peso RB4:RB7 del puerto B. - Interrupcin T0I. Por el desbordamiento del Timer 0. - Interrupcin EEI. Por la finalizacin de la escritura en la EEPROM de datos. El funcionamiento de la interrupcin se muestra en el siguiente diagrama:

    Figura 1. Funcionamiento de la interrupcin.

    Programa Principal

    Inicio

    Fin

    Proceso X (Subrutina de atencin

    a la interrupcin). Interrupcin

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    2

    Por ejemplo, los registros y bits involucrados para configurar la interrupcin externa

    INT, se muestran a continuacin:

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    3

    Qu sucede cuando ocurre una interrupcin? Al ocurrir una interrupcin, el microcontrolador ejecuta los siguientes pasos de forma

    automtica:

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    4

    1. Se salva el valor actual del contador de programa (PC), guardando el valor del mismo,

    en un espacio de memoria del microcontrolador destinado para ello. 2. El bit GIE (Global Interrupt Enable, bit 7 registro INTCON) es puesto a 0, lo que

    prohbe que ocurra cualquier otra interrupcin. 3. El PC se carga con el valor 0x04, que es la posicin del vector de interrupcin. 4. Comienza a ejecutarse el programa de atencin a la interrupcin que se encuentra a

    partir de la direccin 0x04. Ejemplo 1: Utilizando el PIC16F84A (con un oscilador de cristal de cuarzo de 4MHz),

    tratar de encender/apagar un LED conectado en el pin RB1 del microcontrolador; para ello, habilite la interrupcin externa del pin RB0/INT y mediante un Push-Button N. A. conectado a RB0, realice la transicin de encendido/apagado y viceversa del LED (la interrupcin puede ocurrir de 0(H) a 1(L) o viceversa).

    A continuacin, se muestra el diagrama electrnico propuesto para el ejemplo 1:

    OSC1/CLKIN16

    RB0/INT 6RB1 7RB2 8RB3 9RB4 10RB5 11RB6 12RB7 13

    RA0 17RA1 18RA2 1RA3 2

    RA4/T0CKI 3

    OSC2/CLKOUT15

    MCLR4

    U1

    PIC16F84A

    X1

    CRYSTALFREQ=4MHz

    C122p

    C222p

    GND

    R110k

    GND

    VCC

    R210k

    GND

    VCC

    D1LED-GREEN

    R3220R

    GND

    Figura 2. Diagrama electrnico propuesto para el ejemplo 1.

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    5

    Por otra parte, se muestra el diagrama de flujo propuesto para el ejemplo anterior:

    Inicio

    *Configurar todo el puerto

    A como salida.

    *Configurar a RB0 como

    entrada y los dems pines

    (RB1-RB7) como salidas.

    Colocar a 1 el bit 6 del

    registro OPTION (para

    que la interrupcin

    externa ocurra de 0 a 1).

    Accesar al banco 1.

    Accesar al banco 0.

    Cargar el registro INTCON

    con el valor binario 10010000

    (Habilita la interrupcin

    externa y la declara como

    global).

    Colocar a 0 el pin RB1,

    para que el LED

    inicialmente se apague.

    Hacer que el PIC

    permanezca en modo

    Stand-By (Sleep) y slo

    "despierte" cuando

    ocurra la interrupcin.

    Fin

    Subrutina que se

    ejecuta cuando ocurre

    la interrupcin

    externa.

    El LED est

    encendido?

    Encender el LED

    Apagar LED

    Salir de la subrutina

    (instruccin RETFIE)

    SI

    NO

    Figura 3. Diagrama de flujo propuesto para el Ejemplo 1.

    El cdigo en lenguaje ensamblador (se compila con el MPLABX) y el diagrama del

    ejemplo 1, pueden ser descargados en el siguiente link:

    http://www.mediafire.com/download/zxec2l2rttg8qqr/Ejemplo_1.rar

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    6

    Ejemplo 2. Utilizando el PIC16F84A (con un oscilador de cristal de cuarzo de 4MHz)

    encender/apagar de forma autnoma, un LED conectado en el pin RA0 utilizando la interrupcin TOI (por el desbordamiento del Timer 0), cuyo tiempo de encendido o apagado sea aproximadamente de 1ms (ciclo de trabajo del 50%).

    En primer lugar, se identifican los registros y bits involucrados para configurar la interrupcin T0I (por el desbordamiento del Timer 0):

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    7

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    8

    Posteriormente, en la Figura 4, se muestra el diagrama de flujo propuesto para el

    Ejemplo 2:

    Figura 4. Diagrama de flujo propuesto para el Ejemplo 2.

    El diagrama y la simulacin del Ejemplo 2 se muestran a continuacin:

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    9

    Figura 5. Diagrama y simulacin para el Ejemplo 2.

    Como se muestra en la simulacin, el tiempo de encendido y apagado del LED es de 1

    ms aproximadamente, debido a lo siguiente: 1 1F(Oscilador/Cristal) 4,000,000 HzDemora de cada instruccin = = 1 s

    4 4

    =

    El Timer 0 est configurado para incrementarse una unidad cada 1 s, cuenta del 0 al

    255 y ocurre la interrupcin TMR0, cada vez que ocurre la interrupcin, la variable CONTADOR se decrementa en una unidad (previamente ha sido cargada con el valor 2 en decimal), cuando el contador llega a 0 se enciende o apaga el LED y la variable CONTADOR vuelve a cargarse con un 2 en decimal.

    Duracin del encendido o apagado del LED = 2(255 s)(CONTADOR) = 2(255 s)(2) = 1.02ms

    El cdigo en lenguaje ensamblador (se compila con el MPLABX) y el diagrama del

    ejemplo 1, pueden ser descargados en el siguiente link: http://www.mediafire.com/download/o3o0rsc4bhho23r/Ejemplo_2.rar

  • INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES

    ING. GENARO ALFREDO ALCZAR MARN

    10

    Referencias bibliogrficas:

    - PALACIOS, Enrique., REMIRO, Fernando y LPEZ, J. Lucas. MICROCONTROLADOR PIC16F84: Desarrollo de proyectos. 3ra. Edicin, Mxico: Editorial Alfaomega, Junio 2009.

    Referencias digitales:

    - Data-Sheet PIC16F84A, Microchip Technology Inc. (Ingls, E.U.) [En lnea] ltimo acceso: 21/Febrero/2015.

    - EL REGISTRO TMR0, un registro especial. GARCA, V. (Espaol) [En lnea] ltimo acceso: 21/Febrero/2015.

    Software utilizado para la elaboracin de ste documento:

    - Paint.NET v3.5.11 Descarga http://www.getpaint.net/download.html#download

    - Paquetera Proteus 8 SP0. Descarga http://www.labcenter.com/download/prodemo_download.cfm#professional

    - MPLABX para Microsoft Windows Descarga http://www.microchip.com/mplabx-ide-windows-installer

    - Smart Draw. Descarga http://www.smartdraw.com/

    - Windows 7 Home Basic SP1 de 64 bits.