Hi, gibt es die Möglichkeit Bitgruppen als ganzes anzusprechen? z.B hat mein PIC im ADCON0 Register die Gruppe CHS (CHS3-CHS0). Und jetzt möchte ich z.B. einfach ADCON0.CHS = 1010 zuweisen, statt über ADCON0bits.CHSx jedes einzeln anzusprechen. Geht sowas? Gruß
Hi. Du kannst das über eine Maskierung der Bits machen. ADCON0 = ADCON0 | 0b00001010; Bin mir grad nicht mit der Positon sicher und ich bin mir grad auch nicht sicher, ob das nicht irgendwo zwischengespeichert werden muss. Ansosten sollte das passen.
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; |
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
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;
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.