/*
------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------- Globaler Header ---------------------------------------------------
*************************************************** macros.h ** V1.1 ***************************************************
------------------------------------------- Zur Definition besonderer Makros -------------------------------------------
------------------------------------------------------------------------------------------------------------------------
 Version..............: 1.1
 Compiler.............: CodeVisionAVR
 Chip.................: ATmega88
 Datum................: Juni 2009
 Autor................: Alwin Lenck (ALE23) basierend auf der Header-Datei macros.h von Udo Juerss
------------------------------------------------------------------------------------------------------------------------
Allgemeines:
In dieser Header-Datei werden besondere Makros definiert.
*/

//----------------------------------------------------------------------------------------------------------------------
// Abfrage, ob diese Header-Datei bereits aufgerufen wurde. Wenn JA, dann alle Anweisungen ignorieren!
//----------------------------------------------------------------------------------------------------------------------
#ifndef __MACROS_H
#define __MACROS_H                                // Wenn NEIN, dann wird hier der Schalter gesetzt, dass zukuenftig
                                                  // diese Header-Datei nicht noch einmal hinzugefuegt wird.

//----------------------------------------------------------------------------------------------------------------------
// Definitionen von Assembler-Makros
//----------------------------------------------------------------------------------------------------------------------
#define SEI()   #asm("sei")                       // Set Interrupt Flag
#define CLI()   #asm("cli")                       // Clear Interrupt Flag
#define NOP()   #asm("nop")                       // No Operation
#define WDR()   #asm("wdr")                       // Watchdog Reset
#define SLEEP() #asm("sleep")                     // Sleep

//----------------------------------------------------------------------------------------------------------------------
// Definitionen von Bit- und Byte-Makros
//----------------------------------------------------------------------------------------------------------------------
#define SBI(prt,bit)      {#asm("sbi prt bit") ;}
#define SET_BIT(byte,bit) (byte |= bit)           // Set bit in byte
#define CLR_BIT(byte,bit) (byte &= ~bit)          // Clear bit in byte
#define TGL_BIT(byte,bit) (byte ^= bit)           // Toggle bit in byte

#define IS_SET(reg,bit)   (reg & bit)             // TRUE if bit = 1
#define IS_CLR(reg,bit)   !(reg & bit)            // TRUE if bit = 0

#define BIT(x)            (1 << (x))              // Define bit value
#define HI(x)             ((x) >> 8)              // Highbyte of 16-bit value

#define ABS(x)            ((x >= 0) ? x : -x)     // Absolute value of x

#define HI_HEX(x) ("0123456789ABCDEF" [x >> 4])   // Create hex of high nibble
#define LO_HEX(x) ("0123456789ABCDEF" [x & 0x0F]) // Create hex of low nibble

//----------------------------------------------------------------------------------------------------------------------
// Mit #endif endet jede Header-Datei
//----------------------------------------------------------------------------------------------------------------------
#endif

