
Que tal assim...
- Código: Selecionar todos
#define BIT_0 1<<0
#define BIT_1 1<<1
#define BIT_2 1<<2
#define BIT_3 1<<3
#define BIT_4 1<<4
#define BIT_5 1<<5
#define BIT_6 1<<6
#define BIT_7 1<<7
#define BIT_8 1<<8
#define BIT_9 1<<9
...
#define BIT_31 1<<31
Fala sério

- Código: Selecionar todos
#define B8__(x) ((x&0x0000000fLU)?1:0) \
+((x&0x000000f0LU)?2:0) \
+((x&0x00000f00LU)?4:0) \
+((x&0x0000f000LU)?8:0) \
+((x&0x000f0000LU)?16:0) \
+((x&0x00f00000LU)?32:0) \
+((x&0x0f000000LU)?64:0) \
+((x&0xf0000000LU)?128:0)
#define HEX__(n) 0x##n##LU
#define b8(d) ((unsigned char)B8__(HEX__(d)))
/* for upto 16-bit binary constants, MSB first */
#define b16(dmsb,dlsb) (((unsigned short)b8(dmsb)<< \
+ b8(dlsb))
/* for upto 32-bit binary constants, MSB first */
#define b32(dmsb,db2,db3,dlsb) (((unsigned long)b8(dmsb)<<24) \
+ ((unsigned long)b8(db2)<<16) \
+ ((unsigned long)b8(db3)<< \
+ b8(dlsb))
/* Sample usage:
b8(01010101) = 85
b16(10101010,01010101) = 43605
b32(10000000,11111111,10101010,01010101) = 2164238933
*/
Agora isso
- Código: Selecionar todos
#define BCD2BYTE( b ) ( ( ( ( ( b ) >> 4 ) & 0x0f ) * 10 ) + ( ( b ) & 0x0f ) )
#define BYTE2BCD( b ) ( ( ( ( b ) / 10 ) << 4 ) + ( ( b ) % 10 ) )
unsigned char bcd2byte(unsigned char d)
{
return BCD2BYTE(d);
}
//-----------------------------------------------------
unsigned byte2bcd(unsigned char d)
{
return BYTE2BCD(d);
}
também pode não ser totalmente inútil quando isso...
- Código: Selecionar todos
#define setbit(var,bitno) ((var) |= 1 << (bitno))
#define clrbit(var,bitno) ((var) &= ~(1 << (bitno)))
#define xorbit(var,bitno) ((var) ^= 1 << (bitno))
Sei lá ... é pouco mas é o 'pagamento' das lustradas de bits que tenho . A propósito consegui fazer funcionar o stm32 na simulação do proteus... uhhull.
abç