Запуск таймера внутри цикла

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Запуск таймера внутри цикла

Сообщение Серёга_ »

Почему такой код:

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

}
};

}
не работает?
Реклама
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Re: Запуск таймера внутри цикла

Сообщение asteroid7 »

Потому что регистр счётчика постоянно перезагружается и досчитать до переполнения не успевает.
Реклама
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Re: Запуск таймера внутри цикла

Сообщение Серёга_ »

Понял, нужно обнулять условие в ифе, чтобы таймер смог досчитать до конца. Я хотел таким способом (внутри бесконечного цикла с помощью ифа) обрабатывать нажатие кнопки, но кнопку ведь не обнулишь, чтобы выполнить условие, как быть? Запустить таймер и прерываниях проверять значение на входе?
Viver
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт мар 25, 2010 00:28:14
Откуда: Ukraine

Re: Запуск таймера внутри цикла

Сообщение Viver »

Не очень ясно (для меня :shock: ) тех. условие. Работа с клавиатурой описана в 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]
Реклама
Эиком - электронные компоненты и радиодетали
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Re: Запуск таймера внутри цикла

Сообщение Серёга_ »

Кнопок всего 3, поэтому работать с ним, как с клавиатурой, необходимости нет. К сожалению, вывод int0, int1 уже занял. Вопрос заключается в следующем, чем лучше счиывать состояние кнопок? периодическими прерываниями от таймера или в бесконечном цикле внутри основной программы?
Реклама
Viver
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт мар 25, 2010 00:28:14
Откуда: Ukraine

Re: Запуск таймера внутри цикла

Сообщение Viver »

Серёга_ писал(а):..... Вопрос заключается в следующем, чем лучше счиывать состояние кнопок? периодическими прерываниями от таймера или в бесконечном цикле внутри основной программы?
Мое imho:
Лучше периодическим опросом по прерыванию таймера в теле прерывания. Так как у Вас используются прерывания, то при опросе кнопок внутри бесконечного цикла возможны значительные опоздания в считывании состояния. С другой стороны при использовании дополнительного прерывания реакция на другие прерывания может быть замедлена. В общем, это зависит от первостепенных задач данного прибора.
[size=70][b][i][color=#0000BF]Опыт - это когда на смену вопросам "что?", "где?", "когда?", "как?" и "почему?" приходит единственный вопрос: "на*я?".[/color][/i][/b][/size]
[size=70][b][i][color=#BF00FF]Всякий раз когда у тебя проблемы - помни - большинству н*ть![/color][/i][/b][/size]
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»