Mirando en el foro sobre ésto he visto que practicamente el 80% de los mensajes que se refieren al LCD de 4 bits lo hacen con el código que proporciona el libro de aplicaciones del 16F84, pero mi duda es que aquí realmente lo que dice que hace es esto:
; Envía el dato del registro de trabajo W al bus de dato y produce un pequeño pulso en el pin
; Enable del LCD. Para no alterar el contenido de las líneas de la parte baja del Puerto B que
; no son utilizadas para el LCD (pines RB3:RB0), primero se lee estas líneas y después se
; vuelve a enviar este dato sin cambiarlo.
entiendo que lo que hace es usar los 8 bits del puerto B pero después vuelve a sacar por 4 de ellos el dato que tenía anteriormente para no modificarlo, ésto para mi no es usar 4 bits, ¿hay alguna forma de hacerlo con 4 bits realmente? no dispongo de 8 pines para la conexión y los otros 4 no se pueden cambiar ni si quiera un instante
Además, parece que solo envia los 4 bits de más peso del dato a enviar, ¿y los otros 4 bits? no acabo de entender ese código
aquí lo pongo para que lo veais los que no lo hayais visto aun:
LCD_EscribeLCD
andlw b'11110000' ; Se queda con el nibble alto del dato que es el
movwf LCD_Dato ; que hay que enviar y lo guarda.
movf LCD_BusDatos,W ; Lee la información actual de la parte baja
andlw b'00001111' ; del Puerto B, que no se debe alterar.
iorwf LCD_Dato,F ; Enviará la parte alta del dato de entrada
; y en la parte baja lo que había antes.
bsf STATUS,RP0 ; Acceso al Banco 1.
movf TRISB,W ; Guarda la configuración que tenía antes TRISB.
movwf LCD_GuardaTRISB
movlw b'00001111' ; Las 4 líneas inferiores del Puerto B se dejan
andwf PORTB,F ; como estaban y las 4 superiores como salida. ¿¿¿¿¿AQUÍ NO SERÍA TRISB???????
bcf STATUS,RP0 ; Acceso al Banco 0.
;
movf LCD_Dato,W ; Recupera el dato a enviar.
movwf LCD_BusDatos ; Envía el dato al módulo LCD.
bsf LCD_PinEnable ; Permite funcionamiento del LCD mediante un pequeño
bcf LCD_PinEnable ; pulso y termina impidiendo el funcionamiento del LCD.
bsf STATUS,RP0 ; Acceso al Banco 1. Restaura el antiguo valor en
movf LCD_GuardaTRISB,W ; la configuración del Puerto B.
movwf PORTB ; Realmente es TRISB.
bcf STATUS,RP0 ; Acceso al Banco 0.
return