Assegnazione PINOUT MCU

Nella libreria che utilizzo per il controllo di Display a 16 bit ho la seguente assegnazione dei pin :

void DISPLAY::_setta_direzione_registri(byte tipo)
{
	DDRA = 0xFF;
 	DDRC = 0xFF;
}

Dove sulla porta A ci sono i primi 8 bit e sulla porta C c'e' il secondo gruppo di 8 bit.
Ora io, per praticita' di sviluppo del PCB, vorrei invertire il secondo gruppo, quindi capovolgere la porta C.
Per spiegarmi meglio in pratica se ora ho C0->bit8......C7->bit15 io voglio correggerlo in C0->bit15......C7->bit8.
Posso farlo? Come?
Vi ringrazio.

Si, se po fa.
--> http://www.tomshw.it/forum/programmazione/298221-c-esiste-una-funzione-che-inverte-lordine-dei-bit-allinterno-di-un-byte.html

unsigned char mirror (unsigned char *n)
{
unsigned char out = 0;  
for (int j=7, int i=0; i<8; i++, j--) out |= ((*n>>i)&1)<<j;       
return out;
}

Prima di passare il byte al registro lo dovrai specchiare.

val = mirror(&val);
PORTC = val;

oppure

PORTC = mirror(&val);

si capito, mi creo la funzione di inversione, pero' cosi facendo dovrei andare a modificare tutte le funzioni che scrivono i dati sul bus richiamando la mia funzione di inversione, sarebbe un po' complicato.
Non c'e' un modo diverso per assegnarli capovolti direttamente nell' assegnazione dei pin?
Magari potrei variare l' assegnazione del pinout nella dichiarazione Hardware della MCU? (pins_arduino.h) ???? Edit:...mmm pensandoci bene mi sa che non posso farlo...

Hai 2 strade:

  1. modificare il codice della libreria che ti sei fatto
void DISPLAY::_setta_direzione_registri(byte tipo) {
	DDRA = mirror(tipo);
 	DDRC = mirror(tipo);
}
  1. modificare il codice dello sketch: invece di chiamare _setta_direzione_registri(byte) richiamerai mirror(_setta_direzione_registri(byte tipo)).

La 3° strada è rimasterizzare i PCB.

Perdonami Leo, io erroneamente ho quotato l' assegnazione della direzione delle porta se in Out (nel mio caso) o in Input.
In realta' io devo ribaltare il segnale in uscita, quindi devo ribaltare il PORTC=XX.
Posso utilizzare allo stesso modo il comando PORTC=mirror(XX) ???
Ti ringrazio.

Si Paolo, il PCB lo posso cambiare come mi pare....ma con l' assegnazione standard le piste mi si intrecciano alla grande.....se c'e' una strada piu' semplice ben venga, altrimenti cambio il PCB.

Deltoz:
Posso utilizzare allo stesso modo il comando PORTC=mirror(XX) ???
Ti ringrazio.

Certo. Assegni a PORTC il risultato della funzione mirror.

Ma non ho capito se "mirror" e' gia' un comando di "C" oppure devo creare io la funzione come gia' aveva detto Paolo.

Devi crearti la funzione.
Occhio che devi passare il parametro con &

ok, sto preparando la bread per fare le prove, vi faccio sapere il risultato.
Mille grazie per ora.