Te pongo lo que estas haciendo mal y el por que, aunque ya tendrias que dar cuenta
Tu codigo solo funciona para una linea.
SePulsoDerecha
incf Cursor,F
movlw 0X10 ; Esto lo podes resumir preguntando si BTFSC o BTFSS Cursor,4
subwf Cursor,W
btfsc STATUS,Z
goto MuestraLinea1 ; Antes de enviar el comando deberias poner en 0x0F Cursor o hacele un decrementar. POr que estas mandando 0x10
movlw 0X00
goto MuestraLinea1
SePulsoIzquierda
decf Cursor,F
movlw 0xFF ; lo mismo que arriba si en realidad limitas los valores entonces con BTFSS / BTFSC Cursor,4 5 6 o 7 estaria
subwf Cursor,W
btfsc STATUS,Z
goto MuestraLinea1 ; lo mismo que arriba, estas enviando 0xFF cuando deberias enviar un 0x00
movlw 0x0F
goto MuestraLinea1
MuestraLinea1
movfw Cursor
call LCD_PosicionLinea1 ; lo repito creo que por 3ra ves, no tenes que llamar a esa funcion, tenes que llamar a otra, por que esa funcion siempre te posiciona en la primer posicion por mas valor que tengas de Cursor.
movfw Caracter
call LCD_Caracter ; Esto quiere decir que se va a copiar el mismo valor que antes.
goto Principal
Y todavia no resolviste el problema de como guardas los valores o de leerlos.