вопрос: динамическая инидикация и прерывания CPU
Добавлено: Пт май 30, 2008 17:41:23
Подскажите начинающему: я пишу программу для вывода на дисплей семисигментного инидикатора (под Tiny2313). Программа пока тренировочная. На дисплей выводится счет секунд и минут. Индикация дисплея ессно динамическая, управляем 4-мя разраядами. Частота кварца 4мгц. Алгоритм такой: загружаем константы, загружаем таймер, включаем прерывания. Далее бесконечный цикл индикации, из которого выходим по прерыванию. Делаем inc счетчика секунд, и снова бесконечный цикл индикации.
Так вот суть вопроса в чем: программа работает, но когда меняются секунды (т.е. выходим по прерыванию), весь дисплей промаргивает. Думал что дело в длительной обработке участка кода обрабатывающего прерывание, но выходит всего около 0,16 милисекунд (по числу тактов в участке обработки TIM_COMP1:
), т.е. промаргивания быть не должно. Потом переписал прогорамму так, чтоб секунды и минуты хранились регистрах (сначала хранились в памяти), та же петрушка выходит. Просвятите пожалуйста, что я делаю не так?
Если выводить просто счет импульсов, без таймера и прерываний, то никаих промаргиваний нет и индикация работает нормально.
Так вот суть вопроса в чем: программа работает, но когда меняются секунды (т.е. выходим по прерыванию), весь дисплей промаргивает. Думал что дело в длительной обработке участка кода обрабатывающего прерывание, но выходит всего около 0,16 милисекунд (по числу тактов в участке обработки TIM_COMP1:
), т.е. промаргивания быть не должно. Потом переписал прогорамму так, чтоб секунды и минуты хранились регистрах (сначала хранились в памяти), та же петрушка выходит. Просвятите пожалуйста, что я делаю не так?
Если выводить просто счет импульсов, без таймера и прерываний, то никаих промаргиваний нет и индикация работает нормально.