/*
* Hackaday.com AVR Tutorial firmware
* written by: Mike Szczys (@szczys)
* 10/24/2010
*
* ATmega168
* Blinks one LED conneced to PD0
*
* http://h...content-available-to-author-only...y.com/2010/10/25/avr-programming-02-the-hardware/
*/
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void)
{
//Setup the clock
cli(); //Disable global interrupts
TCCR1B |= 1<<CS11 | 1<<CS10; //Divide by 64
OCR1A = 15624; //Count 15624 cycles for 1 second interrupt
TCCR1B |= 1<<WGM12; //Put Timer/Counter1 in CTC mode
TIMSK1 |= 1<<OCIE1A; //enable timer compare interrupt
sei(); //Enable global interrupts
//Setup the I/O for the LED
DDRD |= 0xff; //(1<<0); //Set PortD Pin0 as an output
PORTD = 0xff; //(1<<0); //Set PortD Pin0 high to turn on LED
while(1) { } //Loop forever, interrupts do the rest
}
ISR(TIMER1_COMPA_vect) //Interrupt Service Routine
{
static uint8_t val = 0;
val ++;
PORTD = ~val; // (1<<0); //Use xor to toggle the LED
}
LyoKKiBIYWNrYWRheS5jb20gQVZSIFR1dG9yaWFsIGZpcm13YXJlCiogd3JpdHRlbiBieTogTWlrZSBTemN6eXMgKEBzemN6eXMpCiogMTAvMjQvMjAxMAoqCiogQVRtZWdhMTY4CiogQmxpbmtzIG9uZSBMRUQgY29ubmVjZWQgdG8gUEQwCioKKiBodHRwOi8vaC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ueS5jb20vMjAxMC8xMC8yNS9hdnItcHJvZ3JhbW1pbmctMDItdGhlLWhhcmR3YXJlLwoqLwoKI2luY2x1ZGUgPGF2ci9pby5oPgojaW5jbHVkZSA8YXZyL2ludGVycnVwdC5oPgoKaW50IG1haW4odm9pZCkKewoKICAvL1NldHVwIHRoZSBjbG9jawogIGNsaSgpOwkJCS8vRGlzYWJsZSBnbG9iYWwgaW50ZXJydXB0cwogIFRDQ1IxQiB8PSAxPDxDUzExIHwgMTw8Q1MxMDsJLy9EaXZpZGUgYnkgNjQKICBPQ1IxQSA9IDE1NjI0OwkJLy9Db3VudCAxNTYyNCBjeWNsZXMgZm9yIDEgc2Vjb25kIGludGVycnVwdAogIFRDQ1IxQiB8PSAxPDxXR00xMjsJCS8vUHV0IFRpbWVyL0NvdW50ZXIxIGluIENUQyBtb2RlCiAgVElNU0sxIHw9IDE8PE9DSUUxQTsJCS8vZW5hYmxlIHRpbWVyIGNvbXBhcmUgaW50ZXJydXB0CiAgc2VpKCk7CQkJLy9FbmFibGUgZ2xvYmFsIGludGVycnVwdHMKCiAgLy9TZXR1cCB0aGUgSS9PIGZvciB0aGUgTEVECgogIEREUkQgfD0gMHhmZjsgLy8oMTw8MCk7CQkvL1NldCBQb3J0RCBQaW4wIGFzIGFuIG91dHB1dAogIFBPUlREID0gMHhmZjsgLy8oMTw8MCk7CQkvL1NldCBQb3J0RCBQaW4wIGhpZ2ggdG8gdHVybiBvbiBMRUQKCiAgd2hpbGUoMSkgeyB9CQkJLy9Mb29wIGZvcmV2ZXIsIGludGVycnVwdHMgZG8gdGhlIHJlc3QKfQoKSVNSKFRJTUVSMV9DT01QQV92ZWN0KQkJLy9JbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lCnsKICBzdGF0aWMgdWludDhfdCB2YWwgPSAwOwogIHZhbCArKzsKCiAgUE9SVEQgPSB+dmFsOyAvLyAoMTw8MCk7CQkvL1VzZSB4b3IgdG8gdG9nZ2xlIHRoZSBMRUQKfQ==