Autor Tema: Interrupcion  (Leído 3056 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado hopa2007

  • PIC10
  • *
  • Mensajes: 10
Interrupcion
« en: 13 de Febrero de 2008, 07:17:39 »
Hola a todos, sou novo neste forum e gostaria de aprender como funciona interrupcions com pic.
Uso o 16f84 com osc 4mhz.
salute a todos.

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Interrupcion
« Respuesta #1 en: 13 de Febrero de 2008, 07:43:14 »
Saludo Hopa2007 y Bienvenido a nuestros Foro!
por favor pasate por aqui http://www.todopic.com.ar/foros/index.php?topic=13762.0

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Interrupcion
« Respuesta #2 en: 13 de Febrero de 2008, 14:19:49 »
Que lenguaje Usas para programar los PICs?
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado hopa2007

  • PIC10
  • *
  • Mensajes: 10
Re: Interrupcion
« Respuesta #3 en: 13 de Febrero de 2008, 21:37:08 »
Uso liguagem pic basic pro.
Preciso entender enable e disble, tmr, tmro, etc....
Alguem tem alguns exemplos....
Gracias.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Interrupcion
« Respuesta #4 en: 13 de Febrero de 2008, 23:23:10 »
En la pagina de Rentron encontraras o usando el buscador dentro de este subforo
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado hopa2007

  • PIC10
  • *
  • Mensajes: 10
Re: Interrupcion
« Respuesta #5 en: 15 de Febrero de 2008, 07:27:57 »
Desculpas amigo mas nao achei nada no rentron sobre interrupcion.
Será que nao tem alguma pagina que ensine...
gracias

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Interrupcion
« Respuesta #6 en: 19 de Febrero de 2008, 18:17:54 »
Hola

este es un ejemplo que hice en el cual cada vez que pasa un segundo se incrementa un contador que visualizo conun display de anodo común.

el segundo lo logro por medio de la interrupción por el timer0 y del uso de un par de registros. el código es este:

Código: [Seleccionar]
         DEFINE OSC 4


cont var byte
reg1 var byte
reg2 var byte
 
main:
OPTION_REG = %10000101
TRISB = 0
INTCON = %10100000
PORTB = 0
reg1 = 0
reg2 = 0

ON INTERRUPT GOTO myint ' Interrupt handler is myint

main1:
       PORTB = cont
       goto main1
       
DISABLE interrupt ' Disable interrupts in handler
myint: 
        reg1 = reg1 + 1
        if reg1 = 230 then
            reg2 = reg2 + 1
            reg1 = 0
            if reg2 = 200 then
                reg2 = 0
                cont = cont + 1
                if cont = 10 then
                cont = 0
                endif
            endif       
        endif
       
       
       
RESUME ' Return to main program
       
ENABLE  interrupt ' Enable interrupts after handler


este es un jemplo que habia hecho antes, que se encuentra en el foro de lordlafere aqui http://micros.mforos.com/1149902/6083638-interrupciones/

espero te sea de utilidad
« Última modificación: 19 de Febrero de 2008, 18:50:29 por PAOLA09 »

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Interrupcion
« Respuesta #7 en: 19 de Febrero de 2008, 21:13:08 »
Hola.
Amiga PAOLA09 hay algo que tener en cuenta en tu codigo y es que en ese codigo solo esta activada la interrupcion del tmr0 pero en el caso de haber mas interrupciones habilitadas por ejemplo RB0 o tmr1 entonces ese codigo de la interrupcion se ejecutara siempre que ocurra una interrupcion sea cual fuere, para evitar eso tendrias que chekar que flag de interrupcion esta activa, asi evitaras mal funcionamiento de tu programa, en la hoja de datos de cada pic encontraras que registro debes chekar para identificar la fuente de interrupcion.

Cualquier cosa pasa la voz. :)

Saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Interrupcion
« Respuesta #8 en: 20 de Febrero de 2008, 18:38:22 »
 :shock: :shock: :mrgreen:

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Interrupcion
« Respuesta #9 en: 20 de Febrero de 2008, 19:55:06 »
Un trozo de codigo en Pic Basic del PSI que controla el flag del timer1 y el modulo serie uar.

Código: FreeBasic
  1. On Interrupt  'desactiva las interrupciones
  2. Save System  'Guarda los valores del sistema
  3. '*****************************base de tiempos********************************************
  4.         If PIR1.TMR1IF = 1 Then  'comprueba que la interrupcion la proboco el timer1
  5.                 TMR1H = 0xf8  'recarga el contador del timer1 para que desborde pasado 1mSeg, byte alto
  6.                 TMR1L = 0x2f  'recarga el contador del timer1 para que desborde pasado 1mSeg, byte bajo
  7.                 timer_base = timer_base + 1  'base patron
  8.                 timer_1ms = timer_1ms + 1  'contador para control del timer_1ms
  9.                 If timer1_ms < timer1_ms_tiempo Then timer1_ms = timer1_ms + 1  'contador para control del timer1_ms
  10.                 If timer2_ms < timer2_ms_tiempo Then timer2_ms = timer2_ms + 1  'contador para control del timer2_ms
  11.                 If timer3_ms < timer3_ms_tiempo Then timer3_ms = timer3_ms + 1  'contador para control del timer3_ms
  12.                 If timer_base >= timer_base_tiempo Then  'usa la base patron para retrazar la rutina 100mSeg.
  13.                         If timer1_100ms < timer1_100ms_tiempo Then timer1_100ms = timer1_100ms + 1  'contador para control...
  14.                         If timer2_100ms < timer2_100ms_tiempo Then timer2_100ms = timer2_100ms + 1  'contador para control...
  15.                         If timer3_100ms < timer3_100ms_tiempo Then timer3_100ms = timer3_100ms + 1  'contador para control...
  16.                         timer_base = 0  'reset a la base timer
  17.                 Endif
  18.                 PIR1.TMR1IF = 0  'borra el bit de salto del timer1
  19.         Endif
  20. '*****************************BUFER PUERTO SERIE****************************************
  21.         If PIR1.RCIF = 1 Then  'comprueba que esta la interrupcion activa del modulo USART
  22.                 If uart_imagen(uart) = 0 Then  'comprueba que la posicion esta vacia
  23.                         uart_imagen(uart) = 1  'indica que hay dato en el bufer de entrada
  24.                         bufer = 1  'indica que el bufer tine datos
  25.                         Hserget uart_bufer(uart)  'carga el dato en el bufer
  26.                         uart = uart + 1  'indica cual sera la posicion siguiente del bufer
  27.                         If uart >= n_uart Then uart = 0  'comprueba el final del bufer y lo inicializa
  28.                 Else
  29.                         Hserget uart_bufer(n_uart)  'descarga la uart para que no se bloquee porque el bufer de entrada esta lleno
  30.                 Endif
  31.                 PIR1.RCIF = 0  'borra el bit de salto del Rx, esto ya lo hace de forma automatica Hserget
  32.         Endif
  33. Resume  'activa las interrupciones y retorna al curso normal del programa antes del salto

Como se puede verificar se comprueba el flag activo para determinar quien
provoco la interrupcion.
Saludos desde Granada, España.


 

anything