TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: renepics en 02 de Diciembre de 2016, 21:02:08

Título: Asignar un bit de un registro a otro bit
Publicado por: renepics en 02 de Diciembre de 2016, 21:02:08
Hola, buenas tardes:

Por favor, me podrían orientar como se puede hacer correctamente esta operación en C (MPLABX), es para un DSPic:

 _LATA1= ADCBUF0.bit.0;

Muchas gracias

Saludos
Título: Re:Asignar un bit de un registro a otro bit
Publicado por: KILLERJC en 02 de Diciembre de 2016, 21:57:22
Es todo un tema, por que es un buffer del ADC y apenas se lea significa que se pierde el dato, por lo cual lo ideal es que primero lo pases a una variable y luego lo uses..

Código: C
  1. int var;
  2.  
  3. var = ADCBUF0;
  4. _LATA1 = var & 0x1;


Si no te interesa guardarlo y no te importa si se pierde ese valor:

Código: C
  1. _LATA1 = ADCBUF0 & 0x1;
Título: Re:Asignar un bit de un registro a otro bit
Publicado por: renepics en 02 de Diciembre de 2016, 22:32:15
Hola, muchas gracias, eres muy amable.

Le estuve moviendo quedo el siguiente código funcionando para mover varios bits del CAD a dos puertos A y B en la posición que uno necesite cada bit.
Por si a alguno le interesa:

while(1)
        {
         ADC_CONVERT();
     
         
         fuente= ADC1BUF0;
         ZA=0x0000;
         ZB=0x0000;
         
         y = fuente & 0b0000000000000001;
         y = y << 1;
         ZA = ZA | y;
         
         y= fuente & 0b0000000000000010;
         y = y << 3;
         ZA = ZA | y;
         
         y= fuente & 0b0000000000000100;
         y = y >> 2;
         ZB = ZB | y;
         
         y= fuente & 0b0000000000001000;
         y = y >> 2;
         ZB = ZB | y;
         
         y= fuente & 0b0000000000010000;
         ZB = ZB | y;
         
         y= fuente & 0b0000000011100000;
         y = y << 2;
         ZB = ZB | y;
         
         y= fuente & 0b0000001100000000;
         y = y << 6;
         ZB = ZB | y;
         
         LATA=ZA;
         LATB=ZB;
        }

Saludos :)

Es todo un tema, por que es un buffer del ADC y apenas se lea significa que se pierde el dato, por lo cual lo ideal es que primero lo pases a una variable y luego lo uses..

Código: C
  1. int var;
  2.  
  3. var = ADCBUF0;
  4. _LATA1 = var & 0x1;


Si no te interesa guardarlo y no te importa si se pierde ese valor:

Código: C
  1. _LATA1 = ADCBUF0 & 0x1;