Gracias por su pronta respuesta.
Algunas aclaratorias adicionales:
1.- Programo en ASM, y todos los filtros dentro del codigo ya los tengo. En el codigo del PIC el <CR> me indica fin de la transmisión de la data del PC al PIC y el <CR> no lo muestro, simplemente al detectarlo, salgo de la rutina en donde estoy. Yo envio 32 caracteres consecutivos al LCD (16 y 16 ya que el LCD es de 16x2) para no dejar espacios en blanco, ya que esto desplazaria lo próximo a mostrar y se verian las palabras cortadas entre las dos lineas del LCD, luego de esos 32 caracteres, envio el <CR>.
2.- Simulación con Hiperterminal: saco el <LF> y dejo el <CR>, como indico en el texto anterior, eso hace que el cursor, en el envio de los mensajes del PC al PIC con el Hiperterminal, se posicione nuevamente al inicio de la misma linea (ver dibujo.jpg). En conclusión, al eliminar el <LF>, ese famoso caracter no se muestra en el LCD.
Porqué así funciona?? Al enviar el string (Hiperteminal -> PIC) yo lo termino con <CR><LF> y si dejaba marcada la opción SEND LINE ENDS WITH LINE FEEDS en el hiperterminal, enviaba adiconalmente otro <LF>, entonces estaba enviando <CR><LF><LF> y podría concluir que ese caracter era ese <LF> adicional.
3.- Visual Basic 10 + PIC: Al realizar el codigo en VB10, con la instrucción VbCrLF o VbCr, nuevamente se presenta en el LCD ese caracter. El VBCr, debería emular lo realizado con el Hiperterminal, pero no es así.
Gracias por su respuesta, seguire averiguando hasta encontrar que es lo que ocurre dentro del VB.
Hola.
Yo tambien programo en assembler.
Creo que lo que estas haciendo mal es utilizar el CR y LF. El display no interpreta CR y LF. Si te fijas en el datasheet del display o del controlador (supongo que es Hitachi 44780 compatible) no te menciona el uso de CR y LF. Lo que tenes que hacer es usar los comandos del display, o sea, entras a modo comando, ingresas el comando y luego a modo datos y escribis lo que queres; tanto en el renglon de arriba como en el de abajo.
En tu caso te esta funcionando porque el display dispone de un banco de memoria (o buffer) mayor de lo que te esta mostrando. Me explico mejor, hay una celda de memoria por cada digito que te muestra, pero hay otras celdas de memoria que no son representadas (o sea no tiene un digito que mostrar). Esto se hace para poder generar nuestros caracteres y poder ponerlos en la memoria del display para que sea mas rapida su representacion. Luego de esas direcciones de memoria viene el segundo renglon (con direcciones al final que no se representan en el display). Cuando escribis, pones los datos que queres mostrar y el CR, LF, etc van a parar a esa direcciones de memoria.Luego, como la direcciones son continuas caes en la direccion del primer caracter de la segunda linea, que si es visible, y te lo mustra.
No tengo la informacion a mano como para mostrartela, si la encuentro te la subo.
De la forma en que te digo, usando los comandos, que creo que eran 80h para linea1 y C0h para linea2.
Si te fijas las direcciones son 00h y 40h
(http://www.programarpicenc.com/libro/cap03-display-lcd-16x2-2x16-hd44780-mikroc-pro/pinout-lcd-16x2-2x16-hd44780-1.gif)
Y como el comando es:
Set DDRAM address y tiene un 1 en la posicion D7, para 00h te queda 10000000b = 80h ; y para la linea2 (40h) te queda 11000000b = C0h
Bueno, espero que te sea de ayuda y al resto; si ven que meti la pata comenten.
Saludos.
Edito: Que hace el display si manda un caracter y luego Enter . Por ejemplo 1 y enter, ¿Salta de linea?. Si no salta es porque no interpreta el LF + CR o LF.
Saludos.