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

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

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

Версия 16:39, 28 февраля 2008

#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;//глобальное разрешение прерываний; }

Личные инструменты
Микроконтроллеры