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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.