Buenas a todos, ante todo agradecer vuestro trabajo.
Y al tema.
Uso un pic 18F2550, compilador ccs pcwhd 4.084.
Estoy usando un LCD 44780 en el puertoA con el siguiente mapeo:
// A0 D4
// A1 D5
// A2 D6
// A3 D7
// A4 enable
// A5 rs
Funciona bien pero no me gusta nada como lo he conseguido.
os pego el codigo y os explico:
struct lcd_pin_map {
int data : 4;
BOOLEAN enable;
BOOLEAN rs;
BOOLEAN unused1;
BOOLEAN unused2;
} lcd;
//
//#if defined(__PCH__)
#byte lcd = 0xF80 // This puts the entire structure
hasta aqui seria el puerto de datos invertdo a como lo tengo en la pcb, hasta ahora D4 sería A0, D5->A1.... para invertirlo y dejerlo como en la pcb(D7 en A0, D6 en A1....) tengo una rutina que lo invierte:
BYTE inv(byte n){
BYTE i;
if (bit_test(n,0))
bit_set(i,3);
else
bit_clear(i,3);
if (bit_test(n,1))
bit_set(i,2);
else
bit_clear(i,2);
if (bit_test(n,2))
bit_set(i,1);
else
bit_clear(i,1);
if (bit_test(n,3))
bit_set(i,0);
else
bit_clear(i,0);
return i;
}
y cuando send_nibble escribe en el puerto llama a esta rutina, de la siguiete forma:
void lcd_send_nibble( BYTE n ) {
lcd.data = inv(n);
...
...
en fin estoy seguro que hay otra forma mejor de hacerlo por ejemplo cuando defino el struct, si me pudieran ayudar estaré muy agradecido.
Saludos