Mi querido pór ltiby_fside, por los archivos descargados y visto, esta usando rutinas del libro de Enrique palacios el de color guinda
yo tambien tengo ese y fue mi libro de incio en los PIcs. Ahora viendo en tu codigo te digo lo siguiente:
1° No es necesario que inicialices el LCD cada ves que desees colocar un mensaje, eso se ve en los ejemplos que trae el libro. El autor no Inicializa el LCD cada vez que va a escribir un mensaje. Por eso deberias inicializarlo aqui:
; ZONA DE CÓDIGOS ********************************************************************
ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
movlw b'00001111' ; configura puertos RB0-RB3 entradas
movwf TRISB
movlw b'11100101' ; configura RA1,RA3,RA4 salidas
movwf TRISA
bcf STATUS,RP0 ; Acceso al Banco 0.
call LCD_Inicializa
principal
btfsc Encendido1 ; ¿Interruptor de encendido1 activado?
2° Una vez hecho esto, en tus mensajes debes reemplazar el LCD_Inicializa por el LCD_Linea1, ya que en el libro esta los comandos que biene implementado en la subrutina del LCD, pero debes acomodar los mensajes para que no se solapen algunos, por ejemplo si escribes el mensaje1 de 10caracteres y luego mandas el mensaje2 de 15 caracteres y luego regresas al mensaje uno de 10 caracteres en la pantalla se veran los ultimos 5 caractertes de tu mensaje2, es solo cuestion de comodar el mensaje, lo puedes hacer estirandolo mas sin sobrepasar un largo de 16 caracteres.
3° el motivo por el cual escuchas un pitido en el zumbador, es por que tu estas utilizando el RA1 para el zumbador, pero en la subrutina del LCD este pin se utiliza para poner al LCD en modo escritura o lectura. lo que sucede es que la subrutina esta diseñada para trabajar con el pin R/W del LCD pero como la mayoria de los casos solo se escribe sobr el LCD este se pone a tierra, por eso en la subrutina del LCD se debe surpimir las siguientes lineas:
#DEFINE LCD_PinRS PORTA,0
;#DEFINE LCD_PinRW PORTA,1
#DEFINE LCD_PinEnable PORTA,2
#DEFINE LCD_BusDatos PORTB
LCD_Inicializa
bsf STATUS,RP0 ; Configura las líneas conectadas al pines RS,
bcf LCD_PinRS ; R/W y E.
bcf LCD_PinEnable
; bcf LCD_PinRW
bcf STATUS,RP0
; bcf LCD_PinRW ; En caso de que esté conectado le indica
; que se va a escribir en el LCD.
como veras lo hago poniendo ";" esto le indica al compilador que es un comentario y no lo toma en cuenta a la hora hacer el buill
4° reviza la parte del encendido del zumbador por que una vez que lo enciendes cuando se activa una zona, no vuelve a apagarse, revisa eso. El zonido que escuchavas era producto de la subrutina del LCD ya que ponia a 1 y 0 cada vez que que inicializabas el LCD en cada mensaje
5° Por ultimo veo que mandas varios mensajes creo que son 16, deberias usar la subrutina de mensajes ya que de esa manera se hace mas legible el programa y te recomiendo que en lo sucesivo para sensar estados en un(os) pin(es) del pic, trates de hacerlo por interrupciones o si vas a ahacer un barrido de los pines, que el tratamiento de los mismos sea por tablas ya que te facilitara mucho el trabajo y no te llenaras de muchos goto.
Bueno espero que estos comentarios y/o sugerencias no te hagan sentir mal, pero veo que ya vas entendiendo de como ma o menos es el funcionamiento interno del PIC, Otra cosa que te recomiendo es que leas con mas atencion el libro que tienes ya que ahi explica con detalles el funcionamiento de sus subrutinas y las consideraciones que deber tener con algunas de ellas. Yo me lei de cabo a rabo ese libro ya que es muy interesante para el inico en el mundo de los PIC´s. leer no hace daño
, por lo menos hasta ahora