Hallo Leute =)

Ich erhoffe mir mal wieder eine gute Hilfe von euch und zwar
geht es um folgendes:
Auf mikrocontroller.net findet man ja im Toutorial eine
sehr gute beschreibung für eine LCD Ansterungsroutine
für eine 4 Bit Ansteuerung.
Da ich aber an meinen ATMega8 viele Pins habe und ich
nur ein paar Pins gebrauche (Display + 2 AD Wandler )
habe ich die Routine ( versucht )
auf 8 Bit umgeschrieben... und nun erhoffe ich mir
ob ihr diese mal auf Fehler kontrollieren könntet oder weitere
Tipps dazu geben könntet =)

Das Toturial auf µC.net
http://www.mikrocontroller.net/artic...-Tutorial:_LCD

Liebe Grüße
Namenlos

Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 8bit-Interface                              ;;
;;                                             ;;
;; D0    =	PortD0                             ;; 
;; D1    =  PortD1                             ;;      
;; D2    =  PortD2                             ;;    
;; D3    =  PortD3                             ;;
;; D4    =  PortD4                             ;;
;; D5    =  PortD5                             ;; 
;; D6    =  PortD6                             ;; 
;; D7    =  PortD7							   ;;	
;;                                  		   ;;
;; R/W   =  PortB0                             ;;   
;; RS    =  PortB1  						   ;;
;; E	 =  PortB2 					           ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

.def init   = r21
.def temp2 = r22
.def temp3 = r23

.ifndef XTAL
.equ XTAL = 4000000
.endif

  
lcd_data:  	;RS = 1,;sendet ein Datenbyte an das LCD

			 push	init
          	 sbi 	PortB, 1			 		
		     rcall  lcd_enable
          	 rcall  delay50us
			 pop	init
         	 ret                          



lcd_command:;sendet einen Befehl an das LCD

        	push	init
           	cbi 	PortB, 1 				;RS=0, Daten werden geschrieben
            rcall   lcd_enable
          	rcall   delay50us
			pop		init
            ret							;zurück zum Hauptprogramm

 
 
lcd_enable: ;erzeugt den Enable-Puls

 		    ;Bei höherem Takt (>= 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


            sbi PORTB, 2                 ; Enable high
            nop                          ; 3 Taktzyklen warten
            nop
            nop
            cbi PORTB, 2                 ; Enable wieder low
            ret                          ; Und wieder zurück                     
 



delay50us:  ;Pause nach jeder Übertragung,50us

            ldi  init, ( XTAL * 50 / 3 ) / 1000000
delay50us_:
            dec  init
            brne delay50us_
            ret                          ; wieder zurück

 
 
delay5ms:                               ; 5ms Pause
           ldi  init, ( XTAL * 5 / 607 ) / 1000
WGLOOP0:   ldi  temp2, $C9
WGLOOP1:   dec  temp2
           brne WGLOOP1
           dec  init
           brne WGLOOP0
           ret                          ; wieder zurück


lcd_init:  ;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden



           ldi  	temp3,50
powerupwait:
           rcall 	delay5ms
           dec  	temp3
           brne 	powerupwait
           ldi 		init, 0b00000011        ; muss 3mal hintereinander gesendet
           out 		PortD, init             ; werden zur Initialisierung
           rcall 	lcd_enable             ; 1
           rcall 	delay5ms
           rcall 	lcd_enable             ; 2
           rcall 	delay5ms
           rcall 	lcd_enable             ; und 3!
           rcall 	delay5ms
           
           ldi 		init, 0b00110000        ; 8Bit / 2 Zeilen / 5x7
           rcall 	lcd_command
           ldi 		init, 0b00001100        ; Display ein / kein Cursor / kein Blinken
           rcall 	lcd_command
           ldi 		init, 0b00000100        ; inkrement / kein Scrollen
           rcall 	lcd_command
           ret



lcd_clear: ;Sendet den Befehl zur Löschung des Displays



           ldi 		init, 0b00000001   ; Display löschen
           rcall 	lcd_command
           rcall 	delay5ms
           ret
 

 


lcd_home:  ;Sendet den Befehl: Cursor Home



           ldi 		init, 0b00000010   ; Cursor Home
           rcall 	lcd_command
           rcall 	delay5ms
           ret