Autor Tema: Maneras de adquisicion de datos de un puerto.  (Leído 1859 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado hayeker

  • PIC10
  • *
  • Mensajes: 18
Maneras de adquisicion de datos de un puerto.
« 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

Desconectado hayeker

  • PIC10
  • *
  • Mensajes: 18
Re:Maneras de adquisicion de datos de un puerto.
« Respuesta #1 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.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Maneras de adquisicion de datos de un puerto.
« Respuesta #2 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
  1. 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
  1. output_c( ~input_b() & 0b1011 );

Desconectado hayeker

  • PIC10
  • *
  • Mensajes: 18
Re:Maneras de adquisicion de datos de un puerto.
« Respuesta #3 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.

Me ahorraste un buen pedazo de codigo. jeje.   :o

Gracias.  ((:-))

Saludos.