Forum: Mikrocontroller und Digitale Elektronik 8051 Programm schreiben


von Axel (Gast)


Lesenswert?

Hab ein Problem.

Aufgabe:

Für den 8051 Mikoprozessor soll ein Programm entworfen werden, das einen 
gewichteten Mittelwert von 3 Input-Ports berechnet werden und auf den 
einzigen noch freien Port ausgibt.
Die Eingabekanäle für die Variablen X0,X1,X2 sind die entsprechenden 
Ports P1,P2,P3. Die Messwerte der Eingabekanäle werden von A/D-Umsetzern 
mit 7Bit Auflösung gespeist.

(Lösungshinweise: Die LSB der Eingabesignale stimmen mit den LSB der 
Ports überein. Die Darstellung der Messwerte ist vorzeichenlos. Die 
Ausgabe Y erfolgt auf dem noch freien Port. Beachten Sie erforderliche 
Maskierung! Die Multiplikation mit 2 ist durch den RLC-Befehl zu 
implementieren.)

Wie mach ich sowas????

Die Formel dafür :-)
Y= (X0-9*X2-2*X1) / 11


Hab leider keinen Ahnung davon und muss es für ein Referat fertig 
machen.
Danke für eure Hilfe.

von Achim M. (minifloat)


Lesenswert?

Du musst die Formel "von innen heraus" entwickeln.

> Y= (X0-(9*X2)-(2*X1)) / 11

Du liest X0, X1 und X2 erstmal in 3 Register ein.

X1 wird nun rechts rotiert(das ist die Multiplikationsgeschichte).

X2 wird in ein weiteres Register gerettet, ich nenne es mal X2a.
X2 wird dreimal rechts rotiert(= mal 8).
Zu X2 wird nun X2a hinzuaddiert(jetzt sind es 9 mal das alte X2).

Von X0 wird erst X1 und dann X2 abgezogen.

Von X0 wird in einer Schleife sooft 11 abgezogen, wie der Registerinhalt 
größer 10 ist(das ist die Division). Für die bedingte Sprunganweisung 
brauchst du ein weiteres Register, in das der für den aktuellen 
Schleifendurchlauf gültige Wert von X0 gerettet wird, 10 abgezogen wird 
und auf größer 0 geprüft wird(brhi->anfang schleife). zusätzlich 
brauchst du ein Register zum Zählen der Schleifendurchläufe.

Um die tatsächliche Implementierung musst du dich nun selbst kümmern.
Dieses Forum ist kein Hausaufgabenlösungsautomat.

mfg mf

von Axel (Gast)


Lesenswert?

So also?


clr A     clear akku
clr C     clear carry
mov A,P1    lade P1=X1 in akku
LLC  A        multipliziere akku mit 2
mov R1,A  sicher akku in R1

mov A,#9   lade 9 in akku
mov B,A    sicher akku in B
mov A,P2   lade P2=X2 in akku
mul AB       multipliziere A mit B
mov R2,A   sicher akku in R2

mov A,P0    lade P0=X0 in akku
clr C           clear carry
subb A,R1  subtrarie vom akku R1
subb A,R2  subtrariere vom akku R2

mov B,#11  lade 11 in B
div AB        teile akku durch B

mov P3,A     ausgabe von akku an port 3

von Durcheinander (Gast)


Lesenswert?

Doppelt hält besser? Viel hilft viel?

Warum postest Du doppelt?

Kann ein Admin einen Thread schließen?

V. D.

von Axel (Gast)


Lesenswert?

ja. den mit den wenigsten antworten :-)

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.