реклама на сайте
подробности

 
 
> организация задержки, не пойму в чем дело
alux
сообщение Jun 8 2007, 20:09
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Обычно для входа в нужный режим использую длинное (5сек) нажатие на кнопку. Обычно я делаю так:
//Глобальные переменные
unsigned char pause; //счетчик паузы удержания кнопки

#pragma vector=TIMER0_COMPA_vect
__interrupt void TC0_COMPA_ISR(void)
{
if(!(PIND&(1<<PROG))) //если нажата кнопка "PROG"...
{
if(++pause > 250) //более 10ms*250=2.5сек
{
PINC |= (1<<LED1);
Flags |= EDIT;
pause = 0; //обнулить счетчик паузы
}
......
}

//////////////////
//Timer0 initialisation:
TCCR0A=(1<<WGM01); //Сброс таймера при совпадении
TCCR0B=(0<<CS02)|(1<<CS00); //Prescaler = CLK/1024
OCR0A=194; //Обработчик прерывания таймера0 вызывается через 10 мс
TIFR0 = TIFR0; // Clear TC0 interrupt flags
TIMSK0=(1<<OCIE0A); //Разрешить прерывания по совпадению COMPA

... и всегда работало без проблем на максимальной оптимизации по размеру. Компилятор IAR 4.12A.
Этот же пример на том же контроллере и на том же компиляторе в новом проекте не удается создать задержку в 3 сек. Вернее работает, если pause сделать unsigned int и инкрементировать до порядка 65000. Пробовал ставить модификатор volatile. Не помогает. В чем же дело?

Сообщение отредактировал alux - Jun 8 2007, 20:15
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 06:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016