Search code examples
cmplabxc8

I want to get bit of char on MPLAB XC8 but I can't?


My function to get bit is:

extern volatile unsigned char Temp       @ 0x036;
extern volatile __bit W       @ (((unsigned) &Temp)*8) + 4;

void get_bit(volatile unsigned char *reg, unsigned num) {
    W = (*reg & (1 << num));
}

Main function is:

int main() {
    volatile unsigned char ch = 0b00001000;
    get_bit(&ch, 4);
}

When I compile this code of blocks I get an error (error: expression syntax).

What can I do to fix this problem?


Solution

  • Try this code:

    #include <stdio.h>
    
    unsigned char get_bit(unsigned char reg, unsigned num) 
    {
        return (reg & (1 << num));
    }
    
    unsigned char get_bit2(unsigned char reg, unsigned num) 
    {
        return (reg & (1 << num))?1:0;
    }
    
    int main() 
    {
        volatile unsigned char ch = 0b00001000;
    
        ch |= (1<<4);   // To set bit 4
        printf("%d\n",get_bit(ch, 4)); // If you try on a PC
        printf("%d\n",get_bit2(ch, 4)); // If you try on a PC
    
        ch &= (~(1<<4));   // To reset bit 4
        printf("%d\n",get_bit(ch, 4)); // If you try on a PC
        printf("%d\n",get_bit2(ch, 4)); // If you try on a PC
    
    
        return 0;
    }