159753258456
Aug 20 2007, 13:15
Понадобилось использовать таймер, для осуществления более-менее предсказуемой задержки. AVRstudio подтверждает мои догадки: при пошаговой отладке функция delay работает, но в реальном устройстве программа зависает именно в функции delay(). В документации описано, что регистры TCNT1H и TCNT1L доступны для чтения, хотя у меня сложилось впечатление, что это не так.
Подскажите, что я делаю не так?
void InitTimer(void)
{ TCCR1A = 0;
TCCR1B = (0<<CS12)|(0<<CS11)|(1<<CS10);
TCCR1C = 0;
}
void delay(int value)
{
TCNT1 = value;
while(TCNT1H);
}
SlavaG
Aug 20 2007, 13:23
для чтения значения TCNT1H надо сначала прочитать значение TCNT1L, т.к. доступ к TCNT1H осуществляется через временный регистр, и значение в этом регистре обновляется при доступе к TCNT1L. Для записи, сначала задаём TCNT1H, затем TCNT1L. Так со всеми 16-ти битными регистрами.
159753258456
Aug 20 2007, 13:52
Цитата(SlavaG @ Aug 20 2007, 16:23)

для чтения значения TCNT1H надо сначала прочитать значение TCNT1L, т.к. доступ к TCNT1H осуществляется через временный регистр, и значение в этом регистре обновляется при доступе к TCNT1L. Для записи, сначала задаём TCNT1H, затем TCNT1L. Так со всеми 16-ти битными регистрами.
всё стало ясно, спасибо!