MIKR/lectures/Comparator/interrupt+state.c

36 lines
703 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 dioda = 0;
// Przerwanie ktore wykonuje sie przy zmianie stanu kompratora
ISR(ANALOG_COMP_vect) {
if(dioda == 0) dioda = 1;
else dioda = 0;
}
int main(void) {
// Ustawienie portu C0 i C1 jako wyjscie
DDRC |= (1<<PC0) | (1<<PC1);
// Wlaczenie interrupt na toggle stanu komparatora
cli();
ACSR |= (1<<ACIE);
sei();
while(1) {
// Zmiana na bezposrednie zczytanie stanu
// B2 - AIN0
// B3 - AIN1
uint8_t AIN0_wieksze_od_AIN1 = ACSR & (1<<ACO);
if(AIN0_wieksze_od_AIN1) PORTC |= (1<<PC0);
else PORTC &= ~(1<<PC0);
// Zmiana na interrupt
if(dioda == 0) PORTC &= ~(1<<PC1);
else PORTC |= (1<<PC1);
}
return 0;
}