This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| fr:examples:digi:timer [2009/03/25 23:28] – créée sdeniaud | fr:examples:digi:timer [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Timer ====== | ||
| + | Les //timers// sont très souvent utilisés lorsqu' | ||
| + | ===== Exemple de LED clignotante ===== | ||
| + | |||
| + | |||
| + | <code c> | ||
| + | /* | ||
| + | Labor 2 example | ||
| + | |||
| + | Blincking LED using timer | ||
| + | Raivo Sell 2008 | ||
| + | |||
| + | LED = 0 (ON) LED = 1 (OFF) | ||
| + | PORT direction: 1-output 0-input | ||
| + | */ | ||
| + | |||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | static int i; //globale variable | ||
| + | int SAGEDUS = 10; // blincking frequency | ||
| + | |||
| + | #define INV(x) ^=(1<< | ||
| + | #define LED 4 // Blincking LED (in this example LED2 (yellow) | ||
| + | |||
| + | // Interrupt function - starts on timer buffer overrun | ||
| + | |||
| + | ISR (TIMER1_OVF_vect){ | ||
| + | i++; // increments every time when function is executed | ||
| + | if (i> | ||
| + | PORTC INV(LED); // Inverting LED | ||
| + | i=0; // repeater is set to zero | ||
| + | } | ||
| + | } | ||
| + | |||
| + | int main (void) { | ||
| + | // Timer control regiters | ||
| + | TCCR1A = 0x00; | ||
| + | TCCR1B = _BV(CS10); //clk/1 (No prescaling) | ||
| + | | ||
| + | DDRC = 0x38; // DDRC 0bXX111000 | ||
| + | PORTC = 0x3F; // PORTC 0bXX111111 | ||
| + | |||
| + | TIMSK = _BV (TOIE1); // Overrun interrupt is enabled | ||
| + | sei (); // Global interrupts are enabled | ||
| + | |||
| + | while(1); // endless loop | ||
| + | // No action here, LED is inverted through the interrupt function | ||
| + | } | ||
| + | </ | ||