la ultima estaria bien, lo que te da es un warning, para que no te lo de puedes poner =(estructura_teclado*)0xf8a;
la 1º te da error porque la declaras 2 veces, para que no te de error tendrias que quitar el }teclado; y poner solamente }; te pongo como lo deberias poner:
esto arriba del todo:
struct estructura_teclado {
unsigned fila0_3 :4; // columnas del teclado
unsigned col0_3 :4; // filas del teclado
};
y ahora o bien en el main, o bien como variable global pondrias;
far struct estructura_teclado *teclado=(struct estructura_teclado *)0xf8a;
otra solucion: far struct estructura_teclado *teclado=(struct estructura_teclado *)&LATB;