#include #include #define LED PA7 #define DELAY 50 #define do_delay() _delay_ms(DELAY); // Port definition #define input_port PORTB #define input_direction DDRB #define input_pin (1 << PB2) #define input_pins PINB // Helpers from Neil #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 bit_delay_time 102 // bit delay for 9600 with overhead #define bit_delay() _delay_us(bit_delay_time) // RS232 bit delay #define half_bit_delay() _delay_us(bit_delay_time/2) // RS232 half bit delay // Logic specific to this program #define button_is_up() 0 != pin_test(input_pins,input_pin) #define set_led_on() PORTA |= (1 << LED); #define set_led_off() PORTA &= ~(1 << LED); int main(void) { DDRA |= (1 << LED); set_up_oscillator(); set_up_button(); while (1) { while (button_is_up()); do_delay(); set_led_on(); do_delay(); set_led_off(); } } void set_up_oscillator(void) { CLKPR = (1 << CLKPCE); CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0); } void set_up_button(void) { set(input_port, input_pin); input(input_direction, input_pin); }