Pagina 1 di 1

Inversione di 2 bit in una sequenza

MessaggioInviato: 9 feb 2015, 19:36
da Davide90
Salve a tutti, ho un piccolo problema( stupido ) che non riesco a risolvere, ho la necessita di settare lo stato di due bit di una porta , una volta a zero e l altra volta a uno senza modificare i restanti bit della sequenza.
Esempio:
Supponiamo di conoscere lo stato di tutti i bit :
PORTA=0b00000000;
devo settare solamente i bit 1 e 2 , per farlo faccio un OR:

PORTA |= 0b00000011

per settarlo a zero faccio un AND della porta
PORTA = PORTA & 0b00000000

ma se io non conoscessi a priori lo stato dei pin da 7 a 2 , e pertanto avessi bisogno di lasciarli in quel modo modificando solo i bit 0 e 1 ?

Esempio :

PORTA=0bxxxxxx00;
con quale operazione setto ad 1 solo i primi due bit? E con quale li ripongo a 0?

Devo ricorrere necessariamente ad una maschera di bit?

Grazie

Re: Inversione di 2 bit in una sequenza

MessaggioInviato: 9 feb 2015, 19:49
da WALTERmwp
Ciao Foto UtenteDavide90, puoi fare prima un OR e poi un XOR utilizzando sempre la medesima "maschera" ovvero: 0b00000011
Codice: Seleziona tutto
così li metti a uno ...
PORTA = (PORTA) or (0b00000011)
così li metti a zero ...
PORTA = (PORTA) xor (0b00000011)

Saluti

Re: Inversione di 2 bit in una sequenza

MessaggioInviato: 9 feb 2015, 19:50
da IsidoroKZ
Non ho capito bene.

Se devi settare due bit, ad esempio il secondo e l'ultimo di un byte, indipendentemente dal loro valore precedente fai l'or del valore precedente con la parola binaria 01000001, Se devi resettarli, sempre indipendentemente dal loro valore precedente fai una AND con 10111110. Se devi invertirli, negarli, rispetto al loro valore precedente fai una exor con 01000001.

In ogni caso devi poter leggere il valore precedente, altrimenti, se le hai, usi le operazioni di set bit e reset bit.

Re: Inversione di 2 bit in una sequenza

MessaggioInviato: 9 feb 2015, 19:53
da angel99
Dipende dal micro che adoperi. Normalmente leggi la porta, modifichi il dato e la riscrivi. Alcuni micro hanno un registro separato per lo stato di uscita e per quello di ingresso. Altri in lettura prendono lo stato dei pin. Questo funzionamento può portare a problemi seri quando la porta ha dei pin in ingresso e altri in uscita, e di norma non puoi fare lettura-modifica-scrittura della porta. In questo caso devi avere una copia della porta in qualche parte della memoria del micro.

Re: Inversione di 2 bit in una sequenza

MessaggioInviato: 9 feb 2015, 21:54
da Davide90
Grazie a tutti ragazzi, ho usato prima un OR e poi uno XOR come suggerito da Foto UtenteWALTERmwp e Foto UtenteIsidoroKZ, Foto Utenteangel99, ho capito a cosa ti riferisci, sto usando uno shadow_register proprio per questo motivo.
Grazie ancora a tutti!