Liste der Anhänge anzeigen (Anzahl: 1)
Guten Abend,
erstmal Danke für euro Infos.
@shedepe
Bei dem XC8 Compiler muss man "eigentlich" nichts extra einstellen, hab mir das nochmal genau angesehen.
@witkatz
so wollte ich das eigentlich haben, dann habe ich irgendwo gelesen, dass man jede Zeile separat als asm (" "); schreiben soll.
ich habe jetzt deine Variante probiert: siehe Screenshoot:
Anhang 32410
irgendwie mag er das nicht:
unable to resolve identifier movlw
unable to resolve identifier movwf
unable to resolve identifier delay_a unexpected token
unable to resolve identifier decfsz
unable to resolve identifier delay_a
unable to resolve identifier nop
unexpected token }
Jetzt das erstaunliche, er hat trotzdem ein Compilat erstellt.....
ich glaub ich muss die ganze IDE neu installieren, da ist doch was faul.
Habe komplett neu installiert. IDE und Compiler.
Das ändert aber nichts. Sehr merkwürdig.
Aber der Hinweis mit dem __delay_us habe ich grad ausprobiert.
Man muss nur ein define _XTAL_FREQ definieren und dann erzeugt der Compiler selbst den Code für die Warteschleife.
Supi, das wuste ich noch nicht. Ist ja auch viel übersichtlicher. Danke Dir witkatz
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Siro
Die eigentliche Frage mit den Statusbits abfragen bei der asm("xxx") Abfrage bleibt aber eigentlich noch offen.
Bei mir funktionierte es mit
Code:
asm("btfss STATUS,2");
... weil in dem zu dem PIC dazugehörenden Header pic16fxxx.h der STATUS Register dem inline Assembler per asm("STATUS equ 03h") definiert wird. Dieser Header wird über die xc.h eingebunden und dadrin sind die SFR für den Inline Assembler definiert - aber nicht die Bits. Bei MPASM sind die SFR und die einzelnen Bits in der p16fxxx.inc definiert. Man kann die Definition der Bits für den Inline Assembler ergänzen, dann funktioniert die Zeroflag Abrage auch symbolisch
Code:
asm("Z EQU 0x0002");
//...
asm(" btfss STATUS,Z ");
Nachtrag:
Zitat:
Zitat von
Siro
Eine definierte Laufzeit, das geht nicht in "C" sondern nur in Assembler...
Darauf sollte man sich im Inline Assembler nicht verlassen, der vom XC8 compiliert und - wenn man es ihm nicht verbietet - optimiert wird. Ich wollte mal interessenhalber deine erste Delay-Routine als separates ASM Modul einbinden s.Bild und schwups wird die DECF BTFSS Sequenz zu DECFSZ optimiert. Ich habe mich nur gewundert, warum eine ASM Routine, die vorher mit asm() Anweisungen in C genau 1ms gebraucht hat (Simulation für PIC16F88 ), als ASM Modul um 25% schneller läuft. Gut zu wissen, dass XC8 auch innerhalb von ASM optimiert, aber für deterministische Laufzeiten ist das nicht so gut.
Anhang 32415