Diseño Menu Assembler PIC16F877

Buenas tardes,

Necesito diseñar en MPLAB un menu que pueda ser manipulado por 4 pulsadores, arriba-abajo para las opciones generales, izquierda-derecha para las subopciones de cada una general. Se debe manipular ek PIC16F877 con interrupciones y visualizar en LCD.

Aqui el programa que llevo hasya ahora:

__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF ;configuracion del PIC, Perro guardián Desactivado
LIST P=16F877A ; Procesador.
INCLUDE <P16F877A.INC> ; Definición de los operandos utilizados


CBLOCK 0x20
DIGITO
DIGITO2
ENDC

;*****************************BANCOS******************************************

BANK_0 macro ;Macros de selección de bancos
BCF STATUS,RP0
BCF STATUS,RP1
endm

BANK_1 macro
BSF STATUS,RP0
BCF STATUS,RP1
endm

;***************DEFINO EL PROGRAMA PARA LAS INTERRUPCIONES********************
ORG 0x00 ;Vector de Reset
GOTO INICIO
ORG 0x04 ;Vector de interrupción, es el que permite hacer que existan interrupciones
GOTO INTERRUPCIONES

;********CONFIGURACION DE LOS PUERTOS DE ENTRADA/SALIDA***********************

INICIO
BANK_1 ; Acceso al Banco 1.
MOVLW b'00000110'
MOVWF ADCON1
MOVLW b'00111000'
MOVWF OPTION_REG
MOVLW B'11110001'
MOVWF TRISB
BANK_0

;***************CONFIGURACION DE INTERRUPCIONES******************************

MOVLW B'11000001'
MOVWF ADCON0
MOVLW B'10001000'
MOVWF INTCON

;******************INICIO DEL PROGRAMA****************************************
;$$$$$$$$$$$$-----PRESENTACION-------$$$$$$$$$$$$$$$$$

CLRF DIGITO
CLRF PORTB

CALL LCD_Inicializa ;siempre se pone para inicializar correctamente el LCD
MOVLW Mensaje0 ;nombre de un mensaje
CALL LCD_Mensaje ;subrutina para que se desplace el mensaje en pantalla
CALL Retardo_500ms ;subrutina que retarda el siguiente paso 500ms
CALL LCD_Linea2
MOVLW MensajeYO
CALL LCD_Mensaje
CALL Retardo_2s

PRESENTACION BTFSC PORTB,0 ;vamos con el puerto 0
GOTO PRESENTACION ;es como un cirulo vicioso???
CALL Retardo_20ms ;subrutina que retarda el siguiente paso 20ms
BTFSC PORTB,0
GOTO PRESENTACION

FIN GOTO FIN ;PROBAO Y FUNCIONA

;************MENSAJES QUE VAN A VISUALIZARSE*************************************

Mensajes
addwf PCL,F ;siempre se pone
Mensaje0 ;el primer mensaje
DT " <<SELECTOR>>", 0x00 ;que sera la bienvenida
MensajeYO
DT " MIKE ALARCON ", 0x00
Mensaje1
DT "Tipo de Terapia", 0x00
Mensaje2
DT "Intensidad", 0x00
Mensaje3
DT "Tipo de Onda", 0x00
Mensaje4
DT "Tiempo de estimulacion", 0x00
Mensaje5
DT "Analgesia", 0x00
Mensaje6
DT "Relajacion", 0x00
Mensaje7
DT "Masa Muscular", 0x00
Mensaje8
DT "Alta", 0x00
Mensaje9
DT "Media", 0x00
Mensaje10
DT "Baja", 0x00
Mensaje11
DT "TENS", 0x00
Mensaje12
DT "EMS", 0x00
Mensaje13
DT "10 min.", 0x00
Mensaje14
DT "15 min.", 0x00
Mensaje15
DT "20 min.", 0x00
Mensaje16
DT "30 min.", 0x00

;***************************INTERRUPCIONES*************************************
;******************************************************************************

;DEFINICION DE INTERRUPCIONES


INTERRUPCIONES
BTFSC PORTB,4 ;Tipo de Terapia
GOTO TERAPIA
BTFSC PORTB,5 ;Intensidad
GOTO INTENSIDAD
BTFSC PORTB,6 ;Tipo de Onda
GOTO ONDA
BTFSC PORTB,7 ;Tiempo de Estimulacion
GOTO TIEMPO
BCF INTCON,RBIF
RETFIE


;==============================================================================


TERAPIA
CALL LCD_Borra
MOVLW Mensaje1
CALL LCD_Mensaje
CALL Retardo_2s
BCF INTCON,RBIF
RETFIE

ANALGESIA
CALL LCD_Borra
MOVLW Mensaje5
CALL LCD_Mensaje
CALL Retardo_2s
BCF INTCON,RBIF
RETFIE

;==============================================================================


INTENSIDAD CALL LCD_Borra
MOVLW Mensaje2
CALL LCD_Mensaje
CALL Retardo_1s
BCF INTCON,RBIF
RETFIE


;==============================================================================


ONDA CALL LCD_Borra
MOVLW Mensaje3
CALL LCD_Mensaje
CALL Retardo_1s
BCF INTCON,RBIF
RETFIE

;==============================================================================


TIEMPO CALL LCD_Borra
MOVLW Mensaje4
CALL LCD_MensajeMovimiento
CALL Retardo_1s
BCF INTCON,RBIF
RETFIE


;******************************************************************************
;Son librerias:

INCLUDE <RETARDOS.INC> ;Todo esto para que funcionen las
INCLUDE <BIN_BCD.INC> ;subrutinas puesto que se las
INCLUDE <LCD_16FXXX.INC> ;incluimos al programa
INCLUDE <LCD_MENS.INC>
END

END

Solo consigo que con un pulsador salga determinado mensaje, solo 4 mensajes, pero no logro un desplazamiento por las opciones.

Agradezco su ayuda inmensamente.
 
Atrás
Arriba