PIC + C18 Syntax

#2077576
Lesenswert?
• ▲
▼
Das ist eine gute Frage.

Was auf jeden Fall gehen müßte: die entsprechende Variable aus deiner 
Architektur-Include rausklauen und eine eigene machen.

Also wenn die z.B. so aussieht:
1
typedef struct {
2
  unsigned ADON:1;
3
  unsigned :1;
4
  unsigned GO:1;
5
  unsigned CHS0:1;
6
  unsigned CHS1:1;
7
  unsigned CHS2:1;
8
  unsigned ADCS0:1;
9
  unsigned ADCS1:1;
10
} __ADCON0bits_t;
11

12
extern volatile __ADCON0bits_t __at (0x00) ADCON0bits;

kannst du dir machen:
1
typedef union {
2
  struct {
3
    unsigned ADON:1;
4
    unsigned :1;
5
    unsigned GO:1;
6
    unsigned CHS:3;
7
    unsigned ADCS0:1;
8
    unsigned ADCS1:1;
9
  };
10
  struct {
11
    unsigned ADON:1;
12
    unsigned :1;
13
    unsigned GO:1;
14
    unsigned CHS0:1;
15
    unsigned CHS1:1;
16
    unsigned CHS2:1;
17
    unsigned ADCS0:1;
18
    unsigned ADCS1:1;
19
  };
20
} my_ADCON0bits_t;
21

22
extern volatile my_ADCON0bits_t __at (0x00) ADCON0bits;
#2077659
Lesenswert?
• ▲
▼
Die Anmerkung von Andre ist mit Sicherheit interessant ...

Standartmäßig sind mir keine Varianten bekannt - ich würde das 'normal' 
so machen:

ADCON0 |= ((1 << MEINBIT0) | (1 << MEINBIT1) | (1 << MEINBIT2) | (1 << 
MEINBIT3));

wobei MEINBITx immer für die BitNr steht!

// setzt Bit 0 und 2 in PORTB auf "1"

Genaueres findest du unter 
http://www.mikrocontroller.net/articles/Bitmanipulation

Hast du mal probiert was passiert wenn du:

ADCON0.CHS = 0b00001010;

wählst? Ich tippe mal auf einen Fehler - wäre zu schön wenn's so ginge
Gast #2077680
Lesenswert?
• ▲
▼
Lehrmann Michael schrieb:
> ADCON0.CHS = 0b00001010;
>
> wählst? Ich tippe mal auf einen Fehler - wäre zu schön wenn's so ginge

C18 benutze ich zwar nicht (das ist doch dieser furchtbare HI-TECH
Compiler, oder?) auf allen anderen Microchip-Compilern,
C30, C32 ist so etwas Standard und funktioniert bestens:

  ADCON0.CHS = 0b1010;
  ADCON1.ACQT = 0b101;
  ADCON1.ADCS = 0b110;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren