.include "m16def.inc" .equ F_CPU = 8000000 // INTERRUPTVEKTOREN //******************************************************************** begin: rjmp main reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti //******************************************************************** //INITIALISIERUNG STACKSPEICHER //********************************* main: ldi r16 , LOW(RAMEND) out SPL , r16 ldi r16 , HIGH(RAMEND) out SPH , r16 //********************************* /* LCD Initialisierungsequenz 0x30 0x30 0x30 0x20 0x28 0x01 0x0C */ rcall wait50 ldi r16 , 0b11111100 // LCD-Display: (D7,D6,D5,D4,E,RS,/,/) = PORTD out DDRD,r16 ldi r16 , 0x30 out PORTD,r16 rcall ENABLE rcall ENABLE rcall ENABLE ldi r16,0x20 out PORTD,r16 rcall ENABLE ldi r20 , 0x28 rcall SendCommand ldi r20 , 0x01 rcall SendCommand ldi r20 , 0x0C rcall SendCommand ldi r20,65 //'A' zum Display schicken rcall SendData while: rjmp while //FUNCTION SendData: Zeichen zum Display schicken //********************************************************************** SendData: sbi PORTD,2 //RS-BIT setzen rcall SendCommand cbi PORTD,2 //RS_BIT löschen ret //FUNCTION SendCommand: Zeichen -> R20 //Beschreibung: Setzt HIGH-Nibble von R20 an PD7...PD4 -> Enable // Setzt LOW -Nibble von R20 an PD7...PD4 -> Enable //********************************************************************** SendCommand: push r16 push r17 push r18 /* cbi PORTD,7 cbi PORTD,6 cbi PORTD,5 cbi PORTD,4*/ mov r16 , r20 //R20 -> OriginalZeichen andi r16 , 0b11110000 //HIGH NIBBLE in R16 out PORTD,r16 rcall ENABLE /*cbi PORTD,7 cbi PORTD,6 cbi PORTD,5 cbi PORTD,4*/ mov r17 , r20 rol r17 rol r17 rol r17 rol r17 andi r17,0b11110000 out PORTD,r17 rcall ENABLE pop r18 pop r17 pop r16 ret //FUNCTION Enable //Beschreibung: Mit fallender Flanke des Enable_PIN werden 4-BIT(PD7...PD4) vom Display verarbeitet //************************************************************************************************* Enable: sbi PORTD,3 // ENABLE-PIN setzen nop nop nop nop nop nop cbi PORTD,3 //ENABLE-PIN löschen rcall wait4100 ret //FUNCTION wait4100: //Beschreibung: Funktion dauert 4100 Mikrosekunden bei Externem Quarz 8MHz //************************************************************************************************* wait4100: push r16 push r17 push r18 ldi r18,8 Warte13: ldi r17,30 Warte12: ldi r16,45 Warte11: dec r16 brne Warte11 dec r17 brne Warte12 dec r18 brne Warte13 pop r18 pop r17 pop r16 ret //FUNCTION wait50: //Beschreibung: Funktion dauert 50 Millisekunden bei Externem Quarz 8MHz //************************************************************************************************* wait50: push r16 push r17 push r18 ldi r18,40 Warte23: ldi r17,19 Warte22: ldi r16,175 Warte21: dec r16 brne Warte21 dec r17 brne Warte22 dec r18 brne Warte23 pop r18 pop r17 pop r16 ret