Autor Tema: Asignar un bit de un registro a otro bit  (Leído 1878 veces)

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

Desconectado renepics

  • PIC10
  • *
  • Mensajes: 2
Asignar un bit de un registro a otro bit
« 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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Asignar un bit de un registro a otro bit
« Respuesta #1 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;

Desconectado renepics

  • PIC10
  • *
  • Mensajes: 2
Re:Asignar un bit de un registro a otro bit
« Respuesta #2 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;


 

anything