Цитата
1. Даже если переменная i глобальная, то обнулена она будет только при первом проходе.
да, она глобальная. пользую везде где нужен счетчик.
Цитата
2. i бесконтрольно и независимо увеличивается во внутреннем цикле. Чем ограничено количество внутренних циклов? 1 - 100 - миллион? Что будет с i при, например, 256 циклах - Вам ведомо?
Программа жздет появление флага переполнения таймера,
while(TIFR1 & (1<<TOV1))
выполняет предустановку
{
выполняет предустановку
TCNT1H = 0xF8;
TCNT1L = 0x5F;
наращивает счетчик
i++;
делает что-то полезное
PORTA^=0b00000100;
сбрасывает флаг
TIFR1 |= (1<<TOV1);
}
и так до очередного выброса флага...
когда i=240 - программа выходит из внешнего цикла. прерывания не использовал т.к. нет нужды делать чего-то во время ожидания.
Цитата
запустить режим сброса таймера по сравнению (CTC mode)
так и есть, режим СТС.
ну мне так видится, а как бы вы написали? я учусь и мне юудет интересно посмотреть на иные решения. Заранее спасибо.
Цитата
4. Остальное выглядит еще хуже
все может быть... а как правильнее?
Цитата
3. Вы хоть сами сможете словами обьяснить для чего пляски с бубном вокруг i ?
попробую... суть в том, что мне нужно отмерять промежутки времени, кратные 1 с, сигнализируя об их течении мигающим светодиодом или выполняя какие-либо действия в иные промежутки:
промежуток 1 - действие 1;
промежуток 2 - действие 2;
.
.
.
промежуток N - действие N.
а так лучше?
while((TIFR1 & (1<<TOV1))&(i<240))
{
TCNT1H = 0xF8;
TCNT1L = 0x5F;
i++;
PORTA^=0b00000100;
TIFR1 |= (1<<TOV1);
}
Сообщение отредактировал smk - Jan 12 2008, 07:52
Живи днем так, чтобы ночью ты спал спокойно.