He simulado el ejemplo como indicas y parece que el algoritmo no esta bien del todo, buscaré el ejemplo a ver si al hacer copy paste metí la pata.
De todas formas te dejo este otro para que experimentes:
Define CONF_WORD = 0x2f50 '/* FUSES
Define CONF_WORD_2 = 0x3ffd '*/
Define CLOCK_FREQUENCY = 8 'Frecuencia del reloj
'********************************************************
'FUNCION PARA IMPRIMIR UNA VARIABLE TIPO LONG EN EL LCD *
'NOMBRE: 16F88_PicEBasic_IMPRIMIR LONG POR EL LCD *******
'*************** 12/10/10 By COS ************************
'********************************************************
'----Puertos del LCD
Define LCD_BITS = 4 'Indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTA 'Bus de datos sera el puerto A
Define LCD_DBIT = 0 'Bus de datos seran los 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB 'Bit de control RS sera del puerto B
Define LCD_RSBIT = 7 'Se usara el RB7 como RS
Define LCD_EREG = PORTB 'Bit de control E sera del puerto B
Define LCD_EBIT = 6 'Se usara el RB6 como E
Define LCD_COMMANDUS = 2000 'Tmp de espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 50 'Tmp de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 5 '50 'Tmp de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg.
'----ASIGNACION DE I/O y valores de inicio de las salidas. Configura ADC
ANSEL = %00010000 'Los pin I/O digitales y RA4 analogico
CMCON = 0x07 'Comparador a off
OSCCON = 0x7e 'Set intrc To 8mhz, se usara reloj interno a 8Mhz
ADCON0 = %01100001 'Fosc/16 a 8Mhz (ADCON1.ADCS2=1) =2uSeg (minimo 1.6uSeg), channel RA4
ADCON1 = %11000000 'Volt. ref.(AVdd/AVss), selec. de escala division clock/16 ADCON1.ADCS2=1, ADC a ON
'ADCON1.ADFM = 0 'Activa lectura 8bit del ADC
TRISA = 0x00 'Puerto A como salidas
TRISB = 0x00 'Puerto B como salidas
TRISA.4 = 1 'Como entrada (RA4, adc)
TRISA.6 = 1 'Como entrada (RA6, tecla E1)
TRISA.5 = 1 'Como entrada (RA5, tecla E2)
'TRISB.5 = 0 'RB5(Tx, RS232)
TRISB.2 = 1 'RB2 (Rx, RS232)
PORTB.3 = 1 'Luz lcd a on (RB3)
PORTA.7 = 1 'Led amarillo a off
PORTB.0 = 1 'Led verde a off
'----VARIABLES GLOBALES
Dim dato As Long
'---INICIO
Lcdinit 'Inicializa el lcd sin cursor
Lcdcmdout LcdClear 'Limpia lcd y cursor principio linea 1
Lcdout "Print Long:"
'----Rutina principal
dato = 995
main:
Lcdcmdout LcdLine2Home 'Curso a principio de linea 2
Call _putlcd32(dato) 'Va a la funcion
dato = dato + 1
Goto main
End
'Retorna valor: Byte
'Extrae el digito indicado, hasta 10 digitos
'numero = Cifra a descomponer
'digito = Digito a extraer de 0 a 9
'Los digitos se nombras de derecha a izquierda, cero es el primero
'_getdig32, retorna el digito.
Function _getdig32(_numero As Long, _digito As Byte) As Byte
'Descompone el numero a mostrar en digitos
Dim _n As Byte
For _n = 1 To _digito
_numero = _numero / 10
Next _n
_getdig32 = _numero Mod 10
End Function
'No retorna valor
'Envia una variable numérica al LCD
Proc _putlcd32(_numero As Long)
Dim i As Byte
Dim digito As Byte
Dim flag As Byte
flag = 0
For i = 9 To 0 Step -1
digito = _getdig32(_numero, i)
If digito > 0 Then flag = 1
If flag > 0 Then Lcdout #digito
Next i
End Proc