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