¿No se pueden combinar dos valores juntos?
Estoy usando el PIC18lF47k42 con el compilador XC8.
Estoy tratando de obtener este valor completo del ADC de 12 bits, para tener la resolución completa, sin embargo, no puedo hacer que los 4 bits de datos de ADRESL
se agreguen a “result” junto con los datos de ADRESH
.
“Result” es una variable de 16 bits para que pueda almacenar los 12 bits. ¿Alguna idea?
Ejemplo:
ADRESH = 00110101 ADRESL = 10100000, quiero que “result” sea igual a 0000001101011010.
#include "myIncludes.h"
volatile unsigned char ZCDSoftwareFlag = 0;
volatile unsigned char switchValue = 0;
void main(void)
{
portInit();
adcInit();
uint16_t result;
while (1)
{
ADCON0bits.GO = 1; // Iniciar la conversión
while (ADCON0bits.GO); // Esperar a que la conversión termine
result = 0b0000000000000000;
result = ADRESH << 4;
result = (result) | ADRESL;
//result = (ADRESH << 4) | ADRESL;
}
}
davy.ai
Para obtener el valor completo de 12 bits del ADC en la variable
result
, es necesario concatenar los bitsADRESL
con los bitsADRESH
.Aquí tienes un ejemplo de código que logra esto:
En este código, el valor de
ADRESH
se desplaza 8 bits hacia la izquierda para dar espacio a los bitsADRESL
, los cuales se OR’d con el valor desplazado para crear la variable de 16 bitsresult
.Es importante tener en cuenta que este código asume que los bits más significativos del valor del ADC se almacenan en
ADRESH
y los bits menos significativos se almacenan enADRESL
. Si esto no es así, las operaciones de desplazamiento y OR deberán ajustarse en consecuencia.