Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: hayeker en 08 de Marzo de 2017, 01:02:09
Título: Maneras de adquisicion de datos de un puerto.
Publicado por: hayeker en 08 de Marzo de 2017, 01:02:09
Hola buenas noches.
Tengo una duda espero ser un poco claro.
a=input_b(); // recolecto en tamaño de byte lo que tengo en puerto b, pero tomando en cuenta todos los pines.
ahora si solo quisiera saber el estado de 3 pines, como lo haria?.
por ahi vi que es algo parecido a esto
a= input_b() && 0x04; es correcto?
o con solo asignar con el tris los pines de entrada y salidad puede reconocer el compilador que al momento de que use a=input_b(); solo tome en cuenta dichos pines?
Gracias espero y puedan orientarme.
Saludos. :o
Título: Re:Maneras de adquisicion de datos de un puerto.
Publicado por: hayeker en 08 de Marzo de 2017, 01:52:17
Hola buenas noches otravez,
con la novedad que encontre mi solucion, pero me gustaria saber si hay alguna otra manera de optimizar el codigo.
int a,b,c,k;
a= input_b(); b=change_value(a); // el puerto b esta pull up, asi que con esta funcion inverti los bits
for(c=0;c<=2;c++){ solo tomo en cuenta los bits que quiero conocer
if( bit_test(b,c)==1 ){ bit_set(k,c); } y aqui solo asignamos valores correspondientes a otra variables. else{ bit_clear(k,c); }
}
output_c(k); k=0;
utilize los tris y nada no funciona. asi que opte por ese pedazo de codigo.
Saludos.
Título: Re:Maneras de adquisicion de datos de un puerto.
Publicado por: KILLERJC en 08 de Marzo de 2017, 15:13:12
Es decir en orden haces:
- Invertir el valor del PORTB ( Por lo del Pull-up) - Luego solo aislas esos 3 bits - Finalmente asignas esos 3 bits a k
Podes hacerlo asi:
Código: C
output_c( ~input_b()&0b111);
Es decir... Supongamos que queremos pasar los bits de RB0, RB1 y RB3 a RC0, RC1 y RC3, observa que es el mismo numero.
Supongamos que PORTB tiene el valor 0101 0010, El primer paso es invertirlo quedando:
1010 1101
El proximo paso es la AND con 0b00001011 lo cual te lo deja:
1010 1101 0000 1011 -------------- 0000 1001
Observaras que todo bit con el que le hice AND si alguno estaba en 0, el resultado es 0, o por decirlo de otra forma, lo que haces es solamente dejar pasar los valores que poseen el 1 del numero 00001011.
Finalmente eso lo ponemos en el puerto C con el output_c... Entonces en este ejemplo tu funcion es:
Código: C
output_c( ~input_b()&0b1011);
Título: Re:Maneras de adquisicion de datos de un puerto.
Publicado por: hayeker en 09 de Marzo de 2017, 00:25:10
Hola buenas noches KILLERJC,
Exelente explicacion, mis respetos, gracias por el dato eso me ayuda a optimizar el codigo, no conocia ese operador (BITWISE), ahora si comprendo porque el AND.