Autor Tema: Timer por RB0 PIC16f84a a 4mhz  (Leído 2965 veces)

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

Desconectado dagoh73

  • PIC10
  • *
  • Mensajes: 13
Timer por RB0 PIC16f84a a 4mhz
« en: 11 de Enero de 2010, 10:03:03 »
Hola. Tengo un  problema con la interrupcion por rbo en flanco de bajada. ES un timer para tres tiempos 30s 45s y 60s que se configura con un Jumper .El programa funciona bien si saco las tres lineas que estan con comillas, sino funciona bien un par de veces y se cuelga. Creo que no meti la pata en nada. Si alguien me puede esplicar el problema se lo agradeceria, por que esta escapando de todas mis concluciones. Gracias.


   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
      LIST P=16F84A
      #include<p16f84a.inc>


#DEFINE  SALIDA      PORTA,.2         
#DEFINE  PULSADOR   PORTB,.0         ; Línea donde se conecta el pulsador.
      ORG      .0
      GOTO      INICIO
      ORG      .4
      GOTO      SERVICIOINTERRUPCION



INICIO      BSF           STATUS,RP0
      movlw      b'11011'         
         movwf      TRISA
      bsf      PULSADOR
             movwf      TRISB
      bcf      OPTION_REG,NOT_RBPU   ; Se activan las resistencias de Pull-Up del Puerto B.
      bcf      OPTION_REG,INTEDG   ; Interrupción INT activa por flanco de bajada.
      bcf      STATUS,RP0      ; Acceso banco 0.
      movlw      b'10010000'      ; Habilita las interrupciones INT, RBI y la
      movwf      INTCON         ; general GIE.      
      BCF      SALIDA
      

PRINCIPAL   SLEEP
      GOTO      PRINCIPAL

SERVICIOINTERRUPCION
   

      ;CALL      Retardo_20ms            ;retardo mayor no anda
      ;BTFSC      PULSADOR
      ;GOTO      PRINCIPAL
      BTFSC      PORTA,.1
      GOTO      SEG30
      BTFSC      PORTA,.3
      GOTO      SEG45
      GOTO      SEG60
      
SEG30      BSF      SALIDA
         CALL      Retardo_20s
      CALL      Retardo_10s
      GOTO      FININTERRUPCION
      
SEG45      BSF      SALIDA
         CALL      Retardo_20s
      CALL      Retardo_20s
      CALL      Retardo_5s
      GOTO      FININTERRUPCION

SEG60      BSF      SALIDA
         CALL      Retardo_20s
      CALL      Retardo_20s
      CALL      Retardo_20s
      GOTO      FININTERRUPCION

FININTERRUPCION
      
      BCF      SALIDA         ;desactiva rele
      bcf      INTCON,INTF      ; interrupción.
      
      retfie
      

      #INCLUDE<RETARDOS.INC>
      end

Desconectado dagoh73

  • PIC10
  • *
  • Mensajes: 13
Re: Timer por RB0 PIC16f84a a 4mhz
« Respuesta #1 en: 11 de Enero de 2010, 10:07:40 »
Disculpen no son con comilla son con punto y coma las tres despues del serviciointerrupcion.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Timer por RB0 PIC16f84a a 4mhz
« Respuesta #2 en: 11 de Enero de 2010, 11:57:50 »
No puedes usar goto Principal dentro de la interrupción, sino retfie, para que se retorne el valor de PC (Contador de programa) y se vuelva a setear el bit GIE. Si retorna de esa manera al ocurrir algunas interrupciones hay overflow de stack.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado dagoh73

  • PIC10
  • *
  • Mensajes: 13
Re: Timer por RB0 PIC16f84a a 4mhz
« Respuesta #3 en: 11 de Enero de 2010, 14:23:54 »
disculpa a ver si te entendi, despues del Sleep no poner Goto principal, sino retfie solamente.

Entonces quedaria

       principal    sleep
                        retfie

 
O sea que se produce la interrupcion, la procesa retorna de la interrupcion con retfie al paso siguiente de sleep y el retfie que sigue va a buscar la ultima direccion guardada en la pila y lo manda a sleep de nuevo y lo deja durmiendo. Esta bien interpretada la solucion para futuros proyectos por que lo probe y anda de maravillas. Muchas gracias.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Timer por RB0 PIC16f84a a 4mhz
« Respuesta #4 en: 11 de Enero de 2010, 19:55:39 »
Nooo! Me refería a las lineas donde colocaste ; donde estas tratando la interrupción.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado dagoh73

  • PIC10
  • *
  • Mensajes: 13
Re: Timer por RB0 PIC16f84a a 4mhz
« Respuesta #5 en: 12 de Enero de 2010, 09:13:22 »
ahora si te entendi. La duda ahora es por que funciona bien el anterior (casualidad) es por lo que mencine anteriormente  o nada que ver. Con la nueva modificacion tambien anda  de maravillas. mil gracias.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Timer por RB0 PIC16f84a a 4mhz
« Respuesta #6 en: 12 de Enero de 2010, 09:22:00 »
mmm... En los micros no creo que haya casualidades, si vos guías mediante la programación al micro  :tongue: Al comentar esa linea estas evitando volver erróneamente al programa principal. Estas lineas se ejecutan cuando al pulsar/soltar la tecla se produce el efecto rebote, que te genera una interrupción no deseada.

Respecto al otro, hace una maraña de cosas, mas o menos como explicaste. Termina ejecutando el retfie de forma errónea, pero por lo menos reestablece el PC.  :D


Saludos!
« Última modificación: 12 de Enero de 2010, 09:25:18 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado dagoh73

  • PIC10
  • *
  • Mensajes: 13
Re: Timer por RB0 PIC16f84a a 4mhz
« Respuesta #7 en: 12 de Enero de 2010, 09:55:34 »
Desde ya MIL GRACIAS. Problema solucionado.
 


 

anything