Autor Tema: interrupciones y LCD por mismo puerto es posible?  (Leído 2669 veces)

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

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
interrupciones y LCD por mismo puerto es posible?
« en: 05 de Diciembre de 2009, 14:03:23 »
Bueno, decirles que soy nuevo en esto de la programacion para PIC's, actualmente me estoy iniciando con el libro desarrollo de proyectos y me surge la siguente con el siguiente codigo que aparece en el libro:

Por el port B tengo las salidas b4, b5, b6 y b7 conectadas al lcd, a la vez las lineas b6 y b7 estan conectadas en paralelo con unos pulsadores (normalmente habiertos) en serie con una resistencia y a massa.

Cuando las pulsamos estas causan una interrupción, y segun el pulsador apretado sale un mensaje u otro en el LCD.

va el codigo:

Código: [Seleccionar]
;************************************ Int_RBI_05.asm **********************************
;
; ===================================================================
;   Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;   E. Palacios, F. Remiro y L. López. www.pic16f84a.com
;   Editorial Ra-Ma.  www.ra-ma.es
; ===================================================================
;
; A las líneas RB7 y RB6 se conectan dos pulsadores que producen una interrupción cada vez
; que se pulsan. En el módulo LCD se visualizará el nombre del pulsador activado: "RB7" o
; "RB6".
;
; Realmente no es necesario habilitar las resistencias de Pull-Up del Puerto B, ya que
; la interna del módulo LCD realiza tal función.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK  0x0C
Contador
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
movlw MensajeInicial
call LCD_Mensaje ; Visualiza el mensaje inicial.
bsf STATUS,RP0 ; Acceso al Banco 1.
bsf EntradaRB7 ; Las líneas se configuran como entrada.
bsf EntradaRB6
bcf OPTION_REG,NOT_RBPU ; Habilita resistencias de Pull-Up del Puerto B.
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
goto Principal ; interrupciones.

; 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 VisualizaRB7
btfss EntradaRB6 ; ¿Está presionado el pulsador RB6?
call VisualizaRB6
bcf INTCON,RBIF
retfie ; Retorna y rehabilita las interrupciones, GIE=1.

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

VisualizaRB7
call LCD_Borra
movlw MensajeRB7 ; Visualiza el mensaje para RB7.
call LCD_Mensaje
return

VisualizaRB6
call LCD_Borra
movlw MensajeRB6 ; Visualiza el mensaje para RB6.
call LCD_Mensaje
return

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
MensajeInicial
DT "Estudia D.P.E.", 0x00
MensajeRB7
DT "  Pulsador RB7", 0x00
MensajeRB6
DT "   Ahora RB6  ", 0x00

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

; ===================================================================
;   Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;   E. Palacios, F. Remiro y L. López. www.pic16f84a.com
;   Editorial Ra-Ma.  www.ra-ma.es
; ===================================================================

Bueno, la duda que tengo, como vereis, las lineas b6 y b7 se configuran como entradas. COmo es posible escribir en el LCD por B4,b5,b6 y b7 si estas 2 ultimas estan configuradas como entradas y en ningun momento se reconfiguran como salidas para enviar los datos al LCD???

He mirado las librerias usadas (LCD_4BIT.INC, LCD_MENS.INC y  RETARDOS.INC) de arriba a abajo y en ningun lado configura esos puertos como salidas.

Agradeceria que alguien fuera tan amable de explicarme como es esto (es que me descuadra todo lo que he aprendido) saludos y muchas gracias

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: interrupciones y LCD por mismo puerto es posible?
« Respuesta #1 en: 05 de Diciembre de 2009, 15:02:37 »
no conozco esas librerias, lo que si puedo decirte es que tengas cuidado con los ejemplos de los libros, que a veces lo dan por echo y se saltan alguna cosilla, aunque esa es gorda. mira a ver si se refiere a portb, habiendo cambiado al banco 1, que estaria apuntando a la direccion donde esta trisb pero con otro nombre, esto me desajusto los cables hace tiempo.

un saludo

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: interrupciones y LCD por mismo puerto es posible?
« Respuesta #2 en: 06 de Diciembre de 2009, 07:47:29 »
Si tenias razon, he vuelto a estar mirando la libreria LCD_4BIT.INC y hay un punto en ella,  que con otro nombre haciendo referencia al puerto b guarda los datos en una variable del estado del puerto b, envia los datos al lcd y vuelve a cargar el puerto B como estaba.

Ufff que alivio, me estaba quedando loco y a punto de dejar el tingrado este, al leer tu mensaje vi que no era posible que se hiciera sin cambiar los puertos de entrada a salida.

jejej, mas de 1hora me tirado mirando las librerias una i otra vez sin ver nada, jeej, falta de experiencia supongo ahun. Muchas gracias!

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: interrupciones y LCD por mismo puerto es posible?
« Respuesta #3 en: 06 de Diciembre de 2009, 08:22:26 »
Si tenias razon, he vuelto a estar mirando la libreria LCD_4BIT.INC y hay un punto en ella,  que con otro nombre haciendo referencia al puerto b guarda los datos en una variable del estado del puerto b, envia los datos al lcd y vuelve a cargar el puerto B como estaba.

Ufff que alivio, me estaba quedando loco y a punto de dejar el tingrado este, al leer tu mensaje vi que no era posible que se hiciera sin cambiar los puertos de entrada a salida.

jejej, mas de 1hora me tirado mirando las librerias una i otra vez sin ver nada, jeej, falta de experiencia supongo ahun. Muchas gracias!
de ná hombre. ahora a darle, no sale de la noche a la mañana pero al final se le coje cariño ;-)

un saludo


 

anything