Hallo, da ichs jetzt endlich mal geschafft habe meinen uC zu flashen sitze ich vor dem nächsten Problem. Hab mir ne einfache Routine zur LCD Initialisierung geschrieben und zwar für ein 20x4 (204B Serie, KS0066U controller). Aber leider funktioniert das nicht so wirklich, vielleicht kann mal jemand drübersehen. .include "m32def.inc" .cseg .org 0x00 rjmp main ; Reset Handler .org 0x02 reti ; IRQ0 Handler .org 0x04 reti ; IRQ1 Handler .org 0x06 reti ; Timer2 Compare Handler .org 0x08 reti ; Timer2 Overflow Handler .org 0x0A reti ; Timer1 Capture Handler .org 0x0C reti ; Timer1 CompareA Handler .org 0x0E reti ; Timer1 CompareB Handler .org 0x10 reti ; Timer1 Overflow Handler .org 0x12 reti ; T0overflow ; Timer0 Overflow Handler .org 0x14 reti ; SPI Transfer Complete Handler .org 0x16 reti ; USART RX Complete Handler .org 0x18 reti ; UDR Empty Handler .org 0x1A reti ; USART TX Complete Handler .org 0x1C reti ; ADC Conversion Complete Handler .org 0x1E reti ; EEPROM Ready Handler .org 0x20 reti ; Analog Comparator Handler .org 0x22 reti ; Two-wire Serial Interface Handler .org 0x24 reti ; IRQ2 Handler .org 0x26 reti ; Timer0 Compare Handler .org 0x28 reti ; Store Program Memory Ready Handler ;Definitionen .def temp1=r16 .def temp2=r17 main: ; UND LOS ------------------------------------------------------------------- ; Initialisierungen ldi r16, LOW(RAMEND) ;Einrichtung des Stacks für Rückssprung out SPL, r16 ldi r17, HIGH(RAMEND) out SPH, r17 rjmp lcd_init loop07: rjmp loop07 ; 5. LCD-Routine lcd_command: push r16 ;Register sichern push r17 ser r16 out DDRA, r16 ;PortA als Ausgang out DDRC, r16 ;PortC als Ausgang CBI PORTC, 1 ;R/W=Low, Schreiben aktiv CBI PORTC, 2 ;RS=Low, Commandos werden gesendet OUT PORTA, temp1 Rcall lcd_enable nop Rcall lcd_delay50us pop r17 ;Register wieder herstellen pop r16 ret lcd_enable: ser r16 out DDRC, r16 ;PortC als Ausgang sbi PORTC, 0 ;Enable-Bit setzen nop ;warten nop ;warten nop ;warten (mindestens 220ns) nop ;warten nop nop nop nop ;warten nop ;warten cbi PORTC, 0 ;Enable-Bit rücksetzen ret ;LCD -> 50us Warteschleife lcd_delay50us: push r16 push r17 ldi temp1, 0x05 de_loop1: ldi temp2, 0x34 de_loop2: dec temp2 brne de_loop2 dec temp1 brne de_loop1 pop r17 pop r16 ret ;LCD -> 5ms Warteschleife lcd_delay5ms: push r16 push r17 ldi temp1, 99 de2_loop: rcall lcd_delay50us dec temp1 brne de2_loop pop r17 pop r16 ret ; 5.6 LCD -> Initialisierung lcd_init: push r16 ;Register sicheren push r17 ldi temp1, 50 ;250ms Wartezeit fürs Display powerupwait: rcall lcd_delay5ms dec temp1 brne powerupwait ser temp1 out DDRA, temp1 ;PortA auf Ausgang out DDRC, temp1 ;PortC auf Ausgang ldi temp1, 0x30 ;LCD-Start-Sequenz out PORTA, temp1 ;RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 clr temp1 ;0 0 0 0 1 1 out PORTC, temp1 rcall lcd_enable ;1x gesendet rcall lcd_delay5ms rcall lcd_enable ;2x gesendet rcall lcd_delay5ms rcall lcd_enable ;3x gesendet rcall lcd_delay5ms ldi temp1, 0x30 ;8-bit Modus aktivieren, 1 Line, 5*7 Dots out PORTA, temp1 rcall lcd_enable rcall lcd_delay5ms ldi temp1, 0x08 ;Display off out Porta, temp1 rcall lcd_enable rcall lcd_delay5ms ldi temp1, 0x01 ;Display clear out Porta, temp1 rcall lcd_enable rcall lcd_delay5ms ldi temp1, 0x06 ;Increment, noShift out porta, temp1 rcall lcd_enable rcall lcd_delay5ms ;Initialisierung beendet pop r17 pop r16 rjmp loop07
Ach ja nochwas, das ganze läuft an nem ATmega32 mit 16MHz, im moment zum testen allerdings nur mit 1MHZ weil ich dachte dass es vielleicht an den Wartezyklen liegt ..
Wenn Du jetzt noch sagst, was genau "nicht so wirklich" funktioniert, wäre das hilfreich... BTW: Für den ATMega32 stimmt die Interrupt-Tabelle aber überhaupt nicht. Der Mega32 hat mehr als 8 KB Flash und deshalb sind die Vektoren 32 Bit lang, weil rjmp nur 8K ansprechen kann. Dürfte aber für Deine Anwendung keine Schwierigkeiten machen. Am besten immer die Vektortabelle aus dem entsprechenden Datenblatt übernehmen. Dann passiert sowas nicht.
Es gibt hier auf der Seite ja auch kein Tutorium, das dieses so seltene Thema auch noch beschreibt...
ich sehe nirgends eine Busyflag-Abfrage, ist der Controller kompatibel zum HD44780?
@Christoph: Der macht das mit den delays. Wenn das wirklich 5 ms sind, dann sollte das dicke reichen. Hab jetzt nur keine Lust, das nachzurechnen...
Das Problem ist dass mein Display einfach nur die beiden schwarzen Balken zeigt.
beide, oder nur eine reihe und eine halbe o.ä!? eigentlich benötigt man bei dem ersten delay doch mindestens 11ms, oder!? naja, ich würde einfach mal versuchen die wartezyklen noch größer zu machen, größer schadet eigentlich nie, nur wenn sie zu kurz sind,gibts probleme... d.
Es ist ein 4 Zeilen Display, Zeile 1 und 3 zeigen schwarz, liegt das wirklich nur an der zu hohen Kontrastspannung? @Dennis Zur Initialisierung sinds sogar 250ms die ich dem Display Zeit gebe, 50 mal in die 5ms Schleife.
Peter wrote: > Es ist ein 4 Zeilen Display, Zeile 1 und 3 zeigen schwarz, liegt das > wirklich nur an der zu hohen Kontrastspannung? Nein, das bedeutet, das dass Display immer noch nicht initialisiert ist.
>lcd_enable: >... >sbi PORTC, 0 ;Enable-Bit setzen >... >cbi PORTC, 0 ;Enable-Bit rücksetzen was soll das?
> out PORTA, temp1 ;RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 > clr temp1 ;0 0 0 0 1 1 * * Schau Dir mal den Kommentar zu diesen beiden Zeilen an. Abgesehen davon, dass der Kommentar mit der zweiten Codezeile überhaupt nichts zu tun hat, ist er zusätzlich noch irreführend. Sowas macht so ein Programm fürchterlich schwer lesbar und eine Fehlersuche echt anstrengend. Außerdem hast Du in Deinem Code z.B. mindestens drei verschiedene Schreibweisen für PORTA. So ein Programm zu lesen macht echt keinen Spaß! Da musst Du doch selbst irgendwann die Übersicht verlieren, oder nicht? Schreib das Programm doch erst mal ins reine. Groß- und Kleinschreibung sind zwar dem Assembler egal, aber dem menschliche Leser fehlen dadurch durchaus Blickfangpunkte. Und wenn Du r16 und r17 schon extra Namen gibst, warum verwendest Du sie dann nur ab und zu mal? Wozu soll übrigens das "pop r16" und "pop r17" vor dem Sprung in die Endlosschleife dienen? Ist zwar an dieser Stelle auch Wurscht, aber nicht dass Du bei einer Erweiterung darüber stolperst. Wenn man popt, ohne dass vorher was gepusht wurde, gibts u.U. Probleme mit dem Stack. Noch ne Frage zur Sicherheit: Dein µC läuft aber, oder?
@Jack Das ist doch nötig um dem LCD zu sagen dass die Daten auf den Leitungen DB0-7 jetzt richtig anliegen, nicht? Steht doch in sämtlichen Tutorien so. @Johnny.m Sorry für das Chaos, ich werds mal ins Reine fassen und das mit dem Kommentar liegt daran dass er eigentlich über 4 Zeilen geht, sieht vielleicht etwas komisch aus. Der uC sollte laufen, hab einfach mal auf PORTA 0xAA ausgegeben und das hat er brav erledigt.
Hast du geprüft ob alle Verbindungen zwischen uC - LCD in Ordnung sind? Mal alle einzeln wackeln lassen und schauen. MfG Falk
Wackeln lassen? Wie solls denn eigentlich nach Initialisierung aussehen? Keine schwarzen Balken mehr auf jeden Fall, nehm ich mal an.
> Wackeln lassen? Du toggelst einen Pin nach dem anderen und schaust mit einem Multimeter bzw. Ossi nach ob am LCD auch tatsächlich sich am richtigen Pin was tut. > Wie solls denn eigentlich nach Initialisierung aussehen? Richtig. Die schwarzen Balken müssen verschwinden.
Jetzt hab ich versucht die Pins einzeln zu toggeln, allerdings jedes mal neu geflasht, also für jeden Pin, weil ich wissen wollte ob er das auch vernünftig macht. Allerdings gibts da auch Probleme, ich hab den uC jetzt eigentlich so geflasht, dass PORTA PIN 2 Spg. führen sollte, allerdings scheint immer noch das Programm von davor drinnen zu sein, also führt PIN1 die Spg. Hab auch den ISP Programmer weggenommen und die Versorgungsspannung kurz, alles nach dem Flashen. Hat aber nix geholfen. Peter
@Peter > Jetzt hab ich versucht die Pins einzeln zu toggeln, allerdings jedes mal > neu geflasht, also für jeden Pin, weil ich wissen wollte ob er das auch Naja, so kann mans auch machen. Aber hast du nciht einen Taster an dem Ding? ODer wenigstens ein freis Pin um einen Taster anzuschliessen? Da kannst du nämlich per Taster die einzelnen Pins durchschalten und wackeln lassen. Musst dann nur einmal flaschen (was immens Zeit spart) und kannst vor allem dynamisch debuggen. > also führt PIN1 die Spg. Hab auch den ISP Programmer weggenommen und die Pin kurzgeschlossen? Sowas sollte man fix messen können. MFG Falk
verdammt ich weiß worans lag, ich hab vergessen zu assemblieren, hab nur gespeichert, args. Sorry
Wieso steht eigentlich im Datenblatt was von 5*7 Dots und die beiden schwarzen Balken vor der Initialisierung haben pro Zeichen 5*8 Dots? Hab mir das Programm jetzt noch mal angesehen, die Leitungen überprüft kann nichts finden, die schwarzen Balken verschwinden einfach nicht, die Initialisierung klappt also nicht. Peter
Mach mal was andere schon empfohlen haben. Schreib das Programm SAUBER! Wahrscheinlich wird irgendwo mal r16/temp1 verwechselt und überschrieben und dadurch ist dann der Inhalt im Eimer. MfG Falk
> Wieso steht eigentlich im Datenblatt was von 5*7 Dots und die beiden > schwarzen Balken vor der Initialisierung haben pro Zeichen 5*8 Dots? Weil da die Cursorzeile mit drin ist.
> Mach mal was andere ... Oder geh im AVR Studio in den Simulator und geh mal mit Einzelschritten die Initialisierungssequenz durch. Nach jedem Schritt die simulierten Port Pins beobachten und überlegen ob das so sein kann bzw. so sein soll.
Hab das Programm jetzt nochmal etwas gesäubert, vielleicht kann mans schöner lesen. .include "m32def.inc" .cseg .def temp1=r16 .def temp2=r17 main: ; UND LOS ------------------------------------------------------------------- ; Initialisierungen ldi r16, LOW(RAMEND) ;Einrichtung des Stacks für Rückssprung out SPL, r16 ldi r17, HIGH(RAMEND) out SPH, r17 rjmp lcd_init ;Sprung zur LCD Initialisierung loop11: rjmp loop11 ;Endlosschleife nach Initialisierung ; 5. LCD-Routine ; 5.1 LCD -> Daten übertragen lcd_data: push temp1 ;Register sichern push temp2 ser r18 out DDRA, r18 ;PortA als Ausgang out DDRC, r18 ;PortC als Ausgang CBI PORTC, 1 ;R/W=Low, Schreiben aktiv SBI PORTC, 2 ;RS=High, Daten werden gesendet OUT PORTA, temp1 ;Übergabe des zu sendenden Bytes an das LCD rcall lcd_enable ;Aufruf lcd_enable nop rcall lcd_delay50us ;Aufruf lcd_delay50us nop pop temp2 ;Register wieder herstellen pop temp1 ret ;Rücksprung ; 5.2 LCD -> Commandos übertragen lcd_command: push temp1 ;Register sichern push temp2 ser r18 out DDRA, r18 ;PortA als Ausgang out DDRC, r18 ;PortC als Ausgang CBI PORTC, 1 ;R/W=Low, Schreiben aktiv CBI PORTC, 2 ;RS=Low, Commandos werden gesendet OUT PORTA, temp1 ;Übergabe des Commando-Bytes an das LCD rcall lcd_enable ;Aufruf lcd_enable nop Rcall lcd_delay50us ;Aufruf lcd_delay50us nop pop temp2 ;Register wieder herstellen pop temp1 ret ;Rücksprung ; 5.3 LCD -> Enable-Bit setzen lcd_enable: push r18 ;Register sichern ser r18 out DDRC, r18 ;PortC als Ausgang sbi PORTC, 0 ;Enable-Bit setzen nop ;warten nop ;warten nop ;warten (mindestens 220ns) nop ;warten nop ;warten nop ;warten cbi PORTC, 0 ;Enable-Bit rücksetzen pop r18 ;Register wieder herstellen ret ;Rücksprung ; 5.4 LCD -> 50us Warteschleife lcd_delay50us: push temp1 ;Register sichern push temp2 ldi temp1, 0x05 ;Schleifenindex Nr.1 temp1 auf 0x05 setzen de_loop1: ldi temp2, 0x34 ;Schleifenindex Nr.2 temp2 auf 0x34 setzen de_loop2: dec temp2 brne de_loop2 dec temp1 brne de_loop1 pop temp2 ;Register wieder herstellen pop temp1 ret ;Rücksprung ; 5.5 LCD -> 5ms Warteschleife lcd_delay5ms: push temp1 ;Register sichern push temp2 ldi temp1, 99 ;Schleifenindex auf 99 setzen de2_loop: rcall lcd_delay50us dec temp1 brne de2_loop pop temp2 ;Register wieder herstellen pop temp1 ret ;Rücksprung ; 5.6 LCD -> Initialisierung lcd_init: ldi temp1, 100 ;500ms Wartezeit fürs Display powerupwait: rcall lcd_delay5ms dec temp1 brne powerupwait ser r18 out DDRA, r18 ;PortA auf Ausgang out DDRC, r18 ;PortC auf Ausgang ldi temp1, 0x30 ;LCD-Start-Sequenz out PORTA, temp1 ;RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 ;* 0 0 1 1 * clr temp1 ;RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 out PORTC, temp1 ;0 0 rcall lcd_enable ;1x gesendet rcall lcd_delay5ms rcall lcd_enable ;2x gesendet rcall lcd_delay5ms rcall lcd_enable ;3x gesendet -> LCD bereit rcall lcd_delay5ms ldi temp1, 0x30 ;8-bit Modus aktivieren, 1 Line, 5*7 Dots out PORTA, temp1 rcall lcd_enable rcall lcd_delay5ms ldi temp1, 0x08 ;Display off out PORTA, temp1 rcall lcd_enable rcall lcd_delay5ms ldi temp1, 0x01 ;Display clear out PORTA, temp1 rcall lcd_enable rcall lcd_delay5ms ldi temp1, 0x06 ;Increment, noShift out PORTA, temp1 rcall lcd_enable rcall lcd_delay5ms ;Initialisierung beendet rjmp loop11 ;Sprung zur Endlosschleife
@kbucheg bin ich schon durchgegangen, stimmt soweit alles wenn ich das richtig überblicke
@Peter > Hab das Programm jetzt nochmal etwas gesäubert, vielleicht kann mans > schöner lesen. Was ist das nennenswert gesäubert? MfG Falk
@Peter
> Was könnte man deiner Meinung nach denn noch ändern?
Nun, man könnte WIRKLICH Ordnung schaffen. Nicht aus reinem Selbstzweck,
sondern damit man Fehler schneller sieht. Siehe Anhang.
MfG
Falk
...Du verwendest Port C - hast Du auch das JTAG-Interface abgeschaltet? Auch ein immer wieder gerne gemachtes Fehlerlein...
Also der JTAG Interface Enabled Haken ist auf jedenfall nicht gesetzt wenn ich die Fuses auslese, das heißt doch deaktiviert oder?
@Peter > Also der JTAG Interface Enabled Haken ist auf jedenfall nicht gesetzt > wenn ich die Fuses auslese, das heißt doch deaktiviert oder? Denke ich schon. Aber wenn dein Pin-Wackeltest mit ALLEN Pins funktioniert, dann ist das nicht das Problem. Erfolge? Wahrscheinlich nicht? Hmmm. Wie sieht denn dein Gesamtaufbau aus? Mach mal ein Bild. MfG Falk
Schalte doch mal alle pins am portc auf H und auch mal auf L, und dann kannste messen, ob jtag auch wirklich aus ist. Die Fuses sind bisschen blöd zu handeln. Wenn du jtag nicht ausgeschaltet hast, ist es mit sicherheit noch an.
@Jens B. Hab ich soeben gemacht, funktioniert alles einwandfrei sowohl H als auch L.
Hab mich jetzt mal mit dem Multimeter drangesetzt und wenn ich die Spannungsversorgung draufgebe, dann sind erstmal die Bits RW, RS, und DB0-DB7 für ca. 9-10 Sekunden auf High. Wenn ich das LCD ausstecke und direkt am uC messe, dann ist das nicht der Fall. Woran liegt das denn, dass die Pins so lange alle auf H-Level liegen? Peter
@Peter >direkt am uC messe, dann ist das nicht der Fall. Woran liegt das denn, >dass die Pins so lange alle auf H-Level liegen? Die Eingänge sind extrem hochohmig (100 MOhm ++). Die entladen sich nur sehr langsam über dein Multimeter. MfG Falk
Hm .. mit 16MHz fallen die Ausgänge schneller in den Low-Pegel zurück. Aber was ich nicht verstehe ist dass die Pins überhaupt High-Pegel führen.
???? Wenn das LCD am uC hängt, dürfte gar nix fallen. Denn der uC treibt die Pins, LOW oder HIGH. Und das sofort (us!) nach dem Reset. Was für superbilligen Klingeldraht hast du denn da verwendet? MFG Falk
Also nochmal, wenn ich auf die Schaltung (uC und Display) Spannung gebe und ich am Display messe, dann sind die Pins RW, RS, DB0-DB7 alle auf High und das für ca. 9-10 Sekunden. Wenn ich nun aber das Display wegnehme und dann Spg. wegnehme und wieder draufgebe, dann sind alle Pegel wie sie sein sollten (am uC gemessen). Also muss es wohl so sein, dass das Display irgendwie die H-Pegel produziert. Nur leider werd ich aus der ganzen Geschichte nicht schlau. Und ich muss sagen mich wundert auch nicht dass sich das Display nicht initialisieren lässt bei dem was ich da mit dem Multimeter direkt nach dem Einschalten messe.
@Peter >Also nochmal, wenn ich auf die Schaltung (uC und Display) Spannung gebe >und ich am Display messe, dann sind die Pins RW, RS, DB0-DB7 alle auf >High und das für ca. 9-10 Sekunden. Dann ist was faul. Das Programm setzt die alle auf LOW. Bist du sicher, dass der uC läuft? MfG Falk
Wenn ich es mit einfachen Programmen probiere, also einfach nur ein Port setzen, rücksetzen solche Geschichten dann funktioniert das wunderbar. Nur eben bei diesem Initialisierungsprogramm macht passiert das was ich oben beschrieben habe.
Ach ja hab noch vergessen zu sagen dass die Pins DB1 und DB2 nach den 10Sekunden auch noch High sind, aber das liegt wohl daran, dass das der letzte Wert ist den ich in meiner Initialisierungsroutine auf PortA ausgebe (0x06).
Uah, ich habs. War ne Mischung aus ausgeschaltetem Display und zu extremen Kontrast. Nochmal danke an alle die geholfen haben. ;)
@Peter >Uah, ich habs. Gott sei Dank. >War ne Mischung aus ausgeschaltetem Display und zu extremen Kontrast. Wie ausgeschaltet? MFG Falk
Mit 0x08 in der Initialisierung schaltet man Display, Cursor und Blinking off. Von daher hab ich nichts gesehen und in Kombination mit dem zu hohen Kontrast hatte ich nur die Balken gesehen. ;)
Eine Frage hätte ich noch, und zwar muss ich das LCD auf 1 Zeilig oder 2 Zeilig stellen wenn ich alle 4 Zeilen nutzen will? Gibts vielleicht wo nen Thread oder ne Seite wo das schön beschrieben ist wie das auch mit Zeile 2 und 4 klappt, also das Ansprechen. Hab schon versucht die richtigen Adressen für Zeile 2 und 4 anzugeben, bisher ohne Erfolg.
@Peter >Eine Frage hätte ich noch, und zwar muss ich das LCD auf 1 Zeilig oder 2 >Zeilig stellen wenn ich alle 4 Zeilen nutzen will? 2 zeilig. >ist wie das auch mit Zeile 2 und 4 klappt, also das Ansprechen. Hab >schon versucht die richtigen Adressen für Zeile 2 und 4 anzugeben, >bisher ohne Erfolg. 1. Zeile 0x00 2. Zeile 0x40 3. Zeile 0x10 4. Zeile 0x50 MFG Falk
Bei einem 20*4 LCD wird 0x10 für Zeile 3 nicht reichen, ich "tippe" mal auf 0x14, und 0x54 für Zeile 4; Sollte aber im Datenblatt stehen.
Habs ausprobiert, mit 2 Zeilen gehts ;). Ausserdem hab ich eben mal versucht ein eigenes Zeichen zu entwerfen, aber das will irgendwie nicht funktionieren, der Code sieht so aus. ;CustomChar Generator ldi temp1, 0x40 rcall lcd_command ldi temp1, 0x1F rcall lcd_data ldi temp1, 0x41 rcall lcd_command ldi temp1, 0x11 rcall lcd_data ldi temp1, 0x42 rcall lcd_command ldi temp1, 0x11 rcall lcd_data ldi temp1, 0x43 rcall lcd_command ldi temp1, 0x11 rcall lcd_data ldi temp1, 0x44 rcall lcd_command ldi temp1, 0x11 rcall lcd_data ldi temp1, 0x45 rcall lcd_command ldi temp1, 0x11 rcall lcd_data ldi temp1, 0x46 rcall lcd_command ldi temp1, 0x11 rcall lcd_data ldi temp1, 0x47 rcall lcd_command ldi temp1, 0x1F rcall lcd_data rcall lcd_delay5ms ldi temp1, 0x00 ;Ausgabe des Zeichens rcall lcd_data rcall lcd_delay5ms Habt ihr ne Idee, ich seh den Fehler grad nicht :(
Hast du nach der Character-Definition die Schreibposition wieder in den sichtabren Bereich zurück gesetzt? Ein Character zu definieren ist auch nichts anderes als normale Zeichen ausgeben. Nur dass diese 'Zeichen' in einem speziellen Speicher landen, von dem sie dann zum Zeichnen benutzt werden. Du brauchst auch nicht die Schreibposition erhöhen. Mit der Ausgabe von 0x40 auf das Commandoregister setzt du den Ausgabecursor in diesen speziellen Speicher- bereich. Nachfolgende Ausgaben landen dann in diesem Speicherbereich, genauso wie sie es auch bei der normalen Ausgabe im sichtbaren Bereich machen. Der Cursor wird dabei automatisch erhöht. D.h. du setzt mit dem 0x40 einfach den Cursor um und gibst danach 8 Byte als Daten aus. Danach aber nicht vergessen, den Ausgabecursor wieder in den sichtbraen Bereich zurückzusetzen!
So, brauchte erstmal ein Käffchen um den Kopf wieder klar zu kriegen. Natürlich muss ich vorher wieder mit 0x80 ins DD-Ram um dann mit 0x00 das eben erstellte Zeichen auszugeben ;) .. Danke für den kleinen Tip
@Peter
>So, brauchte erstmal ein Käffchen um den Kopf wieder klar zu kriegen.
Du brauchst auch einen besseren Programmierstil. Schreib doch einfach zu
jedem Kommand als Kommentar was es macht. Gerade in Assembler ist das
äusserst nützlich, ja geradezu zwingend.
MFG
Falk
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.