Ðналоговый компаратор
Материал из Automata.
#include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h>
//логическая переменная состояния РС7;
static volatile uint8_t status = 0;
//обработчик прерывания от компаратора;
ISR (ANA_COMP_vect)
{
if (status == 0) {//если напряжения на выводе PC7 нет, то
PORTC |= 0x80;//подаем на него логическую "1" и
status = 1;//запаминаем новое состояние;
} else {//если есть, то
PORTC &= 0x7f;//подаем на вывод логический "0" и
status = 0;//запаминаем новое состояние;
};
}
//главная функция;
int main (void)
{
DDRB = 0xff;//настраиваем выводы порта В на выход;
PORTB = 0x00;//без подачи напряжения;
DDRC = 0xff;//настраиваем выводы порта С на выход;
PORTC = 0x00;//без подачи напряжения;
ACSR = _BV(ACBG) | _BV(ACIE);//выбираем внутреннее опорное напряжение и разрешаем прерывания от компаратора;
SREG = 0x80;//глобальное разрешение прерываний;
}