MIKR/learning/comparator_led_interrupt.c

39 lines
627 B
C
Raw Normal View History

2024-04-16 20:18:18 +02:00
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint8_t current_led = 3;
volatile uint8_t reverse = 0;
ISR(ANALOG_COMP_vect){
uint8_t next = current_led + 1;
if (next > 3){
next = 0;
reverse = (reverse + 1) % 2;
}
if (!reverse){
PORTC |= (1<<next);
}else{
PORTC &= ~(1<<next);
}
current_led = next;
}
int main(void){
// ustawienie C0-C3 jako wyjscie
DDRC |= 0b00001111;
// wylaczenie interrupow
cli();
// wlaczenie interrupu na komparator
ACSR |= (1<<ACIE);
// wlaczenie interrupow
sei();
for(;;);
return 1;
}