Аналоговый компаратор

Материал из Automata.

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

Текущая версия

#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;//глобальное разрешение прерываний;
}
Личные инструменты
Микроконтроллеры