Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Inversione di 2 bit in una sequenza

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Inversione di 2 bit in una sequenza

Messaggioda Foto UtenteDavide90 » 9 feb 2015, 19:36

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
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[2] Re: Inversione di 2 bit in una sequenza

Messaggioda Foto UtenteWALTERmwp » 9 feb 2015, 19:49

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
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[3] Re: Inversione di 2 bit in una sequenza

Messaggioda Foto UtenteIsidoroKZ » 9 feb 2015, 19:50

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.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
121,2k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 21059
Iscritto il: 17 ott 2009, 0:00

0
voti

[4] Re: Inversione di 2 bit in una sequenza

Messaggioda Foto Utenteangel99 » 9 feb 2015, 19:53

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.
Avatar utente
Foto Utenteangel99
3.516 1 5 11
Master
Master
 
Messaggi: 1148
Iscritto il: 23 gen 2015, 19:39

1
voti

[5] Re: Inversione di 2 bit in una sequenza

Messaggioda Foto UtenteDavide90 » 9 feb 2015, 21:54

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!
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti