Decode ADC Result Using Union Bitfields

Code

#include <stdio.h>
#include <stdint.h>

typedef union{
    struct{
        uint16_t adc_value: 12; // The first 12 bits represent the ADC value
        uint16_t channel: 4;    // The last 4 bits represent the channel number
    }adc_register;

    uint16_t adc_reg;
}ADC_Result;

void ADC_Analyze(uint16_t input){
    ADC_Result adc;
    adc.adc_reg = input;
    printf("Channel: %hu\n", adc.adc_register.channel);
    printf("ADC Value: %hu\n", adc.adc_register.adc_value);
} 

int main(){
    uint16_t data;
    scanf("%hx", &data);
    ADC_Analyze(data);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

0xC3F5

Expected Output

Channel: 12 ADC Value: 1013