Below is the code I had developed to write data to LCD without using the LCDout command.
thought may be of help:

'************************************************* ***************
'* Name : LCD 8Bit.BAS *
'* Author : uuq1 *
'* Notice : Copyright (c) 2005 [set under view...options] *
'* : All Rights Reserved *
'* Date : 4/25/2005 *
'* Version : 1.0 *
'* Notes : *
'* : *
'************************************************* ***************
'VARIABLES DECLARATION
CHARCNT VAR BYTE
CHAR1 VAR BYTE
TOTAL CON 20 ' A CONSTANT FOR NO OF CHARS ON ONE LINE OF LCD

'Pin Assignments
LCD_RS VAR PORTA.0
LCD_EN VAR PORTA.1

Start:
Pause 150
TRISA=2
TRISB=0
PORTA=0
PORTB=0

PORTB=%00110000 ' FUNCTION 8 BITS, LCD INITILIZATION REQUIRE THIS COMMAND TO BE SENT 3 TIMES.
GOSUB LCDINS
PORTB=%00110000 ' FUNCTION 8 BITS
GOSUB LCDINS
PORTB=%00110000 ' FUNCTION 8 BITS
GOSUB LCDINS
PORTB=%00111000 ' fUNCTION 8 BITS, 2 LINES, FONT #1
GOSUB LCDINS
PORTB=%00001100 ' DISPLAY ON, CURSOR OFF, BLINK OFF
GOSUB LCDINS
PORTB=%00000001 ' CLEAR THE DISPLAY
GOSUB LCDINS
PORTB=%00000110 ' CLEAR THE DISPLAY
GOSUB LCDINS
CHARCNT=0

PRINC:
IF CHARCNT <= TOTAL THEN
CHAR1="A"
ELSE
CHAR1="B"
ENDIF

IF CHARCNT=TOTAL+1 THEN
PORTB=$C0 'GOTO 2ND LINE FIRST POSITION
GOSUB LCDINS
ENDIF

IF CHARCNT >= (TOTAL * 2)+1 THEN
PORTB=1 'CLEAR THE DISPLAY
GOSUB LCDINS
PORTB=$80 'GOTO 1ST LINE FIRST POSITION
GOSUB LCDINS
CHARCNT=0
ENDIF

'PRINT THE CHAR ON LCD
PORTB=CHAR1
GOSUB LCDDATA
PAUSE 100

'INCREMENT THE CHARCNT
CHARCNT=CHARCNT + 1
GOTO PRINC

LCDDATA:
PAUSEUS 25
HIGH LCD_RS
PAUSEUS 25
HIGH LCD_EN
PAUSEUS 25
LOW LCD_EN
RETURN

LCDINS:
PAUSEUS 25
LOW LCD_RS
PAUSEUS 25
HIGH LCD_EN
PAUSEUS 25
LOW LCD_EN
RETURN