LCD 16x 2 erro

Boa noite.
tenho uma rotina de inicialização LCD (4 bits) que uso para 8051 e adaptei a mesma para o PIC porem o display não funcionou.
ja inverti RS com EN,
testei todos pinos do PIC com led fazendo um " pica pisca " e estao funcionadno blz.
O display que estou usando e o mesmo que uso no 8051 e esta blz.
conferi toda PCi e nao tem curto nem trilha em aberto ...etc
alterei o tempo de delay pra + e ora - ...etc
alguma ideia do que pode ser ???
segue programa
#DEFINE BANCO0 BCF STATUS,RP0
#DEFINE BANCO1 BSF STATUS,RP0
#DEFINE RS PORTA,3 ;
#DEFINE EN PORTA,2 ;
#DEFINE DB7 PORTB,3
#DEFINE DB6 PORTB,2
#DEFINE DB5 PORTB,1
#DEFINE DB4 PORTB,0
#DEFINE MENU PORTB,4
#DEFINE SELEC PORTB,5
#DEFINE CONF PORTB,6
#DEFINE MOTOR1 PORTB,7
#DEFINE DISP 20H
ERRORLEVEL -302
__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_OFF
LIST P=16F627A
RADIX DEC
INCLUDE<P16F627A.INC>
ORG 0000H
NOP
GOTO INI
ORG 0004H
RETFIE
INI:
CLRF PORTA
CLRF PORTB
CLRF STATUS
BANCO1
; 76543210
MOVLW 00100000B
MOVWF TRISA
MOVLW 01110000B
MOVWF TRISB
MOVLW 10000000B ;transfere o literal 080h para o acumulador
MOVWF OPTION_REG ;transfere o dado do acumulador(80h) para o option_reg
CLRF INTCON
CLRF PIE1
CLRF PR2
CLRF PCON
BANCO0
MOVLW 007H
MOVWF CMCON
CLRF PIR1
CLRF PORTB ; deixa portB com 00H
CLRF PORTA ; deixa portA com 00H
INI_DISP:
MOVLW 32H
CALL ENVINS
MOVLW 28H
CALL ENVINS
MOVLW 28H
CALL ENVINS
MOVLW 06H
CALL ENVINS
MOVLW 0CH
CALL ENVINS
MOVLW 01H ; limpa todo display
CALL ENVINS
LOOP:
CALL MENSA1
CALL TE
GOTO $
MENSA1:
CALL ENVMEN2
MOVLW 32H
CALL MANDA2
RETURN
TE: CALL ENVMEN1
MOVLW ' '
CALL MANDA2
MOVLW ' '
CALL MANDA2
MOVLW ' '
CALL MANDA2
MOVLW 'T'
CALL MANDA2
MOVLW 'E'
CALL MANDA2
MOVLW 'S'
CALL MANDA2
MOVLW 'T'
CALL MANDA2
MOVLW 'E'
CALL MANDA2
RETURN
ENVDADO2:
ENVDADO:
RETURN
ENVINS:
BCF RS ; INDICA QUE E INSTRUCAO PARA DISPLAY
CALL MANDA
RETURN
ENVMEN1: ; ESCREVE NA 1º LINHA DO DISPLAY
MOVLW 80H
GOTO ENVINS
ENVMEN2:
MOVLW 0C0H ; ESCREVE NA 2º LINHA DI DISPLAY
GOTO ENVINS
MANDA2:
BSF RS
MANDA:
MOVWF DISP ; MOVE DADO PARA VARIAVEL DISP
BCF DB7 ; zera via de daso do display
BCF DB6
BCF DB5
BCF DB4
; envia 4 bits mais significativos
BTFSC DISP,7
BSF DB7
BTFSC DISP,6
BSF DB6
BTFSC DISP,5
BSF DB5
BTFSC DISP,4
BSF DB4
NOP
BSF EN ; habilita display
CALL DELAY2MS ; espera 5ms e desabilita dosplay
BCF EN
CALL DELAY2MS ; espera 5ms e desabilita dosplay
BCF DB7 ; zera via de daso do display
BCF DB6
BCF DB5
BCF DB4
; envia 4 bits menos significativos
BTFSC DISP,3
BSF DB7
BTFSC DISP,2
BSF DB6
BTFSC DISP,1
BSF DB5
BTFSC DISP,0
BSF DB4
CALL DELAY2MS ; espera 5ms e desabilita dosplay
BCF EN
CALL DELAY2MS ; espera 5ms e desabilita dosplay
RETURN
DELAY2MS:
MOVLW 2
MOVWF 22H
DEL:
MOVLW 255
MOVWF 23H
DEL1:
DECFSZ 23H,1
GOTO DEL1
DECFSZ 22H,1
GOTO DEL
RETURN
END
tenho uma rotina de inicialização LCD (4 bits) que uso para 8051 e adaptei a mesma para o PIC porem o display não funcionou.
ja inverti RS com EN,
testei todos pinos do PIC com led fazendo um " pica pisca " e estao funcionadno blz.
O display que estou usando e o mesmo que uso no 8051 e esta blz.
conferi toda PCi e nao tem curto nem trilha em aberto ...etc
alterei o tempo de delay pra + e ora - ...etc
alguma ideia do que pode ser ???
segue programa
#DEFINE BANCO0 BCF STATUS,RP0
#DEFINE BANCO1 BSF STATUS,RP0
#DEFINE RS PORTA,3 ;
#DEFINE EN PORTA,2 ;
#DEFINE DB7 PORTB,3
#DEFINE DB6 PORTB,2
#DEFINE DB5 PORTB,1
#DEFINE DB4 PORTB,0
#DEFINE MENU PORTB,4
#DEFINE SELEC PORTB,5
#DEFINE CONF PORTB,6
#DEFINE MOTOR1 PORTB,7
#DEFINE DISP 20H
ERRORLEVEL -302
__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_OFF
LIST P=16F627A
RADIX DEC
INCLUDE<P16F627A.INC>
ORG 0000H
NOP
GOTO INI
ORG 0004H
RETFIE
INI:
CLRF PORTA
CLRF PORTB
CLRF STATUS
BANCO1
; 76543210
MOVLW 00100000B
MOVWF TRISA
MOVLW 01110000B
MOVWF TRISB
MOVLW 10000000B ;transfere o literal 080h para o acumulador
MOVWF OPTION_REG ;transfere o dado do acumulador(80h) para o option_reg
CLRF INTCON
CLRF PIE1
CLRF PR2
CLRF PCON
BANCO0
MOVLW 007H
MOVWF CMCON
CLRF PIR1
CLRF PORTB ; deixa portB com 00H
CLRF PORTA ; deixa portA com 00H
INI_DISP:
MOVLW 32H
CALL ENVINS
MOVLW 28H
CALL ENVINS
MOVLW 28H
CALL ENVINS
MOVLW 06H
CALL ENVINS
MOVLW 0CH
CALL ENVINS
MOVLW 01H ; limpa todo display
CALL ENVINS
LOOP:
CALL MENSA1
CALL TE
GOTO $
MENSA1:
CALL ENVMEN2
MOVLW 32H
CALL MANDA2
RETURN
TE: CALL ENVMEN1
MOVLW ' '
CALL MANDA2
MOVLW ' '
CALL MANDA2
MOVLW ' '
CALL MANDA2
MOVLW 'T'
CALL MANDA2
MOVLW 'E'
CALL MANDA2
MOVLW 'S'
CALL MANDA2
MOVLW 'T'
CALL MANDA2
MOVLW 'E'
CALL MANDA2
RETURN
ENVDADO2:
ENVDADO:
RETURN
ENVINS:
BCF RS ; INDICA QUE E INSTRUCAO PARA DISPLAY
CALL MANDA
RETURN
ENVMEN1: ; ESCREVE NA 1º LINHA DO DISPLAY
MOVLW 80H
GOTO ENVINS
ENVMEN2:
MOVLW 0C0H ; ESCREVE NA 2º LINHA DI DISPLAY
GOTO ENVINS
MANDA2:
BSF RS
MANDA:
MOVWF DISP ; MOVE DADO PARA VARIAVEL DISP
BCF DB7 ; zera via de daso do display
BCF DB6
BCF DB5
BCF DB4
; envia 4 bits mais significativos
BTFSC DISP,7
BSF DB7
BTFSC DISP,6
BSF DB6
BTFSC DISP,5
BSF DB5
BTFSC DISP,4
BSF DB4
NOP
BSF EN ; habilita display
CALL DELAY2MS ; espera 5ms e desabilita dosplay
BCF EN
CALL DELAY2MS ; espera 5ms e desabilita dosplay
BCF DB7 ; zera via de daso do display
BCF DB6
BCF DB5
BCF DB4
; envia 4 bits menos significativos
BTFSC DISP,3
BSF DB7
BTFSC DISP,2
BSF DB6
BTFSC DISP,1
BSF DB5
BTFSC DISP,0
BSF DB4
CALL DELAY2MS ; espera 5ms e desabilita dosplay
BCF EN
CALL DELAY2MS ; espera 5ms e desabilita dosplay
RETURN
DELAY2MS:
MOVLW 2
MOVWF 22H
DEL:
MOVLW 255
MOVWF 23H
DEL1:
DECFSZ 23H,1
GOTO DEL1
DECFSZ 22H,1
GOTO DEL
RETURN
END