• Lunes 23 de Diciembre de 2024, 01:11

Autor Tema:  Interrupciones 16f877  (Leído 3182 veces)

TeEstoyMirando

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Interrupciones 16f877
« en: Martes 31 de Enero de 2006, 15:08 »
0
Hola amigos. Les voy a comentar un problema el cual no se solucionar.

Estoy desarrollando un controlador en el cual utilizo la interrupcion comprendida entre el RB4 Y RB7.
Cuando entra en la interrupcion deseo que me ponga a cero el bit cero RBIF del registro INTCON pero no hay manera. No realiza la operacion.

No entiendo porque no soy capaz de ponerlo a cero si en el mismo manual del controlador dice que para cambiar su valor se realiza mediante software.

La simulacion la realiza con cualquier bit del RB4-RB7 utilizando un escenario y el pulsador TOOGLE

El codigo del programa resumido es este:

Código: Text
  1.  
  2.  
  3. LIST P=16f877&#59; Tipo del PIC
  4.  
  5. STATUS EQU 03
  6. INTCON EQU 0B
  7. PORTB EQU 06
  8. TRISB EQU 06
  9.  
  10. ORG 00
  11. GOTO INICIO
  12. ORG 04
  13. GOTO INTER
  14. ORG 05
  15.  
  16. INICIO
  17. BSF STATUS,5
  18. MOVLW 0XFF
  19. MOVWF TRISB&#59; Configurar Puerto B
  20. BSF INTCON,3&#59; Interrupcion RB47
  21. BSF INTCON,7&#59; Interrupcion General.
  22. BCF STATUS,5
  23.  
  24. INICIO2
  25. SLEEP
  26. NOP
  27. NOP
  28. NOP
  29. GOTO INICIO2
  30.  
  31. INTER
  32. BCF INTCON,0&#59;NO ME LA REALIZA....!!!!!!
  33. BSF INTCON,7
  34.  
  35. RETURN&#59; He probado con RETFIE
  36.  
  37. END
  38.  
  39.  
  40.  


No tengo ni idea de a que se debe pero tiene toda la pinta de ser una tonteria pero no doy con ello.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Interrupciones 16f877
« Respuesta #1 en: Miércoles 1 de Febrero de 2006, 19:33 »
0
En vez de borrar directamente el INTCON,0 lee el puerto B (ej: MOVF portB,f) eso borrara el bit por hardware.




Saludos

TeEstoyMirando

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Interrupciones 16f877
« Respuesta #2 en: Jueves 2 de Febrero de 2006, 20:10 »
0
Muchisimas gracias !!!!

Pongo la instruccion "MOVF portB,f" delante del borrado del intcon y plas!! me la borra.

Vaya favor que me haces. Me estaba volviendo loco.

Un saludo.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Interrupciones 16f877
« Respuesta #3 en: Jueves 2 de Febrero de 2006, 20:19 »
0
Te aconsejo borrar el bit al final de la rutina de interrupcion para que no generar loop de intrrupcion indeseados

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Interrupciones 16f877
« Respuesta #4 en: Viernes 17 de Febrero de 2006, 17:45 »
0
Saludos
Pues que bueno que lalo_soft te ayudara, nadamas te doy unos errores que tienes, que espero te sirvan, cuando realizas una interrupcion se regresa con retfie, no con return, y cuando el colocas el dato de PORTB,f, en realidad es PORTB,0 o PORTB,W


      
      LIST    P=16f877; Tipo del PIC

STATUS       EQU    03
INTCON       EQU    0B
PORTB       EQU    06
TRISB       EQU    06

      ORG    00
      GOTO    INICIO
      ORG    04
      GOTO    INTER
      ORG    05

INICIO       BSF    STATUS,5
      MOVLW    0XFF
      MOVWF    TRISB      ; Configurar Puerto B
      BSF    INTCON,3   ; Interrupcion RB47
      BSF    INTCON,7   ; Interrupcion General.
      BCF    STATUS,5
      
INICIO2    SLEEP    NOP
      NOP
      NOP
      GOTO INICIO2
      
INTER       MOVF PORTB,0
      BCF INTCON,0      ;NO ME LA REALIZA....!!!!!!
      
      BSF INTCON,7
      RETfIE         ; He probado con RETFIE

      END