Autor Tema: TRABAJANDO CON INTERRUPCIONES RB4-RB7  (Leído 2951 veces)

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

Desconectado Correia

  • PIC10
  • *
  • Mensajes: 39
TRABAJANDO CON INTERRUPCIONES RB4-RB7
« en: 23 de Agosto de 2011, 14:45:26 »
buenas tardes manes, estoy practicando la programacion de las interrupciones RB4-RB7 con el 16f628a, la idea es que el porta esta como salida, a cuatro leds, y los rb4-rb7 como entradas, cuando presione rb4, se generara una interrupcion y encendera RA0 donde se encuentra un led, cuando presione RB5 se generara una interrupcion y se prendera RA1, pero se apaga RA0 y asi hasta presionar RB7, mi problema es que cuando lo simulo en proteus, al presionar cualquier pulsador sea RB4,RB5,RB6,RB7 no sucede nada, hasta que doy una segunda pulsada que se prende, eso sucede con cualquier pulsador que comienze pulsando, despues de eso pulso los otros y reaccionan y cumplen su funcion, aqui dejo la programacion si alguien me puede dar una ayuda.
Citar
   list      p=16f628A           
   #include <p16F628A.inc>
   __CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
;usando interrupciones de RB4-RB7
;--VARIABLES PARA RESPALDO DE REGISTROS--
w_temp        EQU     0x71         
status_temp   EQU     0x72
cont equ 0x0C
;--configuracion de puertos y registros--
reset   org 0x00
      goto main
      org 0x04 ;localizacion donde se tratara la rutina de interrupcion
      goto serv_int

main     movlw 0x07
      movwf CMCON
      bsf STATUS,RP0
      movlw b'00110000'
      movwf TRISA      ;los 4 nibbles bajo de trisa como salida.
      movlw b'11110000'
      movwf TRISB
      movlw b'10000011'
       movwf OPTION_REG
      bsf INTCON,GIE
      bsf INTCON,RBIE
      bcf STATUS,RP0
      clrf PORTA
      clrf PORTB
bucle
      nop
      goto bucle
serv_int
      btfss INTCON,RBIF
      retfie
      movwf   w_temp
      swapf STATUS,W
      movwf status_temp
      call retardo
check   btfss PORTB,4
      goto activar1
      btfss PORTB,5
      goto activar2
      btfss PORTB,6
      goto activar3
      btfss PORTB,7
      goto activar4
      goto check
activar1
      movlw 0x01
      movwf PORTA
      swapf status_temp,w
      movwf STATUS
      swapf   w_temp,f
      swapf   w_temp,w
      bcf INTCON,RBIF
      retfie
activar2
      movlw 0x02
      movwf PORTA
      swapf status_temp,w
      movwf STATUS
      swapf   w_temp,f
      swapf   w_temp,w
      bcf INTCON,RBIF
      retfie
activar3
      movlw 0x04
      movwf PORTA
      swapf status_temp,w
      movwf STATUS
      swapf   w_temp,f
      swapf   w_temp,w
      bcf INTCON,RBIF
      retfie
activar4
      movlw 0x08
      movwf PORTA
      swapf status_temp,w
      movwf STATUS
      swapf   w_temp,f
      swapf   w_temp,w
      bcf INTCON,RBIF
      retfie
;***retardo de 20 milisegundos***
retardo   clrf cont
      movlw d'5'
      movwf cont
lel      clrf TMR0
lol      btfss INTCON,T0IF
      goto lol
      bcf INTCON,T0IF
      decfsz cont,F
      goto lel
      return   
      end

      

-Tsuki no Tamashi
-Microcontroladores
-Robotica
-Evangelion
-Einstein

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: TRABAJANDO CON INTERRUPCIONES RB4-RB7
« Respuesta #1 en: 23 de Agosto de 2011, 16:37:44 »
Utiliza el buscador ya se a tratado el tema. Prueba con colocar las resistencias pull-up o pull-down externamente.


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

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: TRABAJANDO CON INTERRUPCIONES RB4-RB7
« Respuesta #2 en: 24 de Agosto de 2011, 14:20:40 »
No se si sera este el problema pero esto.

cont equ 0x0C  ; OCh es PIR1

Y estas por que aqui?


w_temp        EQU     0x71         
status_temp   EQU     0x72

Mejor asi:

  CBLOCK  0X20


w_temp               
status_temp 
 cont

  ENDC


Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: TRABAJANDO CON INTERRUPCIONES RB4-RB7
« Respuesta #3 en: 25 de Agosto de 2011, 00:43:19 »
Hola a Todos ,viendo tu codigo veo como te apunta tapi8 tenes declarada una variable cont en una posicion reservada :shock:
tendrias que ubicarla a partir de la posicion 0x20 para no tener ese problema ,los otros registros creo que los ubicas
en esas posiciones porque son de acceso desde cualquier banco y eso facilita el uso para guardar los registros.
Sobre lo que te sucede con la interrrupcion puede ser causa que al inicio del progrma no borras la bandera RBIF antes de habilitar la interrupcion  :shock: tendrias que agregar BCF  INTCON,RBIF y luego si habilitar la interrupcion por puertob BSF INTCON,RBIE y la general BSF INTCON,GIE ,espero te ayude.
Saludos!


 

anything