mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 Befehl in avr umsetzen


Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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:
        jnb     KEYB_CLOCK, *
        jb      KEYB_CLOCK, *


Achso, keyb_clock damit ist ein Portpin gemeint.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olaf (Gast)
Datum:

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

Olaf

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, ich war wohl ein bisschen langsam, genau das wollte ich wissen.

Vielen Dank, das Problem ist gelöst.

mfg

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht 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 )

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan M. (celmascant)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.