Buen Dia, este es mi primer Tema, ya que estoy hace poco con el mundo de los Pics.
Aca tengo un pequeño problema, con este menu ejemplo que les comparto, osea...
Esta pensado. para que por medio de 2 pulsadores, uno va pasando el menu, y el otro accede al menu y un submenu, y volviendo a oprimir el primer pulsador sale del submenu y vuelve al principal recorriendolo.
Todo esto se visualiza, en un LCD 2 x 16, configurado a 4 Bits, incluye las siguientes rutinas:
LCD_4BIT.inc
LCD_MENS.inc
RETARDOS.inc
Conexionado datos Pic a LCD RB4 a RB7 al Pin 11 a 14 deLCD
Conexionado configuracion Pic a Lcd RA0 a RA2 al Pin 4 a 6 del LCD
Pulsadores RB0 y RA2
Si alguien lo puede chequear y ver porque no funciona correctamente ya que en algunos submenu no entra, otros los saltea, osea no funciona correctamente. Aqui les mando el ejemplo:
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C
ENDC
; ZONA DE CÓDIGOS ********************************************************************
status equ 3h
porta equ 5h
portb equ 6h
ORG 0
bsf status,5
bsf porta,3
bsf portb,0
bcf status,5
Inicio
call LCD_Inicializa
Principal
btfsc porta,3
goto Menu7
call Retardo_500micros
call Borra ; Delay 200000 ciclos (incluyen call+return)
movlw Mensaje0 ; Apunta al mensaje 0.
call Visualiza
N2 btfsc porta,3
goto Menu ; ****** MENU MENSAJE 0 ******
call Retardo_500micros
call Borra ; Delay 200000 ciclos (incluyen call+return)
movlw Mensaje1 ; Apunta al mensaje 1.
call Visualiza
N3 btfsc porta,3
goto Menu2 ; ****** MENU MENSAJE 1 ******
call Retardo_500micros
call Borra ; Delay 200000 ciclos (incluyen call+return)
movlw Mensaje2 ; Apunta al mensaje 2.
call Visualiza
N4 btfsc porta,3
goto Menu3
call Retardo_500micros
call Borra ; Delay 200000 ciclos (incluyen call+return)
movlw Mensaje3 ; Apunta al mensaje 3.
call Visualiza
N5 btfsc porta,3
goto Menu4
call Retardo_500micros
call Borra ; Delay 200000 ciclos (incluyen call+return)
movlw Mensaje4 ; Apunta al mensaje 4.
call Visualiza
N6 btfsc porta,3
goto Menu5
call Retardo_500micros
call Borra ; Delay 200000 ciclos (incluyen call+return)
movlw Mensaje5 ; Apunta al mensaje 5.
call Visualiza
N7 btfsc porta,3
goto Menu6
call Retardo_500micros
call Borra ; Delay 200000 ciclos (incluyen call+return)
movlw Mensaje6 ; Apunta al mensaje 6.
call Visualiza
goto Principal ; Repite la visualización de todos los mensajes.
; -----------------------------------------------------------------
; Menu Mensaje 0
Menu btfsc portb,0
goto N2
call Retardo_500micros
call Borra
movlw Mensaje7 ; " Activado "
call Visualiza2
movlw Mensaje0
call Visualiza
goto Menu
Menu2 btfsc porta,0 ; Volver atras ?
goto N3 ; No, Testear Menu3
call Retardo_500micros
call Borra
movlw Mensaje8 ; Si, a "< Testeo Menu > "
call Visualiza2
movlw Mensaje1
call Visualiza
goto Menu2
Menu3 btfsc portb,0
goto N4
call Retardo_500micros
call Borra ; Delay 200000 ciclos (incluyen call+return)
movlw Mensaje9 ; Apunta al mensaje 9.
call Visualiza2
movlw Mensaje2
call Visualiza
goto Menu3
Menu4 btfsc porta,0 ; Vuelve atras ?
goto N5 ; No, Sigue el mensaje
call Retardo_500micros
call Borra
movlw Mensaje10 ; Si, a " Estado Menu "
call Visualiza2
movlw Mensaje3
call Visualiza
goto Menu4
Menu5 btfsc portb,0
goto N6
call Retardo_500micros
call Borra
movlw Mensaje11 ; " 48.5 V "
call Visualiza2
movlw Mensaje4
call Visualiza
goto Menu5
Menu6 btfsc porta,0 ; Atras ?
goto N7 ; No, seguir testeando
call Retardo_500micros
call Borra
movlw Mensaje12 ; Si,a " Bateria "
call Visualiza2
movlw Mensaje5
call Visualiza
goto Menu6
Menu7 btfsc portb,0
goto Principal
call Retardo_500micros
call Borra
movlw Mensaje13 ; " 20.5 A "
call Visualiza2
movlw Mensaje6
call Visualiza
goto Menu7
; Subrutina "Visualiza" -----------------------------------------------------------------
;
Visualiza
call LCD_Mensaje
Return
Visualiza2
call LCD_Mensaje
call Retardo_2s
call Borra
call Retardo_200ms
return
Borra call LCD_Borra ; Borra la pantalla y se mantiene así durante
call Retardo_200ms ; este tiempo.
return
;
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
Mensaje0 ; Posición inicial del mensaje 0.
DT " < Estado >", 0x00
Mensaje1 ; Posición inicial del mensaje 1.
DT " < Bateria >", 0x00
Mensaje2 ; Posición inicial del mensaje 2.
DT " < Corriente >", 0x00
Mensaje3
DT " < Velocidad >", 0x00
Mensaje4
DT " < Potencia >", 0x00
Mensaje5
DT " < Motor >", 0x00
Mensaje6
DT " < Microswich >", 0x00
Mensaje7 ;Mensaje0
DT " Activado", 0x00
Mensaje8
DT " Desconectado", 0x00
Mensaje9 ;Mensaje1
DT " 48.5 V", 0x00
Mensaje10
DT " 20.5 A", 0x00
Mensaje11
DT " 150 Km/hs", 0x00
Mensaje12
DT " 120 W", 0x00
Mensaje13
DT " HP=20 RPM=1550", 0x00
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <RETARDOS.INC>
END
Desde ya muchas gracias y espero que me puedan sacar la duda !!!
ATTE. Victor Angel