Hab den Code doch noch auf dem USB Stick gefunden... war zwar nicht ganz komplett aber habe den rest noch ergänzt...

bitte nicht hauen für die Programmierung es wird dann schon noch alles schön mit senderoutinen und so gemacht, ist halt einfach für den ersten test...

gruss bluesmash


Code:
;-----------------------------------------------------------------------------------------------------------------
; LCD Ansteuerung
;-----------------------------------------------------------------------------------------------------------------
;
; Autor: Roman Sutter
; Datum: 28.04.2007
; Filename: LCD.asm
;
;-----------------------------------------------------------------------------------------------------------------
;
; Programmfunktion:
; Name auf LCD ausgeben
;
;-----------------------------------------------------------------------------------------------------------------
;
;
;
;
;
;
;
;
;
;
;
;
;-----------------------------------------------------------------------------------------------------------------


;-----------------------------------------------------------------------------------------------------------------
; Definition des Prozessors:
;-----------------------------------------------------------------------------------------------------------------

	list	  p=16f873
	#include  <p16f873a.inc>
	__CONFIG  _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

;-----------------------------------------------------------------------------------------------------------------
; Makros Bankumschaltung
;-----------------------------------------------------------------------------------------------------------------

BANK_0  MACRO
		BCF	 STATUS,5
		BCF  STATUS,6
		ENDM

BANK_1  MACRO
		BSF	 STATUS,5
		BCF  STATUS,6
		ENDM

BANK_2  MACRO
		BCF	 STATUS,5
		BSF  STATUS,6
		ENDM

BANK_3  MACRO
		BSF	 STATUS,5
		BSF  STATUS,6
		ENDM

;-----------------------------------------------------------------------------------------------------------------
; Variablen Definitionen
;-----------------------------------------------------------------------------------------------------------------

	w_temp 			EQU	0x70
	status_temp 		EQU 	0x71
	counter 			EQU 	0x72


;Variablen für Wait
	Zähler1			EQU		0x22
	Zähler2			EQU		0x23
	Zähler3			EQU		0x24

;-----------------------------------------------------------------------------------------------------------------
; Konstanten
;-----------------------------------------------------------------------------------------------------------------

	FOSC	 = .4000000		;Oszillator Frequenz
	Zeitkonstante = .100	;Konstante für Wartezeit *10ms

;-----------------------------------------------------------------------------------------------------------------
; Definitionen
;-----------------------------------------------------------------------------------------------------------------

	#DEFINE 	lcd_e 	PORTA,2		
	#DEFINE 	lcd_rs 	PORTA,5		
	#DEFINE 	lcd_rw 	PORTC,1		

;-----------------------------------------------------------------------------------------------------------------
; Adresse für Programm Start und Interrupt Vektor
;-----------------------------------------------------------------------------------------------------------------

	ORG 0x000				;Prozessor Reset Vector
	clrf	PCLATH			;PC cleared
	goto 	HW_Config			;An den Anfang des Programms springen

	ORG 0x004				;Interrupt Vector
	movwf 	w_temp		;Inhalt des W-Register speichern
	movfw	STATUS  			;Statusregister in W-Register kopieren
	movwf	status_temp			;Status in status_temp speichern

HW_Config 

;-----------------------------------------------------------------------------------------------------------------
; Configuration Ports
;-----------------------------------------------------------------------------------------------------------------
	BANK_1
	;Ausgänge für LED
	movlw 	0x00			;0=Output	1=Input
	movwf 	TRISC      		;Alle Pin's an Portc als Ausgänge definieren
	
	;Ports für Matrixtastatur			
	movlw 	B'11110000'		;PortB4-B7 Als Eingänge, B0-B3 als Ausgänge Definieren		
	movwf 	TRISB
	bcf		OPTION_REG,7	;Pull-UP Widerstände aktivieren
	
	;Ports für LCD Display
	movlw 	B'11011011'		;PortA2+5 als Ausgänge, Rest Eingänge		
	movwf 	TRISA

;-----------------------------------------------------------------------------------------------------------------
; Start Programm
;-----------------------------------------------------------------------------------------------------------------
	BANK_0


	call lcd_init
                
 	call wait_1s

	;Zeichen Ausgeben
	bcf		lcd_e
	bsf		lcd_rs
	bcf		lcd_rw
	
	movlw	b'00000101'		;High Nibble
	movwf	PORTB
	bsf		lcd_e
	NOP
	bcf		lcd_e
	call	wait_2ms
	movlw	b'00001001'		;Low Nibble
	movwf	PORTB
	bsf		lcd_e
	NOP
	bcf		lcd_e
	call	wait_2ms

warten
	goto warten

;#####--Subroutine LCD Initialisieren--#####
lcd_init
	call wait_1s
	;Steuerleitungen setzen
	bcf		lcd_e
	bcf		lcd_rs
	bcf		lcd_rw	
	;LCD in 4-Bit Modus Schalten
	movlw	b'00000010'
	movwf	PORTB
	bsf		lcd_e
	bcf		lcd_e
	call	wait_2ms
	;4-Bit datenlänge, 2-Zeiliges Display, 5x7 Font
	movlw	b'00000010'		;High Nibble
	movwf	PORTB
	bsf		lcd_e
	bcf		lcd_e
	call	wait_2ms
	movlw	b'00001000'		;Low Nibble
	movwf	PORTB
	bsf		lcd_e
	bcf		lcd_e
	call	wait_2ms
	;Display ein. Cursor ein, Cursor blinken
	movlw	b'00000000'		;High Nibble
	movwf	PORTB
	bsf		lcd_e
	bcf		lcd_e
	call	wait_2ms
	movlw	b'00001111'		;Low Nibble
	movwf	PORTB
	bsf		lcd_e
	bcf		lcd_e
	call	wait_2ms
	;Display löschen, Cursor auf 1. Spalte von 1. Zeile
	movlw	b'00000000'		;High Nibble
	movwf	PORTB
	bsf		lcd_e
	bcf		lcd_e
	call	wait_2ms
	movlw	b'00000001'		;Low Nibble
	movwf	PORTB
	bsf		lcd_e
	bcf		lcd_e
	call	wait_2ms
	;Cursor Auto-Increment
	movlw	b'00000000'		;High Nibble
	movwf	PORTB
	bsf		lcd_e
	bcf		lcd_e
	call	wait_2ms
	movlw	b'00000110'		;Low Nibble
	movwf	PORTB
	bsf		lcd_e
	bcf		lcd_e
	call	wait_2ms
	
	return



;#####--Subroutine 2ms Warten--#####
wait_2ms	
	movlw	.3				;Schleife mit 3 * 750us
	movwf	Zähler2
Schleife2
	movlw	.250
	movwf	Zähler1			;Schleife mit 250 Durchgängen ca. 750us
Schleife1					
		DECFSZ	Zähler1
	goto	Schleife1	
		DECFSZ	Zähler2
	goto	Schleife2

	return


;#####--Subroutine 1s Warten--#####
wait_1s
	movlw	.100				;Zähler3 mit Wert für 1s Schleifendurchläufe laden
	movwf	Zähler3
Schleife_3					
	movlw	.13				;Schleife für Zählung der 10ms Schleifendurchläufe
	movwf	Zähler2
Schleife_2
	movlw	.250
	movwf	Zähler1			;Schleife mit 250 Durchgängen ca. 750us
Schleife_1					
		DECFSZ	Zähler1
	goto	Schleife_1	
		DECFSZ	Zähler2
	goto	Schleife_2
		DECFSZ	Zähler3
	goto	Schleife_3
	
	return


	END	(für Assembler)