8051 Befehl in avr umsetzen

OP #1310903
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.
Gast #1310909
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.
Gast #1310926
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.
OP #1310928
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
#1310932
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 )
#1311167
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.

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