Доброго времени суток! Пишу программу на mega16, компилятор image craft. На ножку таймера T1 извне подается меандр с периодом в 10 мс. Нужно чтобы прерывание таймера (по совпадению) срабатывало по каждому переднему фронту приходящего сигнала. Столкнулся с проблемой: прерывание по таймеру(по совпадению) срабатывает через раз(по одному фронту есть, по следующему нет , потом опять есть) или вообще беспорядочно.
Повторил код в отдельной программе - результат тоже. Использую 16-разрядный timer1. А нужно чтобы оно по каждому переднему фронту было.
А вот и куски кода связанные с таймером:
Код
#pragma interrupt_handler timer1_COMPB:8 - объявляю прерывание по совпадению
void timer1_init(void) - инициализирую таймер
{
TIMSK |= 0x08;//флаг OCIE1B в 1 Timer/Counter1, Output Compare B Match Interrupt Enable
TCCR1B = 0x00; //stop timer
TCNT1 = 0x00; //set count value
OCR1B = 0x01;
TCCR1B = 0x07; //start timer External clock source on T1 pin. Clock on rising edge- 0x07 Clock on falling edge- 0x06
}
void timer1_COMPB(void) - обработчик прерывания
{
TCNT1 = 0x00; //set count value
TCCR1B = 0x07; //start timer External clock source on T1 pin. Clock on rising edge- 0x07 Clock on falling edge- 0x06
...
...
...
}
void main( void )
{
timer1_init(void);
...
...
...
}
Подскажите из - за чего может быть такой результат. Спасибо!
Сообщение отредактировал IVN2013 - Jan 27 2015, 19:42