mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC24 Delayschleife in Assambler


Autor: Jens Großmann (Firma: fa. Seuffer) (willi-helmchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hy Leute,
hab ein kleines Problem.
Ich habe ein Programm auf einem dsPIC33 geschrieben welches nun auf 
einem PIC24HJ128GP206 laufen soll. Laut Aussagen vom fachmann soll der 
Kern kompatiebel sein und das Programm selbst läuft auch soweit wie es 
soll.
Ich hab jetzt nur das Problem das eine Delayschleife welche ich aus 
einem dsPIC33 Codesample genommen hat beim PIC24 ein fehlermeldung 
verursacht
"Error: This instruction is not supported in the 24HJ128GP206 device"

Der Code lautet

void Delay(unsigned int delay_count)
{
    temp_count=delay_count+1;
    asm volatile("outer: das _temp_count");
    asm volatile("cp0 _temp_count");
    asm volatile("bra z, done");
    asm volatile("do #3200, inner");  //diese Zeile mag er nicht mehr
    asm volatile("nop");
    asm volatile("inner: nop");
    asm volatile("bra outer");
    asm volatile("done:");
}

kann mir jemand sagen was ich ändern muss damit es wieder geht??
oder wie ich es besser machen kann??

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
seltsam, mache brauchen C um in asm zu prorammieren?

Autor: Jens Großmann (Firma: fa. Seuffer) (willi-helmchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt ist aus einem dsPIC33 Codesample übernommen.

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gehe davon aus, daß die PIC24er den DO-Befehl nicht kennen.

Seltsam, einen derart kraftvollen uC programmieren und kein Datenblatt 
lesen können.

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll denn der erste Befehl "das" machen?
Den gibt es weder auf PIC24 noch auf 30 oder 33.

EDIT
Hmmm, da er vor einem cp0 steht kann es sich ei-schändlich nur um irgend 
eine Art von decrement handeln, ist aber in der Schreibweise nicht 
bekannt.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte etwa so funktionieren:

void Delay(unsigned int delay_count)
{
    temp_count=delay_count+1;
    asm volatile("outer: das _temp_count");
    asm volatile("cp0 _temp_count");
    asm volatile("bra z, done");
    asm volatile("repeat #6400");
    asm volatile("nop");
    asm volatile("bra outer");
    asm volatile("done:");
}

Autor: Jens Großmann (Firma: fa. Seuffer) (willi-helmchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh sorry Fiptehler muss natürlich dec heisen nicht das

Was macht den der DO befehl genau?? Und gibt es eine andere oder bessere 
möglichkeit das Delay zu realisieren.


@Bernd Rüter: genau solche Komentare brauch ich jetzt, ich sitz gerade 
an meiner Diplomarbeit, hab alles auf dem dsPIC33 gemacht und in letzter 
Minute hat es geheisen ich muss den PIC24 nehmen.
Und zudem komm ich aus der Hardware Ecke und hab noch nie ein 
Controllerprojekt in dieser größe realisiert.

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der do Befehl ist dem PIC24 bekannt, kommentier doch einfach mal die 
eine oder andere verdächtige Zeile aus und wirf das dann dem Compiler 
vor ob er noch meckert - muss ja nicht unbedingt lauffähig sein.

Autor: Jens Großmann (Firma: fa. Seuffer) (willi-helmchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so hab ich es ja gemacht, und er hat nur nicht gemeckert wenn die Zeile 
mit dem do Befehl auskomentiert war.
Sobald ich die Zeile wieder aktiv gemacht habe hat er wieder gemeckert

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ich hatte die Zeile mit dem Kommentar  //diese Zeile mag er nicht 
mehr  übersehen.

> Könnte etwa so funktionieren: ....

Ja das mit dem repeat sieht dem Ursprung sehr ähnlich, ist nur ein nop 
aber dafür doppelt so oft. Der repeat counter hat 16 bit, verträgt also 
die 6400 noch.

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens Großmann wrote:

> @Bernd Rüter: genau solche Komentare brauch ich jetzt, ich sitz gerade
> an meiner Diplomarbeit, hab alles auf dem dsPIC33 gemacht und in letzter
> Minute hat es geheisen ich muss den PIC24 nehmen.
> Und zudem komm ich aus der Hardware Ecke und hab noch nie ein
> Controllerprojekt in dieser größe realisiert.

Ja,
kennen wir alles schon.

Trotzdem ist der DO-Befehl nicht im Datenblatt des PIC24 zu finden, nur 
im Datenblatt des dsPIC33.
Du solltest Dich ganz dringend ein Wochenende mit den Datenblättern 
vergraben!

Hat Dein C-Compiler keine Delay-Routinen ? Wozu benutzt Du dann C ?

Ich durfte auch mal so adhoc eine Lösung auf dem dsPIC33 erstellen, wo 
ich bisher nur die 8-Bitter kannte. Das war eine andere Welt.
Aber den Rückschritt vom PIC33 auf PIC24 ist schon krank.

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.