#include #include // #define FIRST_LETTER_IMPL(x) #x[0] // #define FIRST_LETTER(x) FIRST_LETTER_IMPL(x) // #define PORT_LETTER(PIN) FIRST_LETTER(PIN) #define SET(REGISTER, BIT) REGISTER |= 1 << BIT #define CLEAR(REGISTER, BIT) REGISTER &= ~(1 << BIT) #define TEST(REGISTER, BIT) REGISTER & 1 << BIT #define TOGGLE(REGISTER, BIT) REGISTER ^= 1 << BIT #define TEST_PIN(PORT, BIT) PIN ## PORT & 1 << BIT #define TOGGLE_PIN(PORT, BIT) PIN ## PORT |= 1 << BIT #define MODE_INPUT(PORT, BIT) CLEAR(DDR ## PORT, BIT) #define MODE_OUTPUT(PORT, BIT) SET(DDR ## PORT, BIT) #define IS_PIN_SET(PORT, BIT) (TEST_PIN(PORT, BIT)) == 0 #define IS_PIN_CLEAR(PORT, BIT) (TEST_PIN(PORT, BIT)) == 1 #define TURN_ON(_PORT, BIT) SET(PORT ## _PORT, BIT) #define TURN_OFF(_PORT, BIT) CLEAR(PORT ## _PORT, BIT) #define D1 0 #define D2 1 #define D3 2 #define D4 4 #define SW1 2 #define SW2 4 #define TIME 500 #define LED1 B0 int main() { MODE_OUTPUT(B, D2); TURN_OFF(B, D2); while(1) { TOGGLE_PIN(B, D2); _delay_ms(TIME); } }