Forum: Mikrocontroller und Digitale Elektronik 100 1-Byte-Werte addieren


von Matthias Nüßlein (Gast)


Lesenswert?

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

von Ulrich (Gast)


Lesenswert?

Wo ist den das Konkrete Problem?
Eine fertige lösung wird dir ja hoffentlich keiner hier posten....

von Matthias Nüßlein (Gast)


Lesenswert?

Hallo Ulrich,

besten Dank für Deinen konstruktiven Beitrag!

von Rolf Magnus (Gast)


Lesenswert?

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.

von jack (Gast)


Lesenswert?

>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?

von Joe (Gast)


Lesenswert?

faule Nuß, äääääääääähhhh, passte gerade so gut, schau dir mal addc an
und dann mach wenigstens einen Versuch, dann klappts auch mit der
Hilfe.

von Matthias Nüßlein (Gast)


Lesenswert?

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

von jack (Gast)


Lesenswert?

Jetzt frage ich nochmal:
Kannst Du zwei Word-Zahlen addieren?

von Matthias Nüßlein (Gast)


Lesenswert?

Nein!

von Ssss S. (sssssss)


Lesenswert?

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;

von Matthias Nüßlein (Gast)


Lesenswert?

Hallo,

das Programm muss in Assembler sein!

Viele Grüße
Matthias

von David W. (Gast)


Lesenswert?

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...

von Unbekannter (Gast)


Lesenswert?

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?

von jack (Gast)


Lesenswert?

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

von Matthias Nüßlein (Gast)


Lesenswert?

Hallo jack,

vielen Dank für Deine Hilfe.

von Ale (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.