Здравствуйте, не работает прерывание от компаратора. Хочу добиться того чтоб при изменении фронта сигнала с 0 на 1
запускался обработчик прерываний и выполнял соответствующие действия(вывод 3х импульсов).
Кто что может подсказать, заранее спасибо!
#include <mega16.h>
#include <delay.h>
// Declare your global variables here
unsigned char a;
/* Called automatically on external interrupt */
interrupt [17]void ana_comp(void) {
//for(a=3;a>0;a--);
DDRA.0=1; // PA.0 is output
PORTA.0=1; // PA.0 is High level
delay_us(5);
PORTA.0=0; // PA.0 is Low level
delay_us(45);
ACSR.4=1; //interrupt flag ACI is clean
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
DDRB=0; // port B is input (PB2 & PB3)
PORTB=0; //port B is input with Z
DDRA.0=1; // PA.0 is output
PORTA.0=0; // PA.0 is Low level
ACSR.3=1; //interrupt ON
// Analog Comparator ON
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0b00001011; // 0->1 rising
while (1){
}
}
atmega16 прерывание от компаратора
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: atmega16 прерывание от компаратора
А порог внешний на втором входе устанавливаете?
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Re: atmega16 прерывание от компаратора
Meteor писал(а):А порог внешний на втором входе устанавливаете?
Да, порог 4V стоит.
Пытаюсь отладить программу в Протеусе, и вот теперь не знаю, либо кривой код либо глюки самого Протеуса
//Спасибо
Re: atmega16 прерывание от компаратора
Спасибо, тема закрыта. Причина была в ACSR.4=1; //interrupt flag ACI is clean
а также пропущенных скобках

а также пропущенных скобках