8051 Programm schreiben

Gast #2535473
Lesenswert?

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


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


Vielen Dank für eure Hilfe
Gast #2535502
Lesenswert?

Du brauchst keine Math-Lib dazulinken,

das geht mit ein paar ASM-Befehlen locker, der 8051 kennt "div" und 
"mul",
(nicht für "mal 2" hernehmen) und mit den vorgegebenen Größen
geht es mit den vorhandenen ASM-Befehlen.

Und nun bitte selber! denken.
Gast #2535505
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
#2535578
Lesenswert?

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

9*X2 überschreitet 8Bit, d.h. die Rechnungen müssen 16bittig erfolgen.
Die 12Bit/4Bit Division ist etwas tricky, wenn man den Divisionsbefehl 
verwenden will.
Auch kann es ein negatives Ergebnis geben, d.h. vor der Division muß 
eine Betragsbildung erfolgen und danach das Vorzeichen wieder 
hinzugefügt werden.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren