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)
Lesezeichen