Vai al contenuto
PLC Forum


scrivere singolo bit - C18


DG.M

Messaggi consigliati


Inizialmente mi chiedevo se fosse possibile "chiamare" direttamente un bit, come si fa per i registri, ho capito che non si può ma la via dell'AND è addirittura più comoda

Link al commento
Condividi su altri siti

  • 2 weeks later...
ifachsoftware

Per usare direttamente i singoli bit dovresti fare una struttura tipo questa (l'esempio e' a 16 Bit) :

typedef struct sBit

{

unsigned int B0 :1;

unsigned int B1 :1;

unsigned int B2 :1;

unsigned int B3 :1;

unsigned int B4 :1;

unsigned int B5 :1;

unsigned int B6 :1;

unsigned int B7 :1;

unsigned int B8 :1;

unsigned int B9 :1;

unsigned int B10 :1;

unsigned int B11 :1;

unsigned int B12 :1;

unsigned int B13 :1;

unsigned int B14 :1;

unsigned int B15 :1;

}sBit;

typedef union sDato // Una Union differisce dalla struct per il fatto che il dato e' condiviso

{

unsigned int W;

sBit B;

}sDato;

void main()

{

sDato ArrBit;

ArrBit .W = 0; // Azzera tutti i bit

ArrBit.B.B0 = 1; // Mette ad 1 il Bit 0

ArrBit.B.B1 = 0; // Mette a 0 il Bit 1

}

Ciao smile.gif

Link al commento
Condividi su altri siti

grazie!

Non ho capito bene la sintassi di

unsigned int B5 :1;

Cosa vuol dire :1?

O meglio:

-il tipo di dato di sBit deve essere lo stesso di W? Cioè perchè dichiarare int dei singoli bit, e non boolean?

-l' :1 indica il numero di bit, partendo a dichiarare dal meno significativo?

Per capire meglio, volessi poter modificare singolarmente i bit più significativi ed in blocco il byte meno significativo, come sarebbe la dichiarazione nella struct?

Grazie

Domenico

Link al commento
Condividi su altri siti

ifachsoftware

Vuol dire che prendi 1 Bit

Deve avere la stessa dimensione

Il tipo BOOL ce l'hanno solo alcuni compilatori

Ho usato il tipo unsigned int perche' i DSPIC da cui ho estrapolato questo codice sono a 16Bit ed il tipo unsigned int viene manipolato velocemente.

Ciao smile.gif

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...