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







Zitieren

Lesezeichen