Сб янв 25, 2020 23:47:28
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(ANA_COMP_vect)
{
PORTB &= 0b11111011;
}
int main(void)
{
DDRB = 0b00000100; //на выход 3 пин
PORTB = 0b11111100; //два пина компоратора отключаем от подтягивающего резистора
ACSR = 0b00001000; //разрешаем прерывание, срабатывает по любому изменению
sei();
while(1)
{
}
}
while(1)
{
if(ACSR&(1<<ACI))
{
PORTB &= 0b11111011;
}
else
{
PORTB |= 0b00000100;
}
}
while(1)
{
if(ACSR&(1<<ACO))
{
PORTB &= 0b11111011;
}
else
{
PORTB |= 0b00000100;
}
}
Вс янв 26, 2020 01:11:47
По своему действию рассматриваемый узел микроконтроллера яв-
ляется обычным компаратором. Если напряжение на выводе AIN0 (не-
инвертирующий вход) больше напряжения на выводе AIN1(инверти-
рующий вход), то результат сравнения будет равен «1». В противном
случае результат сравнения будет равен «0». Этот результат сохраняет-
ся в разряде ACO регистра ACSR.
Как уже было отмечено, в соответствии с результатом сравне-
ния схема компаратора может генерировать запрос на прерыва-
ние. Если состояние выхода компаратора (разряд ACO) измени-
лось заданным образом, устанавливается флаг прерывания ACI
регистра ACSR и генерируется запрос на прерывание. Как и для
других прерываний, этот флаг сбрасывается аппаратно при за-
пуске подпрограммы обработки прерывания или программно,
записью в него лог. 1. Для разрешения прерывания необходимо
установить в «1» разряд ACIE регистра ACSR и, разумеется, флаг
I регистра SREG.
Условие генерации запроса на прерывание от компаратора
определяется состоянием разрядов ACIS1:ACIS0 регистра ACSR
в соответствии с Табл. 1.49. При изменении этих разрядов преры-
вание от компаратора (как и для разряда ACD) должно быть за-
прещено.
Вс янв 26, 2020 09:43:05
Вс янв 26, 2020 09:58:35
Вс янв 26, 2020 10:53:58
Вс янв 26, 2020 11:12:54
Вс янв 26, 2020 12:00:57
Вс янв 26, 2020 12:32:37
Вс янв 26, 2020 14:02:12
Вс янв 26, 2020 15:06:40
Вс янв 26, 2020 22:31:48