Forum: Mikrocontroller und Digitale Elektronik ANL & SWAP? Beispiel Bitte


von momo (Gast)


Lesenswert?

Hallo ...
ich habe bitte eine Frage was die beiden Befehle angeht ...


ich weiss dass ANL bewirkt eine UND Verknüpfung und Swap die LB mit HB 
tauscht ...

aber kann mir bitte jemand sagen, wozu ich ANL und Swap brauche in einer 
Beispiel !?

vielen Dank im Voraus ...

: Gesperrt durch User
von Gast (Gast)


Lesenswert?

Hallo,

Ein Swap vertauscht das Obere mit den Oberen 'Nibble'
Unteres Nibble = Bit 0 - 3
Oberes  Nibble = Bit 4 - 7
[ Bei 8 Bit ]

Das brauch man wenn man man zum Beispiel wenn man
ein 8 Bit Datenwort in 4 Byte Paketen verschicken
möchte und man auf der anderen Seite einen FIFO
Puffer hat.
Als erstes die Unteren 4 Bit und dann die Oberen
4 Bit...und werden dann zusammen zu den alten
8 Bit Datenwort verpackt.

von Kuckuck (Gast)


Lesenswert?

Also die Akademie für Naturschutz und Landschaftspflege (kurz ANL) 
kümmert sich dem Namen nach um Naturschutz und Landschaftspflege. Dabei 
werden sicherlich auch Pflanzen umgesetzt und ausgestauscht. (SWAP).

Ich hoffe das klär Deine Frage abschliessend.

von avr (Gast)


Lesenswert?

Scheint 8051 zu sein, aber die Grundbefehle (wenn auch etwas
anderst geschrieben) hat jeder µC.
Daher könnte auch AVR helfen:

http://www.avr-asm-tutorial.net/avr_de/beginner/index.html

Hier swap bzw. and anklicken.

avr

von momo (Gast)


Lesenswert?

Hallo ..
ja 8051...

aber, kannst Du mir die Mathe dahinter erklären? wozu brauche ich SWAP 
bzw ANL ?

mathematisch gesehen !?

von Kuckuck (Gast)


Lesenswert?

Kannst Du bitte die Frage neu formulieren?

Das Problem ist, das Du wegen "And" etwa fragst, was denn die Mathematik 
hinter der Addition ist. Das kann man sicherlich erklären, aber willst 
Du das wirklich? Es ist entweder trivial oder nur für Zahlentheoretiker 
interessant.

Das mit dem Swap merk Dir einfach. Wenn Du den Wunsch hast in einem Byte 
die niblles zu tauschen, dann denk wieder dran.

von momo (Gast)


Lesenswert?

Hi Kuckuck  ..

ok ...
das Problem ist folgendes :
ich will 16 Werte der Länge 16Bit in 8051 Addieren und den Mittelwert 
ausgeben ...
das geht leider nicht (Länge>8) also muss man HB zusammen addieren und 
die LB zusammen addieren ....
es taucht in der Lösung aber SWAP und dann ANL ...

ich verstehe nicht genau was da gemacht wurde, aber ich wäre jetzt 
dankbar wenn jemand mir sagt wie ich 2 Werte der Länge 16Bit addiere und 
den Mittelwert ausrechne ...

Das Problem ist immer dass die Länge der summierten Werte grösser 8Bit 
ist ..
also wie geht das? und wird wirklich hier die Befehle irgendwie benutzt 
?

von Peter R. (pnu)


Lesenswert?

Swap ist hilfreich, wenn man z.B als Inhalt eines 8-Bit Registers zwei 
4-bit-Zahlen hat und diese beiden Zahlen nacheinander in 4-bit-Form 
ausgeben möchte:

in r16,tcnt0   ;Zählerstand nach r16 einlesen
andi r16,0x0F  ;obere vier bit löschen ( Maskieren)
out portb,r16  ;auf den unteren vier bit von portb wird die untere 
Ziffer ausgegeben (0..F)
in r16,tcnt0   ;Zählerstand nochmals lesen
andi r16,0xf0  ;untere vier bit löschen
swap r16       ;obere zu untere bits machen
out portb,r16  ;auf den unteren vier bit von portb wird die obere Ziffer 
ausgegeben (0..F

Meistens braucht man swap, um mehrstellige BCD-Zahlen, bei denen ja jede 
Ziffer aus vier bit besteht, in 8- oder 16-bit-Registern unterzubringen

von momo (Gast)


Lesenswert?

Danke Peter ...
tooles Beispiel ...

nur noch ein ANL Beispiel ;)

danke

von Kuckuck (Gast)


Lesenswert?

Also ehrlich. Ich mag ja auch helfen, aber immer gegen Strich striegeln, 
nervt.

>das geht leider nicht (Länge>8) also muss man HB zusammen addieren und
>die LB zusammen addieren ....
HB gibts nicht mehr. Die Werbung mit dem in die Luft gehenden Männchen 
habe ich auch schon eine Weile nicht mehr gesehen. LB? Was hat die 
Landesbank damit zu tun? Welchen Landes?

Die Glaskugel ächzt, meint aber, das "HB" wohl das High-Byte sein soll 
und "LB" das Low-Byte. Ist das so? Und wenn ja, warum schreibst Du das 
nicht? Ist die die Antwort sowenig wert, das es sich nicht gelohnt 
hätte, 13 Zeichen mehr zu tippen? Oder ist das ein Versuch, den Slang 
nachzuahmen? Kenne das. War sehr faszinierend, dann auch Witze darin zu 
machen. Als Anfänger aber kannst Du Profis nicht mit Slang kommen.

Meine Glaskugel ist leider nicht in der Lage Deinen Quellcode zu 
reproduzieren. Wahrscheinlich ist die Batterie etwas schwächlich. 
Könntest Du mir da BITTE aushelfen. Das wäre sehr nett.

von Kuckuck (Gast)


Lesenswert?

Kuckuck, Du alter Griesgram!

von avr (Gast)


Lesenswert?

Dann schreib doch gleich was du willst.

Oder noch besser poste den Code den du nicht verstehst.

Wenn du 16 Werte hast und den Mittelwert brauchst addierst
du alle auf ( ergibt einen Wert mit 20 Bit).
Den teilst du dann durch 16.
Das Teilen durch Potenzen von 2 ist mit Schieben realisierbar.

Geteilt durch 2 = 2^1 -> 1 x ROR
Geteilt durch 4 = 2^2 -> 2 x ROR

etc.

Mit Swap werden die oberen 4 Bit zu den unteren 4 Bit
so als ob sie geschoben wurden. Die oberen enthalten jetz
jedoch Werte die nicht gebraucht werden. Diese kann man
durch ein ANL 0x0f löschen.

So oder ähnlich wir in deinem fall wohl die Berechnung aussehen.

(8051 in Assembler ist schon etwas her ;))

avr

von Peter R. (pnu)


Lesenswert?

Im Addieren von 16 Werten steckt die Multiplikation mit 16. Für den 
Mittelwert aus 16 muss man nach der Addition durch 16 dividieren. Dem 
entspricht ein Verschieben um vier Stellen nch rechts.

Wenn man nicht viermal die 24-bit-Kette des Resultats um eine Stelle 
nach rechts verschieben will, kann man vier-bit-weise umgruppieren, da 
ist dann swap eine Hilfe.

Mit ldi r17,0x0f und anschließendem anl r16,r17 kann man eine 
vier-Bit-Gruppe in r16 isolieren.

(ich geb das ganze in avr-code an, den 8051-code müsste ich 
nachschlagen, aber das ist mir im Moment zu viel)

von momo (Gast)


Lesenswert?

@ Kuckuck : DU NERVST ...ok!?
ich habe nicht versucht den Slang nachzuahmen !!! ich dachte wenn man 
mit Profis zu tun hat, dann verstehen sie auf jeden Fall was gemeint 
ist... oder soll ich jedes Mal Spannung,Strom, Widerstand schreibe, wo 
ich einfach nur U,I, oder R schreiben kann  !!!
um ehrlich zu sein deine Hilfe hat nichts gebracht, einfach nur labern, 
tut mir leid hilft ja auch nicht, also Gute Nacht ...
aber trotzdem vielen Dank für deine Zeit und tut mir Leid dass ich deine 
Gedanken belastet habe ...

@AVR danke ... ich wollte nur im allg. verstehen was ANL & Swap bewirken 
...nicht nur in einem speziell Fall, aber danke für das Beispiel ...

@Peter DANKE DANKE DANKE --

das ist genau was ich brauchte ...

von Kuckuck (Gast)


Lesenswert?

>@ Kuckuck : DU NERVST ...ok!?
Das war Absicht. Hoffentlich läßt Du Dich hier nicht wieder blicken.

von avr (Gast)


Angehängte Dateien:

Lesenswert?

Und ich bau bald wieder eine Uhr!

von momo (Gast)


Lesenswert?

Das Forum gehört dir nicht Du Idiot

von Kuckuck (Gast)


Lesenswert?

>Das Forum gehört dir nicht Du Idiot

Niedlich. Soll das Computerslang sein?

von momo (Gast)


Lesenswert?

Ach geh schlafen alte Oma ...
was willst Du hier noch ...

von Kuckuck (Gast)


Lesenswert?

>Ach geh schlafen alte Oma ...
>was willst Du hier noch ...

Interessant, das es immer die selben Sprüche sind, wenn den 
unterbelichteten Script-Kiddies nichts mehr einfällt.

von momo (Gast)


Lesenswert?

hahahahaha ...
hast Du das schon Mal gehört ?
und es liegt an uns !?

hahahahaahahahahaha .. Du arme Seele ...
Es ist nicht verboten dass man frägt wenn man lernen will ...
es ist nur eine Schande wenn man solche Leute wie Du treffen muss...

Schande ...

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.