Суть проблемы такая:
Хочу посчитать импульсы на INT0 и по таймеру перекидывать PB3 если за время нескольких переполнений счётчика пришло определённое кол-во импульсов.
Если код пишу в самих прерываниях то всё работает, а вот если из основного цикла пытаюсь получать значения счётчиков то ничего не выходит! Прога компилируется, но в протеусе не работает!
Как же так, не пойму!!!! Помогите разобраться плиз
Код: Выделить всё
#define F_CPU 1200000UL //Определяем тактовую частоту
#include <avr/io.h>
#include <avr/interrupt.h> //Заголовочный файл для работы с прерываниями
#include <util/delay.h> //Место хранения _delay_us()
unsigned int i=0;
unsigned char count=0;
int main(void)
{
cli(); //На время инициализации периферии, запрещаем все прерывания
/* Инициализации портов */
DDRB = 0x7D; // = 0b00001101;
PORTB = 0x00; // = 0b00000000;
/* Инициализации внешнего прерывания INT0 */
GIMSK |= (1<<INT0); // Разрешение прерываний INT0 на входе PB1
MCUCR |= (0<<ISC01) | (0<<ISC00); // при перепаде из 1 в 0
/* Инициализации таймера/счётчика */
TCCR0A = 0x00; //Нормальная работа счётчика
TCNT0 = 139;
TIMSK0 |= 1<<TOIE0; // Разрешение прерываний по переполнению
TCCR0B |=(1<<CS02)|(1<<CS00); //Делитель на clk/1024
sei(); //Общее разрешение прерываний
while (1) {
if (count==10) //Если в прерывании таймера было 10 переполнений то...
{
if (i>=10) //И поступало за это время 10 импульсов на INT0 то...
{
PORTB ^= 1<<PB3; //Сигнализируем пином порта PB3
i=0; //сбросим кол-во импульсов
count=0; //Сбросим счётчик переполнений таймера
}
}
}
}
/* Обработчик внешнего прерывания INT0 */
ISR(INT0_vect) // Обработчик прерываний
{
i++;
}
/* Обработчик прерывания таймера/счётчика */
ISR(TIM0_OVF_vect)
{
TCNT0 = 139;
count++;
}

