lcd_zeit: ; 4 Millisekunden push r16 push r17 ldi r16,CPU_Frequency/375000 lcd_zeit1: ldi r17,0 lcd_zeit2: dec r17 brne lcd_zeit2 ldi r17,0 lcd_zeit3: dec r17 brne lcd_zeit3 dec r16 brne lcd_zeit1 pop r16 pop r17 ret lcd_wrcom: cbi lcd_rs_port,lcd_rs_bit rjmp lcd_wr lcd_wrdat: sbi lcd_rs_port,lcd_rs_bit lcd_wr: push r18 push r17 rcall lcd_wrcom1 rcall lcd_wrcom1 ;kleine Zeitschleife 50 µS ldi r17,CPU_Frequency/66000 lcd_loop: dec r17 brne lcd_loop pop r17 pop r18 ret lcd_wrcom1: swap r16 mov r18,r16 andi r18,0b00001111 in r17,lcd_dat_port andi r17,0b11110000 or r17,r18 out lcd_dat_port,r17 nop nop nop sbi lcd_en_port,lcd_en_bit nop nop nop cbi lcd_en_port,lcd_en_bit ret lcd_init: cbi lcd_en_port,lcd_en_bit ;EN aus sbi lcd_en_ddr,lcd_en_bit ;EN Ausgang aktiv sbi lcd_rs_ddr,lcd_rs_bit ;RS Ausgang aktiv in r16,lcd_dat_ddr ori r16,0b00001111 ;Datenausgänge aktiv out lcd_dat_ddr,r16 cbi lcd_rs_port,lcd_rs_bit ;Kommandomodus ldi r16,0b00111000 ;8Bit,2Zeilen,5x7 pixel rcall lcd_wrcom1 rcall lcd_zeit ldi r16,0b00111000 ;8Bit,2Zeilen,5x7 pixel rcall lcd_wrcom1 rcall lcd_zeit ldi r16,0b00111000 ;8Bit,2Zeilen,5x7 pixel rcall lcd_wrcom1 rcall lcd_zeit ldi r16,0b00101000 ;4Bit,2Zeilen,5x7 pixel rcall lcd_wrcom1 rcall lcd_zeit ldi r16,0b00000100 ;Dislplay aus rcall lcd_wrcom ldi r16,0b00000001 ;Display clear rcall lcd_wrcom rcall lcd_zeit ldi r16,0b00000110 ;Cursor rechts bei Eintrag rcall lcd_wrcom ldi r16,0b00001110 ;Display und Cursor ein rcall lcd_wrcom rcall lcd_zeit ret