Hallo,

es liegt bei mir ein ähnliches Problem vor. Ich verwende allerdings einen PIC16F84A und 162C-LCD-Anzeige.

Mein Skript:
Code:
list p=16f84
;**************************************************************
;*  	Pinbelegung
;*	----------------------------------	
;*	PORTA: 	0 - 
;*		1 -
;*		2 -	
;*		3 -
;*		4 -
;*	PORTB:	0 LCD Display E
;*		1 		
;*		2 LCD Display RS
;*		3 LCD Display R/W	
;*		4-7 LCD Display D4 .. D7 
;*	
;**************************************************************
;
;
; LCD-Display 
;
; Taktquelle: 4 MHz
;
;**************************************************************
; Includedatei für den 16F84 einbinden

	#include <P16F84A.INC>
	
; Configuration festlegen
; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator

	__CONFIG	_PWRTE_ON & _WDT_OFF & _XT_OSC
;**************************************************************
; Variablennamen vergeben

loops   Equ     0x22            ; Zähler für Warteschleife 
loops2  Equ     0x23            ; Zähler für Warteschleife 
Daten	Equ		0x24 
;**************************************************************
;Ersetzungen:
LcdE	equ	0		; enable Lcd
LcdRw	equ	3		; read Lcd
LcdRs	equ	2		; Daten Lcd (nicht control)	




Init:
	bsf   STATUS,RP0; ->Bank 1
	movlw B'00000000' 
	movwf TRISB;->PortB: alle outputs
	bcf   STATUS,RP0; ->Bank 0
	movwf PORTB;-> alles auf null setzen
	call InitLcd;-> initialisieren
	;Buchstabe einfuegen
	movlw 'H'
	bsf	PORTB, LcdRs	; auf den Textpuffer schreiben
	call Datenreinkopieren; Die Daten werden herein kopiert
	bcf	PORTB, LcdRs
Main ;Endlosschleife
	goto Main
InitLcd
	;auf das Ende des internen Resets warten 
	call Warten
	call Warten
	call Warten
	call Warten
	call Warten
	call Warten
	call Warten
	call Warten
	call Warten
	call Warten
	call Warten
	;Interface auf 8 bit Eingang setzen
	call Achtbitsetzen
	call Achtbitsetzen
	call Achtbitsetzen
	;Interface auf 4-bit Eingang setzen
	call Vierbitsetzen
	;Interface als zwei zeilig einstellen
	call zweizeilig
	call Display_aus
	call Displayloeschen
	call kurser_rechts_shift
	call Display_ein
	return
Achtbitsetzen; Achtbit-Datenbus einstellen
	call Aufnullsetzten; alle Ausgaenge von PortB werden auf low setztrn
	bsf PORTB,5
	bsf PORTB,4
	call Absenden
	return
Vierbitsetzen; Vierbit-Datenbus einstellen
	call Aufnullsetzten; alle Ausgaenge von PortB werden auf low setzen
	bsf PORTB,5
	call Absenden
	return
Absenden
	bsf PORTB,LcdE
	call Warten
	call Warten
	call Warten
	bcf PORTB,LcdE	
	call Warten
	return
Aufnullsetzten
	movlw B'00000000'
	movwf PORTB
	return
Datenreinkopieren
	call Aufnullsetzten; alle Ausgaenge von PortB werden auf low setzen
	;Erster Teil einfuegen (ersten vier Bit)
	btfsc Daten, 7
		bsf PORTB,7
	btfsc Daten, 6
		bsf PORTB,6
	btfsc Daten, 5
		bsf PORTB,5
	btfsc Daten, 4
		bsf PORTB,4
	call Absenden
	call Aufnullsetzten; alle Ausgaenge von PortB werden auf low setzen
	;Zweiter Teil einfuegen 
	btfsc Daten, 3
		bsf PORTB,7
	btfsc Daten, 2
		bsf PORTB,6
	btfsc Daten, 1
		bsf PORTB,5
	btfsc Daten, 0
		bsf PORTB,4
	call Absenden
	return
Displayloeschen
	movlw B'00000001'
	movwf Daten
	call Datenreinkopieren
	return
Display_aus
	movlw B'00001000'
	movwf Daten
	call Datenreinkopieren
	return

Display_ein
	movlw B'00001100'
	movwf Daten
	call Datenreinkopieren
	return
zweizeilig
	movlw B'00100000'
	movwf Daten
	call Datenreinkopieren
	return
kurser_rechts_shift
	movlw B'00000010'
	movwf Daten
	call Datenreinkopieren
	movlw B'00001111'
	movwf Daten
	call Datenreinkopieren
	return
Warten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	call MSWarten
	return
MSWarten
        movlw   .110           ; Zeitkonstante für 1ms
        movwf   loops2

Wai2    nop 
        nop
        nop
        nop
        nop
        nop
        decfsz  loops2, F      ; 1 ms vorbei?
        goto    Wai2           ; nein, noch nicht 
        return;
        
        
        end
Es passiert nichts. Wenn man den Kontrast hochregelt, stellt man fest das nur in der unteren Zeile graue Kästchen erscheinen.
Mit einem Logikprüfer habe ich schon meinen PIC überprüft, es scheint als ob der PIC funktionieren würde. Müssen noch irgendwelche Widerstände zwischen PIC und LCD eingebaut werden? / Oder woran kann so ein Verhalten liegen?


mfg
Sebastian