#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) TEST(PIN ## port, bit) #define TOGGLE_PIN(port, bit) TEST(PIN ## port, 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 // LEDs #define TURN_ON_LED(bit) SET(PORTB, bit) #define TURN_OFF_LED(bit) CLEAR(PORTB, bit) #define TOGGLE_LED(led) TOGGLE_PIN(B, led) #define D1 0 #define D2 1 #define D3 2 #define D4 4 #define SW1 2 #define SW2 4 #define PRESCALE_VALUE 64 #define TIME(ms) (((F_CPU / PRESCALE_VALUE) * ms) / 1000) #define LED1 B0 int main() { MODE_OUTPUT(B, D2); TURN_OFF_LED(D2); // TCCR1B |= (PRESCALE); // set timer with prescale // TCCR1B |= ((1 << CS10 ) | (1 << CS11 ) ); // set timer with prescale while(1) { // if ( TCNT1 >= TIME(500)) { // TOGGLE_LED(D2); TOGGLE_PIN(B, D2); _delay_ms(500); // TCNT1 = 0; // reset timer value // } } }