Почему такой код:
int main(){
.....
TIMSK |= (1<<TOIE1); //разрешение прерывания по переполнению
TCNT1 = 64535; // = 10M*2/1024
TCCR1B |= (1<<CS12) | (1<<CS10); // предделитель счетчика 1024
SREG |=0x80; // общее разрешение прерываний
while(1);
}
работает, а такой:
int main(){
.....
SREG |=0x80; // общее разрешение прерываний
while(1){
if(1){
TIMSK |= (1<<TOIE1); //разрешение прерывания по переполнению
TCNT1 = 64535; // = 10M*2/1024
TCCR1B |= (1<<CS12) | (1<<CS10); // предделитель счетчика 1024
}
};
}
не работает?
Запуск таймера внутри цикла
- Реклама
Re: Запуск таймера внутри цикла
Потому что регистр счётчика постоянно перезагружается и досчитать до переполнения не успевает.
Re: Запуск таймера внутри цикла
Понял, нужно обнулять условие в ифе, чтобы таймер смог досчитать до конца. Я хотел таким способом (внутри бесконечного цикла с помощью ифа) обрабатывать нажатие кнопки, но кнопку ведь не обнулишь, чтобы выполнить условие, как быть? Запустить таймер и прерываниях проверять значение на входе?
-
Viver
- Первый раз сказал Мяу!
- Сообщения: 32
- Зарегистрирован: Чт мар 25, 2010 00:28:14
- Откуда: Ukraine
Re: Запуск таймера внутри цикла
Не очень ясно (для меня
) тех. условие. Работа с клавиатурой описана в Aplication Note: AVR243: Декодер клавиатурной матрицы (http://www.gaw.ru/html.cgi/txt/app/micros/avr/index.htm). Там и исходник есть. Но если у Вас одна или две кнопки, то лучше обрабатывать нажатие с помощью внешнего прерывания (если оно, конечно, есть и не занято).
[size=70][b][i][color=#0000BF]Опыт - это когда на смену вопросам "что?", "где?", "когда?", "как?" и "почему?" приходит единственный вопрос: "на*я?".[/color][/i][/b][/size]
[size=70][b][i][color=#BF00FF]Всякий раз когда у тебя проблемы - помни - большинству н*ть![/color][/i][/b][/size]
[size=70][b][i][color=#BF00FF]Всякий раз когда у тебя проблемы - помни - большинству н*ть![/color][/i][/b][/size]
Re: Запуск таймера внутри цикла
Кнопок всего 3, поэтому работать с ним, как с клавиатурой, необходимости нет. К сожалению, вывод int0, int1 уже занял. Вопрос заключается в следующем, чем лучше счиывать состояние кнопок? периодическими прерываниями от таймера или в бесконечном цикле внутри основной программы?
- Реклама
-
Viver
- Первый раз сказал Мяу!
- Сообщения: 32
- Зарегистрирован: Чт мар 25, 2010 00:28:14
- Откуда: Ukraine
Re: Запуск таймера внутри цикла
Мое imho:Серёга_ писал(а):..... Вопрос заключается в следующем, чем лучше счиывать состояние кнопок? периодическими прерываниями от таймера или в бесконечном цикле внутри основной программы?
Лучше периодическим опросом по прерыванию таймера в теле прерывания. Так как у Вас используются прерывания, то при опросе кнопок внутри бесконечного цикла возможны значительные опоздания в считывании состояния. С другой стороны при использовании дополнительного прерывания реакция на другие прерывания может быть замедлена. В общем, это зависит от первостепенных задач данного прибора.
[size=70][b][i][color=#0000BF]Опыт - это когда на смену вопросам "что?", "где?", "когда?", "как?" и "почему?" приходит единственный вопрос: "на*я?".[/color][/i][/b][/size]
[size=70][b][i][color=#BF00FF]Всякий раз когда у тебя проблемы - помни - большинству н*ть![/color][/i][/b][/size]
[size=70][b][i][color=#BF00FF]Всякий раз когда у тебя проблемы - помни - большинству н*ть![/color][/i][/b][/size]


