Forum: Mikrocontroller und Digitale Elektronik 8051 Befehl in avr umsetzen


von Martin K. (spyro07)


Lesenswert?

Hi,

ich bin dabei ein Programm von einem 8051er auf meinen avr umzusetzen.

Hier ist der Code, welchen ich nicht verstehe, vor allem was bedeuten 
diese Steren, als Label sind sie nirgendwo im Programm zu finden:
1
        jnb     KEYB_CLOCK, *
2
        jb      KEYB_CLOCK, *

Achso, keyb_clock damit ist ein Portpin gemeint.

von Peter (Gast)


Lesenswert?

ist ist vermutlich nicht sinvoll ein Programm 1:1 von einem ASM zu einem 
anderen ASM zu übertragen, man sollte die funktion verstehen und auf dem 
zielsystem neu schreiben. je ne ASM werden dinge anders gelöst.

jb, jbn wird wohl für ein bedingen jump stehen - ist aber bloss eine 
vermutung.

von Olaf (Gast)


Lesenswert?

Springe zu der Stelle wo du dich gerade befindest (*) wenn
ein Bit set/reset ist.

Olaf

von Route_66 (Gast)


Lesenswert?

Hallo!
je nach Assembler wird der aktuelle Programmcounterstand mit einem Stern 
oder Dollarzeichen dargestellt. Das heißt zu obigem Beispiel:
tritt solange auf der Stelle wie das Bit KEY_CLOCK low ist (erste 
Zeile). Wenn jetzt KEY_CLOCK high wird dreht er sich solange in der 
zweiten Zeile im Kreis, bis wieder low ist.

von Martin K. (spyro07)


Lesenswert?

ich schreibe es auch nicht eins zu eins ab, es ist eben ja das problem 
das dass ein wichtiger Programmteil ist, den ich nicht verstehe, aber 
ich kann ihn nicht einfach weglassen.

also bei jnb heist das wenn dieser keyb_clock (PIN) 0 ist wird 
gesprungen.

Aber das komische ist ja, dass dann ein Stern da steht und ich weis 
nicht was das heisen soll.

Das sind sicherlich solche spezial-Fälle, ich könnte mir das jedenfalls 
nur vorstellen, das der Stern vielleicht heist nächsten Befehl 
überspringen, oder was auch immer.

Kann mir jemand sagen, was dieser Stern da bedeuten soll?

mfg

von Martin K. (spyro07)


Lesenswert?

Oh, ich war wohl ein bisschen langsam, genau das wollte ich wissen.

Vielen Dank, das Problem ist gelöst.

mfg

von Stephan H. (stephan-)


Lesenswert?

1. Zeile: springe wenn Keyb_Clock nicht gesetzt ist zu *
2. Zeile springe wenn Keyb_CLock gesetzt ist zu *

Da wartet offensichtlich jemand bis eine Taste losgelassen wurde um dann 
darauf zu warten das sie wieder gedrückt wird.
Ich vermute er springt auf der Stelle.

zB: Los1:  JNB xx,Los1
    Los2:  Jb xx,Los2

Manche schreiben auch  JNB xx,$  ( ist das gleiche )

von Detlev T. (detlevt)


Lesenswert?

Achtung, Falle. Wenn mich meine Erinnerung nicht trügt, wird auf dem 
8051 dieselbe Port-Adresse für Input und Output genutzt. Beim AVR sind 
das zwei verschiedene (PIN vs. PORT). Darauf musst du bei der Umsetzung 
auch achten.

Gruß, DetlevT

von Stefan M. (celmascant)


Lesenswert?

Deine Erinnerung trügt dich nicht.
Das war auch eine Grundlegende Umstellung bei mir, als ich mit den AVRs 
angefangen hab.
Wollte die Eingänge abragen und hab nicht geschnallt, das es Pin und 
Port-Register gibt...

Gruss Stefan

von Stephan H. (stephan-)


Lesenswert?

Macht eigentlich keinen großen Unterschied.
Mußt halt nur eine 1 schreiben wenn Du einlesen willst.
Im Gegenteil. Bei 8051 ist es eben nicht notwendig die Direction des 
Ports zu deklarieren. Port zur Laufzeit mit FF beschreiben und schon ist 
er als Eingang definiert.
Mach das mal mit AVR !!
Beim Pin genauso. Setb Px.1 schon ist das Pin ein Input.

Keine Ahnung warum Du umsteigen willst. Aber bei AVR ist so einiges 
anders und umständlicher. Manches auch besser.
Spätestens wenn es um Interrupt Prioritäten geht, wirst du Dich 
zurücksehnen. Sollte der Umstieg nur wegen der vermeintlich schlechten 
"Rechenpower" sein, schau Dich bei Silabs um. 8051 Kern mit 100 Mhz oszi 
on Board als One Zycle !! Und das für Peanuts.

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.