Страница 1 из 1

> Таймер1 в Atmega8, Прерывания

Добавлено: Ср фев 03, 2010 22:25:10
kapitaneo
Здравствуйте. Помогите разобраться, что неправильно? Не получается получить прерывания по переполнению.
Пишу в codevision. Проверяю в протэусе. Программа прилагается.

Я на вход таймера PIND.5(Т1)
подаю импульсы и использую Т1 pin Rising Edge, тактируется от внешнего генератора, подключенного к выводу Т1, по нарастающему фронту поэтому TCCR1B=0x07. После отсчета 21 импульса (TCNT1=n1,n2) по переполнению должно идти прерывание. И вот следующий импульс делить на два импульса (для этого и задержки). Интересно вот, что нулевой таймер работает нормально, а первый, ГАДЮКА, нет. А мне нужны они оба.
КАК ЗАПУСТИТЬ?

ЗАРАНЕЕ ВСЕМ СПАСИБО.

Добавлено: Чт фев 04, 2010 11:37:04
Danko
Первое:

Код: Выделить всё

 if((PIND.3==0)&(PIND.0==1)&(PIND.1==1)&(PIND.2==1))
побитовое И (&) и логическое И (&&) разные вещи.

второе: вышеуказанное условие у Вас крутится в бесконечном цикле т.е. при выполнении одного из ваших условий произойдет либо остановка (TIMSK=0x00;) либо запуск таймера (TIMSK=0x05;)

И т.к. бесконечный цикл крутится гораздо быстрее, чем обрабатывается прерывание будет достаточно короткого импульса на (PIND.3==1) что бы остановить таймер т.е. таймер будет стопорится быстрее, чем запускаться.

Возможно ошибку вносит Ваша хитрая коммутация входов-выходов.

Это лишь предварительный анализ Вашего кода.