// Librería de control para el expansor de 8 entradas con 74HC165.
// Versión: 1.0
// Fecha: 14/07/09
// Ejemplo de uso de la función:
// i = lee_entradas();
// Pines intercambiables según necesidades del usuario.
#define ena_ser PORTA.F3 // Pin HABILITACIÓN.
#define ckl_ser PORTA.F4 // Pin RELOG.
#define dat_ser PORTA.F5 // Pin DATOS.
// Los pines del puerto deben ser configurados de esta manera:
/*
TRISA.F5 = 0x01;
TRISA.F4 = 0x00;
TRISA.F3 = 0x00;
*/
// Declaramos la función.
char lee_entradas(); // Devuelve una variable con el contenido del registro de desplazamiento.
char lee_entradas() {
char contador,ei;
ckl_ser = 1; // Pone el pin de ckl a nivel alto.
ena_ser = 0; // Guarda el estado de las entradas.
ena_ser = 1; // Habilita al 74165 para recibir nuevos datos.
ei = 0; // Pone a 0 la variable que va a contener el dato del registro.
for(contador=1;contador<=8;++contador) { // Genera clock para hacer el corrimiento de bits de la estructura.
if(dat_ser==1) { ei = ei + 1;} // Si se recibe un 1 lo guarda en la variable.
if(contador<8){ei<<=1;} // Desplaza un bit de la variable para poder almacenar el proximo dato.
ckl_ser = 0; // Pone a nivel bajo el pin de ckl.
ckl_ser = 1; // Pone a nivel alto el pin de ckl.
}
ena_ser = 0;
return(ei); // Retorna con el valor de la función.
}