GINGARDU:
questa cosa è interessante ma alla fine dei "conti"volevo sapere che cosa succede a i pin che non voglio che siano toccati,
Tu non leggi ciò che ti scrivo 
leo72:
GINGARDU:
volevo chiedere se c'è la possibilita di evitare di scrivere una porta con il comando
PORTD = B10101000;
esempio qui il pin 3 viene portato a HIGH
Più precisamente, sono impostati su High i pin 7, 5 e 3, non solo il pin 3.
[/quote]
esempio reale, pin 2 e 3 settati come input per interrupt, pin 0,1,4,5,6,7, settati come output nel setup
se faccioPORTD = B11111111; coa accade a i 2 e3 ?
continuano a funzionare come imput o vengono portati a HIGH
Con questo comando metti tutti i bit ad 1 (come detto sopra).
OPPURE pin A4 A5 SETTATI come pin digitali A0 A1 A2 LI ADOPERO COME ANALOGICI
se faccio PORTC = B11111111; che gli succede a A0 A1 A2 continuano a funzionare come analogici oppure vengono portati a HIGH
La seconda che hai detto.
La manipolazione per come la vuoi fare te, ossia scrivere l'intero ottetto di bit in un registro, comporta che cambi di stato anche ai bit che non vuoi toccare.
Esempio. Vuoi impostare ad 1 solo i bit 3 e 5 lasciando inalterati gli altri bit.
Hai 2 strade:
- la via facile, usare le funzioni del core. Fai
bitSet(PORTD, 3);
bitSet(PORTD, 5);
- la via difficile (ma non troppo). Fai:
PORTD |= ((1<<3) | (1<<5));
La differenza sta nel fatto che usando le funzioni del core, nel caso bitSet, devi scrivere 1 istruzione per bit, mentre manipolando direttamente i bit puoi compattare tutto in 1 sola istruzione.
L'ultimo esempio si trasforma in PORTD = PORTD OR (8 OR 32), cambi ad 1 quindi il bit 3 (2^3=8) ed il bit 5 (2^5=32).
Ricordati sempre che:
bit 0 -> 1° bit
bit 1 -> 2° bit
....
bit 7 -> 8° bit
Cioè che la loro posizione (1°..8°) è differente dal loro indice (0..7).