.include "m8def.inc" .include "Display1.asm" ; LCD-Routinen werden hier eingefügt .def temp1 = r16 .def temp2 = r17 .def temp3 = r18 .def temp4 = r19 ldi temp1, HIGH(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPH, temp1 ldi temp1, LOW(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPL, temp1 ldi temp1, 1<= 8 MHz) kann es notwendig sein, ; vor dem Enable High 1-2 Wartetakte (nop) einzufügen. ; Siehe dazu http://www.mikrocontroller.net/topic/81974#685882 lcd_enable:nop nop nop nop nop sbi PORTC, 1 ; set bit PortC bit 1 => Enable high nop ; 3 Taktzyklen warten nop nop nop nop cbi PORTC, 1 ; Enable wieder low ret ; Und wieder zurück ; Pause nach jeder Übertragung delay50us: ; 50us Pause ldi temp1, $42 delay50us_:dec temp1 brne delay50us_ ret ; wieder zurück ; Längere Pause für manche Befehle delay5ms: ; 5ms Pause ldi temp1, $21 WGLOOP0: ldi temp2, $C9 WGLOOP1: dec temp2 brne WGLOOP1 dec temp1 brne WGLOOP0 ret ; wieder zurück ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden lcd_init: cbi PORTC, 0 cbi PORTC, 1 ldi temp3,50 powerupwait: rcall delay5ms rcall delay5ms rcall delay5ms dec temp3 brne powerupwait ldi temp1, 0b00110000 ; muss 3mal hintereinander gesendet ; werden zur Initialisierung ;lt tutorial dez3 senden an die 4 ;belegten eingengsbits des displays out PORTD, temp1 rcall lcd_enable ; 1 rcall delay5ms rcall lcd_enable ; 2 rcall delay5ms rcall lcd_enable ; und 3! rcall delay5ms ldi temp1, 0b00100000 ; 4bit-Modus einstellen lt tutorial dez2 senden out PORTD, temp1 rcall lcd_enable rcall delay5ms ; ab hier ist 4bit modus eingestellt ldi temp1, 0b00101000 ; 4Bit / 2 Zeilen / 5x8 rcall lcd_command ldi temp1, 0b00001100 ; Display ein / Cursor aus / kein Blinken rcall lcd_command ldi temp1, 0b00000100 ; inkrement / kein Scrollen rcall lcd_command ret ; Sendet den Befehl zur Löschung des Displays lcd_clear: ldi temp1, 0b00000001 ; Display löschen rcall lcd_command rcall delay5ms ret ; Sendet den Befehl: Cursor Home lcd_home: ldi temp1, 0b00000010 ; Cursor Home rcall lcd_command rcall delay5ms ret ; bei diesem code muß zuvor Portb und C auf Ausgang geschalten werden!!!