mikrocontroller.net

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


Autor: Matthias Nüßlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ulrich (Gast)
Datum:

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

Autor: Matthias Nüßlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ulrich,

besten Dank für Deinen konstruktiven Beitrag!

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Nüßlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt frage ich nochmal:
Kannst Du zwei Word-Zahlen addieren?

Autor: Matthias Nüßlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein!

Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned char *data = (unsigned char*)0x40;
unsigned int sum;
for(unsigned char i=0; i<100; i++){
 sum += *data++;
}
*data++ = sum&0xFF;
*data   = sum>>8;

Autor: Matthias Nüßlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Programm muss in Assembler sein!

Viele Grüße
Matthias

Autor: David W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Nüßlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo jack,

vielen Dank für Deine Hilfe.

Autor: Ale (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.