Autor Tema: Ayuda con interrupciones pic 16f84a  (Leído 1874 veces)

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

Desconectado reallink

  • PIC10
  • *
  • Mensajes: 1
Ayuda con interrupciones pic 16f84a
« en: 09 de Marzo de 2014, 16:09:22 »
Hola, es el primer mensaje que publico, la verdad se ve muy interesante el foro, bueno mi problema es que en un principio tengo un lcd de 16x2 y dos botones, al iniciar el programa el pic quedara dormido hasta que apriete alguna de las interrupciones, con dos botones tendre las interrupciones, uno de ellos me mostrara un letrero en la parte superior del lcd y el segundo también me mostrara un mensaje pero en la parte inferior, pero este segundo mensaje tiene que estar parpadeando e intermitente.
en mplab la simulación si sigue el procedimiento pero no se como hacer el circuito o por lo menos no lo he podido implementar adecuadamente, en proteus o en físico, esto por que el pic que estoy utilizando es un 16f84a y los cuatro puertos que utilizo para controlar el lcd son los mismos que las interrupciones,en el archivo adjunto esta un circuito en proteus que encontré y funciona con el ejemplo de la pagina pero con el mio no muy bien, la verdad no le entendí muy bien por las conexiones que están como en buffer si alguien sabe el principio de su funcionamiento seria de gran ayuda, espero y me diera a entender bien, espero y me puedan dar algunas ideas, la verdad soy muy nuevo en esto, saludos

PD. adjunto mis librerías y el programa que he echo
Código: [Seleccionar]
__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST   P=16F84A
INCLUDE  <P16F84A.INC>

CBLOCK  0x0C
Habilita
ENDC

#DEFINE  EntradaRB7 PORTB,7
#DEFINE  EntradaRB6 PORTB,6

; ZONA DE CÓDIGOS ********************************************************************

ORG 0
goto Inicio
ORG 4 ; Vector de interrupción.
goto ServicioInterrupcion
Inicio
call LCD_Inicializa
bsf STATUS,RP0 ; Acceso al Banco 1.
bsf EntradaRB7 ; Las líneas se configuran como entrada.
bsf EntradaRB6
bcf STATUS,RP0 ; Acceso al Banco 0.
movlw b'10001000' ; Activa interrupción  por cambio en las
movwf INTCON ; líneas del Puerto B (RBIE) y la general (GIE)

Principal
sleep ; Pasa a modo bajo consumo esperando las
addwf PCL,F
goto VisualizaRB7
goto VisualizaRB6

; Subrutina "ServicioInterrupcion" ------------------------------------------------------
;
; Subrutina de atención a la interrupción. Detecta qué ha producido la interrupción y
; ejecuta la subrutina correspondiente.

ServicioInterrupcion
call Retardo_20ms ; Espera se estabilicen niveles.
btfss EntradaRB7 ; ¿Está presionado el pulsador RB7?
call VisualizaRB7w
btfss EntradaRB6 ; ¿Está presionado el pulsador RB6?
call VisualizaRB6w
bcf INTCON,RBIF
retfie ; Retorna y rehabilita las interrupciones, GIE=1.

; Subrutinas "VisualizaRB7" y "VisualizaRB6" --------------------------------------------

VisualizaRB7w
movlw b'00000000'
movwf Habilita
return
VisualizaRB7
call LCD_Linea1
movlw 'H'
call LCD_Caracter
movlw 'O'
call LCD_Caracter
movlw 'L'
call LCD_Caracter
movlw 'A'
call LCD_Caracter
movlw ' '
call LCD_Caracter
movlw 'F'
call LCD_Caracter
movlw 'U'
call LCD_Caracter
movlw 'N'
call LCD_Caracter
movlw 'C'
call LCD_Caracter
movlw 'I'
call LCD_Caracter
movlw 'O'
call LCD_Caracter
movlw 'N'
call LCD_Caracter
movlw 'O'
call LCD_Caracter
movf Habilita,0
addwf PCL,F
    goto VisualizaRB7
goto VisualizaRB6
return
Auxiliar
goto VisualizaRB7
VisualizaRB6w
movlw b'00000001'
movwf Habilita
return
VisualizaRB6
call LCD_Linea2
movlw 'Y'
call LCD_Caracter
movlw ' '
call LCD_Caracter
movlw 'P'
call LCD_Caracter
movlw 'A'
call LCD_Caracter
movlw 'R'
call LCD_Caracter
movlw 'P'
call LCD_Caracter
movlw 'A'
call LCD_Caracter
movlw 'D'
call LCD_Caracter
movlw 'E'
call LCD_Caracter
movlw 'O'
call LCD_Caracter
call Retardo_500ms
call LCD_Linea2
call LCD_LineaEnBlanco
call Retardo_500ms
movf Habilita,0
addwf PCL,F
    goto VisualizaRB7
goto VisualizaRB6
return

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
MensajeRB7
DT "Hola funciono",0x00
MensajeRB6
DT "Y parpadeo",0x00

INCLUDE   <LCD_4BIT.INC>
INCLUDE   <LCD_MENS.INC>
INCLUDE   <RETARDOS.INC>
END

« Última modificación: 09 de Marzo de 2014, 16:14:50 por reallink »