PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pic12f1572.h ==> PS0 PS1 PS2 fehlen



Siro
16.11.2016, 11:17
Hallo,
mich hat grad der XC8 Compiler angemeckert ;)

und nach etwas Suchen, weis ich nun auch warum.

In der Datei pic12f1572.h fehlen die Bit Definitionen für den Prescale des Timers 0

um meinen Prescale des Timers 0 auf 1:2 einzustellen, sah mein Code so aus:

PS0 = 0;
PS1 = 0;
PS2 = 0;

was der Compiler mit "undefined identifier ..." anmeckert.

Diese Bits befinden sich im OPTION_REG

entweder man ändert den Headerfile oder man kann auch mit


OPTION_REGbits.PS0 = 0;
OPTION_REGbits.PS1 = 0;
OPTION_REGbits.PS2 = 0;

auf dieses Bits zugreifen, in der Typestructur sind diese nämlich noch vorhanden.

in der Headerdatei vom PIC12F1840 sind diese Bits auch vorhanden, dort kann man sich das "rausklauen" :) bzw. ansehen, wie es auszusehen hat.

Siro

Klebwax
16.11.2016, 11:35
Hallo,
mich hat grad der XC8 Compiler angemeckert ;)

und nach etwas Suchen, weis ich nun auch warum.

In der Datei pic12f1572.h fehlen die Bit Definitionen für den Prescale des Timers 0

um meinen Prescale des Timers 0 auf 1:2 einzustellen, sah mein Code so aus:

PS0 = 0;
PS1 = 0;
PS2 = 0;


Vielleicht hat der µC zuviele PSx Bits in verschiedenen Registern, daß es keinen Sinn macht, globale Symbole mit solchen Namen zu erstellen. Bei den PICs sind die kurzen Namen meist nur #defines für die vollständigen, wie


#define PS0 OPTION_REGbits.PS0

MfG Klebwax

Siro
16.11.2016, 23:09
Hallo Klebwax,
das kann man auch so machen, wie Du geschrieben hast, ich habe das probiert.

#define PS0 OPTION_REGbits.PS0
#define PS1 OPTION_REGbits.PS1
#define PS2 OPTION_REGbits.PS2

Es gibt dabei keine Namenskonflikte.
Compiliert der XC8 einwandfrei.

Klebwax
17.11.2016, 06:42
Ich benutze bei Parametern, die größer als ein Bit sind, gern die zusammengefasste Version:


OPTION_REGbits.PS = 0b000;

Das sieht dann genauso aus, wie die Beschreibung im Datenblatt.

MfG Klebwax

Siro
17.11.2016, 09:03
Sieht auf jeden Fall besser aus. ;-)