// Shamelessly copied and mofied from Neil Gershenfeld's code by Rob Hart for purposes of instruction. // // // Button PA5 (pin 8). // LED PB2 (pin 5). #include #define output(directions,pin) (directions |= pin) // set port direction for output #define input(directions,pin) (directions &= (~pin)) // set port direction for input #define set(port,pin) (port |= pin) // set port pin #define clear(port,pin) (port &= (~pin)) // clear port pin #define pin_test(pins,pin) (pins & pin) // test for port pin #define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set #define input_port PORTA // The button is on port A #define input_direction DDRA // DDRA defines input/output for port A #define input_pin (1 << PA7) // The button is on pin 5 of port A #define input_pins PINA // PINA is the register that is read to detect input high or low. #define output_port PORTB // port B will be used for the LED #define output_direction DDRB // #define output_pin (1 << PB2) int main(void) { // // main // // initialize pins // output(output_direction, output_pin); set(input_port, input_pin); // turn on pull-up input(input_direction, input_pin); // // main loop // while (1) { // // // if (pin_test(input_pins,input_pin)) clear(output_port,output_pin); else set(output_port,output_pin); // // wait for button up // } }