Hallo zusammen !!!

Der ursprüngliche Code, welcher in Assembler geschrieben ist:

Code:
.include "m8def.inc"
	
	ldi r16, 0xFF
	out DDRD,r16						;Im Datenrichtungsregister PORTD als Ausgang deklarieren

	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16

	rcall Warten
;
;	cbi PORTD, 6					;Den 6.Port (PD6) = R/W auf low setzen um in den Schreibmodus zu stellen
	cbi PORTD, 4					;Den 4.PORT (PD4) auf low setzen um in den Komandomodus zu wechseln
;	;ldi r16,0b00000010
	out PORTD, r16
	sbi PORTD, 5					;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
	nop								; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
	nop
	nop
	cbi PORTD, 5					;PD5 wieder auf LOW setzen
;
;	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
;	ldi r16, HIGH(RAMEND)
;	out sph, r16
;	ldi r16, LOW(RAMEND)
;	out SPL, r16
;;	
	rcall Warten
;;	
	ldi r16, 0b00000010
	out PORTD, r16					;Den 1.Port (PD1) am Display DB5 auf High setzen um in den 4-Bit Modus zu wechseln

	sbi PORTD, 5					;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
	nop								; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
	nop
	nop
	cbi PORTD, 5
;;	
;	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
;	ldi r16, HIGH(RAMEND)
;;	out sph, r16
;	ldi r16, LOW(RAMEND)
;	out SPL, r16
	rcall Warten
;	rcall Befehl
	


					;***********************************************************************************************************************************
	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16
	rcall Warten

	ldi r16, 0b01001101				;M
	rcall Ausgabe
	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16
	
	rcall Warten

	ldi r16, 0b01100001				;a
	rcall Ausgabe
	ldi r18, 0xFF					;Dem Diplay Zeit geben um sich selbst zu initialisieren
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16
	
	rcall Warten
....

hier wiederholt sich der Code immer wieder, nur der Eintrag in r16 wird auf andere Buchstaben (Binärcode) geändert

.....

und hier geht´s weiter:

Code:
	ldi r16, 0b00100001				;!
	rcall Ausgabe
	ldi r18, 0xFF				;Dem Diplay Zeit geben um sich selbst zu initialisieren
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16
	
	rcall Warten

loop1:
rjmp loop1

Befehl:
	;ldi r16, 125					;Ab dieser Zeile ist das Programm nur Abgeschrieben

	mov r17,r16						;  Kopie von r16 in r17 eintragen

	swap r16						; vertauscht die beiden Nibbles von r16 (Die Bit´s 0-3 und 4-8 werden vertauscht)

	andi r16, 0b00001111			; Nur die vier unteren (mit 1 markierten)
									; Bits werden übernommen, alle anderen werden null

	sbr r16, 0b00010000				; Bit 4 auf low setzen, alle anderen Bits bleiben gleich
	
	out PORTD, r16
	
	sbi PORTD, 5					;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
	nop								; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
	nop
	nop
	cbi PORTD, 5					;PD5 wieder auf LOW setzen

	andi r17, 0b00001111

	sbr r17, 1<<4					; nur eine andere Schreibweise von oben

	out PORTD, r17

	sbi PORTD, 5
	nop
	nop
	nop
	cbi PORTD, 5
	sbi PORTD, 4
	ret

Ausgabe:
	;ldi r16, 125					;Ab dieser Zeile ist das Programm nur Abgeschrieben

	mov r17,r16						;  Kopie von r16 in r17 eintragen

	swap r16						; vertauscht die beiden Nibbles von r16 (Die Bit´s 0-3 und 4-8 werden vertauscht)

	andi r16, 0b00001111			; Nur die vier unteren (mit 1 markierten)
									; Bits werden übernommen, alle anderen werden null

	;sbr r16, 0b00010000				; Bit 4 setzen, alle anderen Bits bleiben gleich
	sbr r17, 1<<4
	out PORTD, r16
	
	sbi PORTD, 5					;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
	nop								; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
	nop
	nop
	cbi PORTD, 5					;PD5 wieder auf LOW setzen

	andi r17, 0b00001111

	sbr r17, 1<<4					; nur eine andere Schreibweise von oben

	out PORTD, r17

	sbi PORTD, 5
	nop
	nop
	nop
	cbi PORTD, 5
	ret
 
Warten:
	dec r18
	brne Warten
ret

BussyAbfrage :

	ldi r18, 0b00010100					;Dem Diplay Zeit geben um sich selbst zu initialisieren
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16
	
	rcall Warten

	sbi PORTD, 6					;Port 6 (PD6) = R/W auf high setzen, für den lesemodus
	cbi DDRD, 3						;PORTD-3 (PD3) von Ausgang auf Eingang (PIND-3) ändern
	nop								
	sbi PORTD, 5					; PD5 (E) auf High setzen
	nop
	nop
	nop
	in r16,PIND						; Einlesen des oberen Daten Nipples von Port D
	nop
	cbi PORTD, 5					; PD5 (E) auf Low setzen (E-Wackeln)
	nop
	sbi PORTD, 5						; PD5 (E) wieder auf High setzen
	nop
	in r17, PIND					; Einlesen des unteren Daten Nipples von Port D
	nop
	cbi PORTD, 5					; PD5 (E) auf Low setzen (E-Wackeln)
	
	swap r16
	andi r16, 0b10000000
 	brne BussyAbfrage
	cbi PORTD, 6					;Den 6.Port (PD6) = R/W auf low setzen um in den Schreibmodus zu stellen					
	sbi DDRD,3						; PORT-3 (PD3) wieder als Ausgang deffinieren
ret
Die Funktionen `Befehl` und `BussyAbfrage` habe ich im Code zweck´s Versuch ebenfalls eingebaut gehabt. Ich kann aber jetzt nicht mehr genau sagen wo, deshalb habe ich auch keinen `rcall` Befehl mehr dafür. Wenn ich diesen Code auf den Atmega brenne, ist das Display einfach leer.

Mit dem folgenden Code, dieser war, bzw. ist nur zum Testen, und deshalb auch nicht komplett. Aber hier zeigt sich wenigstens etwas am Display. Nur bis gestern hatte ich nur dann Bewegung am Display, wenn ich mit der Hand in die nähe der Anschlußleitungen (Vcc, GND, DB0-DB7...usw) gekommen bin. Ansonsten war ruhe am Display. Jetzt tut sich auch etwas, auch wenn ich nicht in der nähe bin. Die Lötstellen habe ich, wie bereits erwähnt, kontolliert und alle nachgelötet.
Hier der zweite Code:
Code:
.include "m8def.inc"

 ldi r16, 0xff
 out DDRD, r16		;PORTD als Ausgang Initialisieren

 out DDRB, r16		;PORTB als Ausgang initialisieren

ldi r18, 0b1100100				
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16


	rcall Warten						;Dem Diplay Zeit geben um sich selbst zu initialisieren

 ldi r16, 0b00000011
 out DDRB, r16

	ldi r18, 0b1100100				
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16


	rcall Warten						;Dem Diplay Zeit geben um sich selbst zu initialisieren


  ldi r17, 0b00000001
 loop:
  
  out DDRD, r17


ldi r18, 0b1100100				
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16


	rcall Warten						;Dem Diplay Zeit geben um sich selbst zu initialisieren

  ;ldi r16, 0b00000010
  ;out DDRB, r16

ldi r18, 0b1100100				
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16


	rcall Warten

	inc r17

ldi r16, 0b00000000
  out DDRB, r16

ldi r18, 0b1100100				
	ldi r16, HIGH(RAMEND)
	out sph, r16
	ldi r16, LOW(RAMEND)
	out SPL, r16


	rcall Warten 
  rjmp loop


Warten:
	dec r18
	brne Warten
ret
Ich hoffe ihr könnt etwas damit anfangen.

Spitfire