Hallo, im Rahmen meiner Weiterbildung muss ich mich auch mit der Programmierung von Mikrocontrollern befassen. Genauer mit dem Intel 8051. Ich wäre sehr dankbar, wenn mir jemand bei nachfolgender Aufgabe behilflich sein könnte. Aufgabe: Im RAM ab der externen Adresse 40H sin 100 Messwerte zu je 1-Byte abgelegt. Zur Datenkontrolle ist die Prüfsumme durch einfache Addition der Byte zu berechnen. Die Prüfsumme, eine eine 2-Byte-Zahl, ist den Messwerten abzulegen. Viele Grüße Matthias
Wo ist den das Konkrete Problem? Eine fertige lösung wird dir ja hoffentlich keiner hier posten....
Naja, Matthias, es ist schon etwas dreist, einfach mal die Aufgabe zu posten und keinerlei Eigeninitaitve zu zeigen. Was genau erwartest du? Hilfe beim Problem kann man dir nicht geben, da du nicht geschrieben hast, welches Problem du denn nun hast. Du kannst ja die Adresse des Lehrers mal posten, dann können wir die fertige Lösung gleich dorthin schicken. Das wäre dann noch viel einfacher für dich.
>Wo ist den das Konkrete Problem?
Ja, das würde ich auch gerne wissen. Was kannst Du denn nicht?
Kannst Du wenigstens 2 Wordzahlen addieren?
faule Nuß, äääääääääähhhh, passte gerade so gut, schau dir mal addc an und dann mach wenigstens einen Versuch, dann klappts auch mit der Hilfe.
Hallo zusammen, es geht nicht darum, dass ich eine fertige Lösung haben möchte. Sondern nur Hilfe bei der Code-Erstellung für die Addition. Wie man 100 1-Byte-Werte addiert ohne den Übertrag zu berücksichtigen ist ja nicht schwer. Nur wie muss ich den Code aufbauen, dass ich alle 100 1-Byte-Wert mit richtig einander addieren kann. Viele Grüße Matthias
1 | unsigned char *data = (unsigned char*)0x40; |
2 | unsigned int sum; |
3 | for(unsigned char i=0; i<100; i++){ |
4 | sum += *data++; |
5 | }
|
6 | *data++ = sum&0xFF; |
7 | *data = sum>>8; |
Weiter*bildung*. Glaubste, das hat viel Sinn, wenn man dir die fertige Lösung postet? Jetzt machst du dir mal 10 Minuten Gedanken über Problemstellung und die Lösungsansätze. Simon hat grad schon einen guten Lösungsansatz gemacht, jetzt kannste den ja fast direkt so in Assembler übertragen. Wenns dabei Probleme gibt, dann frag, aber nicht: machts für mich...
In Deiner Weiterbildungsveranstaltung wurde bestimmt schon das Carry-Flag besprochen, oder hast Du da gepennt? Ansonsten kann Deine Frage ja wohl nicht ernst gemeint sein, oder etwa doch?
Word Addition: mov A, S1_low add A, S2_low mov Summe_low, A mov A S1_high addc A, S2_high mov Summe_high, A
Am besten, was die andere haben gesagt genug ist, aber: Diese Programm von Ssss zu Compilieren ... Oder deine Eigen machen ! Wenn ich mit assembler angenfangen ('92) ich habe ein Buch gelessen... etwas wie, Assembler für 8086 by John Socha and Peter Norton. In diesem Buch jede instruction hat eine erklärung mit Beispile. Sehr gut zu anfangen. Es gibt viele viele on-line Kursen zu Lehren, aber wenn es gibt kein will, geht nicht. Ich weiss asm 8051 nicht so, ein Beispiele mit z80 kann ich registers : A,D,E,H,L nur 8 byte adierung wird benutzt !! DE ist die Speigerpunkt, wo diese daten stehen ld h,0 ld l,0 ld c,100 ld b,0 1: ld a,(de) inc de add a,l ld l,a ld a,0 adc a,h djnz 1: byte Beträge wenn adieren kann "overflow" (carry) geben, so du muss es auch addieren ! Vielleicht es kann helfen. Nächste mal, mach ein Paar Beispiele und Übungen. Die lösung findest du immer wenn du habst die Problem verstanden
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.