www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C inline Assembler


Autor: PIC-Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein kleines Programm in C programmiert, das an einer Stelle 
sehr genaue Frequenzen erzeugen soll. Deshalb will ich Inline-Assembler 
einsetzen. Diese Frequenzen werden in dem Datentype "unsigned short int" 
angegeben. Ich habe jetzt das Problem das ich nicht weiß wo in meinem 
PIC die Vaiablen angelegt werden, daher weiß ich nicht wie ich auf sie 
Zugreifen soll.

Es müsste sowas wie das möglich sein:
unsigned short int T
_asm
    CLRF [T.byte1]
    CLRF [T.byte2]
    BSF  [T.byte2],4
_endasm
Wie greife ich mit Inline-Assembler im C18-Compiler auf die Bytes einer 
Variable zu?

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ein Beispiel aus dem C18-User-Guide. Ich nehme an, dass count 
eine 8-Bit Variable aus dem darüberliegenden C-Programm ist.

[code]
_asm
/* User assembly code */
MOVLW 10 // Move decimal 10 to count
MOVWF count, 0
/* Loop until count is 0 */
start:
DECFSZ count, 1, 0
GOTO done
BRA start
done:
_endasm
[code]


PS: Wie kommst du darauf, dass "unsigned short int T" Elemente mit den 
Namen
byte1, byte2, byte3 hat?

Gruß Skriptkiddy

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei den meisten Assemblersprachen gilt:
  T+0 ist das erste Byte,
  T+1 ist das zweite Byte.

Erschwerend kommt aber bei PICs hinzu, dass du erst noch die Bank 
festlegen musst, wenn die Variable nicht in der Access Bank liegt oder 
du im Extended Mode bist und daher keine hast.

Sehr genau wird das übrigens mit Timer/PWM, statt Assembler.

Autor: PIC-Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade noch ein anderes Problem. Der Compiler streikt bei 
Inline-Assembler!
Bei diesem Code:
unsigned short int T;
_asm
    BSF PORTB,4
    SUBWF T,0
    BCF PORTB,3
    BCF PORTB,4
_endasm
Erhalte ich die Fehlermedung:
C:\xxx\Main.c:37:Error [1251] 'BSF' operand count mismatch
C:\xxx\Main.c:41:Error [1251] 'SUBWF' operand count mismatch
C:\xxx\Main.c:47:Error [1251] 'BCF' operand count mismatch
C:\xxx\Main.c:48:Error [1251] 'BCF' operand count mismatch

Es handelt sich übrigens um einem 18F452. "A. K." meinte ich müsse 
Banken umschalten. Ich dachte das wäre nur bei dem 16F, 12F und 10F 
nötig.

Wie erzeuge ich in PWM lücklos 1Hz-100000Hz? Wenn jemand mir zeigen 
würde wie ich diese Frequenzen in PWM erzeugen kann, wäre mir auch 
gehelfen.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PIC-Anfänger schrieb im Beitrag #2060845:

> Es handelt sich übrigens um einem 18F452. "A. K." meinte ich müsse
> Banken umschalten. Ich dachte das wäre nur bei dem 16F, 12F und 10F
> nötig.

Die PIC18 können in fast allen Befehlen nur 512 Bytes direkt 
adressieren. Im Standardmodus sind das ein Teil der der ersten Bank (der 
Access Bank), ein Teil der I/O-Bank und 256 Bytes einer wählbaren 
RAM-Bank.

Der hierbei im Standardmodus einzig wirklich substantielle Unterschied 
zu den PIC16 ist die Möglichkeit, das RAM indirekt ohne Banking linear 
zu adressieren, und ein 2-Adress Move-Befehl mit 4KB Adressierung. Das 
können die alten nicht. Im Extended Mode kommt dann noch die 
Stack-bezogene Adressierung hinzu (statt der Access Bank).

> Wie erzeuge ich in PWM lücklos 1Hz-100000Hz?

Lückenlos geht nicht. Nicht mit Timer und nicht programmiert.

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.