Подскажите начинающему: я пишу программу для вывода на дисплей семисигментного инидикатора (под Tiny2313). Программа пока тренировочная. На дисплей выводится счет секунд и минут. Индикация дисплея ессно динамическая, управляем 4-мя разраядами. Частота кварца 4мгц. Алгоритм такой: загружаем константы, загружаем таймер, включаем прерывания. Далее бесконечный цикл индикации, из которого выходим по прерыванию. Делаем inc счетчика секунд, и снова бесконечный цикл индикации.
Так вот суть вопроса в чем: программа работает, но когда меняются секунды (т.е. выходим по прерыванию), весь дисплей промаргивает. Думал что дело в длительной обработке участка кода обрабатывающего прерывание, но выходит всего около 0,16 милисекунд (по числу тактов в участке обработки TIM_COMP1:
), т.е. промаргивания быть не должно. Потом переписал прогорамму так, чтоб секунды и минуты хранились регистрах (сначала хранились в памяти), та же петрушка выходит. Просвятите пожалуйста, что я делаю не так?
Если выводить просто счет импульсов, без таймера и прерываний, то никаих промаргиваний нет и индикация работает нормально.
Вложения:
Комментарий к файлу: Текст самой программы dynamic.asm [6.38 KiB]
Скачиваний: 374
начитались обучалок... ну кто делает динамическую индикацию в бесконечном цикле?! сделайте наоборот: по прерываниям от одного таймера обновляйте индикатор, а по прерываниям от другого - считайте время. а основной цикл программы будет бесконечным и пустым
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Проясните все же, почему промигивает? В чем ошибка? Почему нельзя делать индикацию циклом?
За совет спасибо, воспользуюсь , только поясните все же, почему в вашем варианте промигивать не будет, а в моем промигивает. Хоцца физику процесса понять
Зарегистрирован: Вт май 16, 2006 06:24:49 Сообщений: 188 Откуда: Москва
Рейтинг сообщения:0
Рисуйте Временной график работы всего, и тогда будет ясно (это можно легко сделать в протеусе, если сделать какой-то пин сигнализирующим о входе в прерывание, и глушить его по выходу), просто пока ваша программа в бесконечном цикле ждет задержки для отрисовки, в какой-то момент эта задержка становиться длиннее на врема входа в прерывание отсчета времени, его отработки, и выхода из него, этого может быть вполне достаточно для того, чтобы заметить глазом...
_________________ CLM-9000 CLM-9000+, и прочие вкусности
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения