mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Einfache Frage über Assembler


Autor: Pizza (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Frage um NOP-Operation. Wie lange ist ein NOP-Operation 
eigentlich? Wie kann man sie rechnen?

Beispielerweise arbeite ich mit 20MHz.
Ist es einfach so: 1/20MHz = 50ns.. ist das richtig?

Pizza

Autor: Sebastian Eckert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einem AVR könnte das hinkommen. Bei anderen Controllern kann ein 
Befehslzyklus selbst für nop länger als 1 Takt sein.

Autor: Pizza (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche gerade ein Delay-Funktion in PIC Controller aufzubauen. 
Habe ein Source Code von PIC gefunden(Anhang). Ich bin aber sehr schwach 
mit dem Assembler-Sprache.

Hier ist ein Teil von der angehängter Code:

...

#elif PIC_CLK == 20000000
  #define DelayDivisor 1
  #define WaitFor1Us asm("nop"); asm("nop")
  #define Jumpback asm("goto $ - 6")

...

#define DelayUs(x) { \
      delayus_variable=(unsigned char)(x/DelayDivisor); \
      asm("movlb (_delayus_variable) >> 8"); \
      WaitFor1Us; } \
      asm("decfsz (_delayus_variable)&0ffh,f"); \
      Jumpback;
...

Ich habe nicht verstanden, wieso 1 µsec hier gleich 2 mal asm("nop") 
ist.  Mit "DelayUs(x)" habe ich auch nicht verstanden, wie das bedeutet. 
Es wäre sehr nett, wenn Ihr mir erklären könnten. Danke!!

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Datenblatt eines AVRs enthält eine Liste, in der alle Befehle mit 
ihren wichtigen Eigenschaften (Flagbeeinflussung, Platzbedarf, 
Abarbeitungszeit) aufgelistet sind. Ich halte es für möglich, dass 
andere Controller-Hersteller das so ähnlich halten. Also schau bitte im 
verdammten Datenblatt Deines PICs nach...

...

Autor: tt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die pic-controller brauchen 4 Takte pro Befehl. --> 1/20MHz x4

Autor: Sergey (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.piclist.com/techref/piclist/codegen/delay.htm - erzeugt 
fertige Delay-Routinen.

Ansonsten: Bei 20MHz hat der PIC 5 MIPS, also braucht ein Befehl 0,2 us

Tipps um Programmspeicher mit Delays zu sparen:

NOP - einen Maschinenzyklus warten
GOTO $+1 - zwei Maschinenzyklen warten, belegt aber nur 1 Stelle
im Speicher (weil Sprungbefehle 2 Maschinenzyklen brauchen)


4 Maschinenzyklen warten, belegt aber nur 1 Stelle im Speicher (weil 
Sprungbefehl und Returnbefehl je 2 Maschinenzyklen brauchen)

SUBROUTINE        .....           ; IRGENDEIN CODE
                  MOVLW     0X10
                  MOVWF     0X32
                  .....           ; IRGENDEIN CODE
DUMMYLABEL        RETURN          ; RETURN ANWEISUNG



                  .....           ; IRGENDEIN CODE
                  CALL DUMMYLABEL ; DELAY 4 ZYKLEN
                  .....           ; IRGENDEIN CODE


Einfach ein Dummy-Label bei einer RETURN-Anweisung einfügen.
Vorsicht, so etwas kannst du nur machen, wenn du auf den
Hardware-Stack aufpasst bzw. im Moment genug Stack-Level hast.

Autor: Pizza (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich danke euch!! Es hat mir weiter geholfen.

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.