bits_macros.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. #ifndef BITS_MACROS_
  2. #define BITS_MACROS_
  3. /***********************************************************
  4. //BITS MACROS
  5. //PASHGAN 2009
  6. //CHIPENABLE.RU
  7. //
  8. //reg : имя переменной, регистра
  9. //bit : позиция бита
  10. //val : 0 или 1
  11. ************************************************************/
  12. #define Bit(bit) (1<<(bit))
  13. #define ClearBit(reg, bit) reg &= (~(1<<(bit)))
  14. //пример: ClearBit(PORTB, 1); //сбросить 1-й бит PORTB
  15. #define SetBit(reg, bit) reg |= (1<<(bit))
  16. //пример: SetBit(PORTB, 3); //установить 3-й бит PORTB
  17. #define SetBitVal(reg, bit, val) do{if ((val&1)==0) reg &= (~(1<<(bit)));\
  18. else reg |= (1<<(bit));}while(0)
  19. //пример: SetBitVal(PORTB, 3, 1); //установить 3-й бит PORTB
  20. // SetBitVal(PORTB, 2, 0); //сбросить 2-й бит PORTB
  21. #define BitIsClear(reg, bit) ((reg & (1<<(bit))) == 0)
  22. //пример: if (BitIsClear(PORTB,1)) {...} //если бит очищен
  23. #define BitIsSet(reg, bit) ((reg & (1<<(bit))) != 0)
  24. //пример: if(BitIsSet(PORTB,2)) {...} //если бит установлен
  25. #define InvBit(reg, bit) reg ^= (1<<(bit))
  26. //пример: InvBit(PORTB, 1); //инвертировать 1-й бит PORTB
  27. #endif//BITS_MACROS_