www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC Assembler Probleme


Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo miteinander

Ich bin gerade am Überarbeiten eines kleinen Programms für einen 
dsPIC30F6012A. Kern der ganzen Geschichte ist die 
Geschwindigkeitsoptimierung.
Daher habe ich mich entschlossen gewisse, sehr häufig und in rascher 
abfolge verwendete Funktionen in Assembler umzuschreiben.

Doch leider ist das bei mir mit dem Assembler schon etwas länger her und 
so tue ich mich mit ganz einfachen Operationen schon etwas schwer:
void clear_ADR(void){                      // Adressbus löschen
  asm("BCF PORTC,14");                    // Bit 14 beim PORTC Register löschen
  asm("BCF PORTC,13");
  asm("BCF PORTC,2");
  asm("BCF PORTC,1");
}
Hierbei meckert der Compiler (HI-Tech C Compiler dsPIC/PIC24 V9.60) 
betreffend eines Syntaxfehlers pro Assembler-Zeile. Nur sehe ich nicht 
ein, was falsch ist.

Besten dank für die Nachhilfe
MFG
Patrick

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist denn der Code her? Das sieht für mich wie PIC18 ASM aus.

Versuch mal

asm("BCLR PORTC,#14");            // Bit 14 beim PORTC Register löschen

Außerdem ist es sinnvoller, nicht PORTC sondern LATC zu benutzen, damit 
vermeidet man das read/modify/write Problem.

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank für die Antwort.

Den Code habe ich einserseits von www.sprut.de und andererseits von 
diversen anderen Assembler-Tutorials (also, nur der Syntax in der 
Klammer).
Der Rest habe ich aus dem Handbuch des Compilers entnommen (GCC hat 
glaube ich ähnliche Schreibweise für inline-Comands).

Leider hat der neue Versuch zum alten Syntax-Fehler geführt:
[quote]
..\source_code\dac\dac.c: 124: (876) Syntaxfehler
[/quote]

Aber dennoch, besten Dank für die Hilfe
MFG
Patrick

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Assemblerbefehl lautet aber: BCLR.b f,#bit3

Autor: SandboxGangster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So als Tip wegen Optimierung wen die werte des PORT bekant sind bei der 
ausfürung ein:

movlw B’00000000’
movwf PORTC

ist wesentlich schneller als:

bcf PORTC, 1
bcf PORTC, 1
bcf PORTC, 1

bei erster variante wird ein wert in das Passende Register geschriben, 
bei den bcf wird jedesmal das register ausgelesen der eine wert geändert 
und dann wieder ins register geschoben.

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris schrieb:
> Der Assemblerbefehl lautet aber: BCLR.b f,#bit3

ups, da habe ich wohl die erste Antwort zu ungenau gelesen. Dies 
funktioniert.

SandboxGangster schrieb:
> So als Tip wegen Optimierung wen die werte des PORT bekant sind bei der
> ausfürung ein:

Das Problem ist, dass die Werte nicht direkt bekannt sind. Ich müsste 
zuerst das PORT/LAT Register auslesen, damit ich weiss, was geschrieben 
wurde. und die anderen Bits, dürfen nicht beeinflusst werden.

Besten Dank für die Antworten
MFG
Patrick

Autor: Eschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal was zur Optimierung.
Ich kenn diesen Prozessor nicht genau, aber bei anderen PICs gibts auch 
den ANDLW Befehl.
Die Idee ist den Wert 0011xx1100 (0 wo gelöscht werden soll, 1 wo nicht 
beeinflusst wird) zu laden und mit dem PORTC (oder LAT) zu verUNDen. 
Ergebnis in PORTC. Möglicherweise ist das schneller.

Gruss
Martin

Autor: Maik Werner (werner01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mov #0bxxxxxxxxxxxxxxxx,w0
xor w0,LATC

ist das nicht eine gute Idee?

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.