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
Inversione di 2 bit in una sequenza
Moderatore:
Paolino
5 messaggi
• Pagina 1 di 1
0
voti
0
voti
Ciao
Davide90, puoi fare prima un OR e poi un XOR utilizzando sempre la medesima "maschera" ovvero: 0b00000011
Saluti
- 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.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
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.
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
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
0
voti
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.
1
voti
5 messaggi
• Pagina 1 di 1
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 11 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



