МИКРОКОНТРОЛЛЕРЫ
11. А это - подготовительные
действия для того, чтобы при сле-
дующей смене показаний вместо
времени выводить температуру.
12. В этом участке программы
необходимо преобразовать темпе-
ратуру из двоичного числа со зна-
ком в двоично-десятичное пред-
ставление. Для этого вначале не-
обходимо проанализировать знак
числа и, при необходимости, сохра-
нить его в соответствующей тетра-
де байта, предназначенного для
хранения результата.
13. Подготовка к преобразова-
нию байта из двоичной в двоично-
десятичную форму представления.
Преобразование выполняем са-
мым простым способом - способом
досчета: вычитанием числа 10 из
значения температуры, и подсче-
том числа таких вычитаний. Это га-
рантирует нам обработку двух зна-
ков температуры, а если уж темпе-
ратура в помещении перевалила
за 100 градусов, вряд ли кому пос-
ле этого понадобится термометр.
Да и часы, честно говоря, тоже.
14. А вот, собственно, и цикл, с
помощью которого производится
преобразование в двоично-деся-
тичную форму. Мы его подробно
разбирали в цикле статей, посвя-
щенных КР1878ВЕ1,поэтому оста-
навливаться на нем не будем.
15. В этом участке кода мы до-
полняем байт с “единицами”темпе-
ратуры символом градуса, а также
выполняем подготовительные дей-
ствия для того, чтобы при следую-
щей смене показаний на “экран"
выводилось бы время. В результа-
те работы по преобразования тем-
пературы в тетрадах регистров г 12,
г 13 будет находиться следующая
информация: г12[старшая] - код
пробела
или
знака
“минус”,
г12[младшая] - десятки градусов,
г13[старшая] - единицы градусов,
г13[младшая] - код символа “гра-
дус”.
16. Итак, в регистрах г12 и г13
находятся очередные значения
(времени или температуры) для выво-
да на индикатор. Теперь каждую тет-
раду этих регистров необходимо
преобразовать в семисегментный
код, и занести его в соответствующие
регистры (г7.
.г10). Обратите внима-
ние -для преобразования исполь-
зуются две различные подпрограм-
мы - бесобе1 и с)есос!е2. Напоми-
наем читателю, что разводка линий
драйвера по индикаторам выпол-
нена “змейкой", поэтому для чет-
ных и нечетных знакомест семисег-
ментные коды одного и того же
символа будут различны.
17. А эта “химия" связана с тем,
в каком знакоместе индикатора вы-
дать десятичную точку. В режиме
индикации времени десятичная
точка выдается во втором знакоме-
сте (после единиц часов), а в ре-
жиме установки времени - в пер-
вом или третьем знакоместе (в за-
висимости от того, какие показа-
ния сейчас корректируются - часы
или минуты).
18. Собственно вывод показа-
ний на индикатор, т.е. динамичес-
кая индикация. Реализована она в
виде ОЗУ, отображаемого на мат-
рицу светодиодов, о чем также шла
речь в предыдущем цикле статей.
Конечно, выбор очередного инди-
цируемого байта можно было бы
выполнить с помощью регистра
косвенной адресации Z, но в дан-
ном случае мы реализовали этот
выбор с помощью частных прове-
рок - в зависимости от того, в ка-
ком бите расположена “бегущая
единица”, тот байт и выбирается
для вывода на индикатор. При на-
личии в системе команд команды
проверки бита и пропуска такая ре-
ализация получается короче, чем
работа с регистром
Z
и счетчиком
номера выводимой позиции.
19. А вот, собственно, работа с
драйвером светодиодов. Обратите
внимание - первым действием при
работе с драйвером мы сбрасываем
сигнал В[0] в состояние лог.О. Это
именно тот шаг, который гарантиру-
ет, что на входе микросхемы часов
никогда не возникнет комбинации
сигналов, распознаваемых как стар-
товая последовательность. Переда-
ча данных в драйвер особого инте-
реса не представляет - это обычный
цикл сдвига передаваемой последо-
вательности битов и передача само-
го первого из этих битов на соответ-
ствующие линии порта В.
20. А вот эта последовательность
гарантирует, что на входе часов ни-
когда не возникнет комбинация, рас-
познаваемая как стоповая последо-
вательность. Обратите внимание
также на команды 1в1/ас1с—такой при-
ем программирования мы неоднок-
ратно использовали при работе с
КР1878ВЕ1. Он позволяет организо-
вать перенос выдвигаемого старше-
го бита непосредственно в младший
бит этого же регистра (подумайте,
почему). Обратите внимание также
на то, что в регистре г16 после окон-
чания цикла волей случая осталось
число 0, чем мы в данном случае и
воспользовались. Это - одна из ма-
леньких программистских хитростей.
21. Начинается участок про-
граммы, опрашивающий состояние
кнопки. Опрос производится клас-
сическим способом - сравнение
прежнего состояния кнопки (оно
хранится в бите 2 регистра г17) с
текущим состоянием. В соответ-
ствии с результатами анализа вы-
полняется вызов автомата кнопки
(напоминаем, что автоматов в си-
стеме два - для распознавания
приемов работы с кнопками и для
управления работой конструкции).
Обратите внимание - для упроще-
ния программы автомата, и терми-
нальный символ, и текущее состо-
яние автомата “упаковываются” в
один байт. Более подробно об этом
будет сказано при рассмотрении
программы автомата.
22. Особенность реализации.
Поскольку автоматов в системе
два, а возможность передачи в
подпрограмму автомата каких-
либо параметров отсутствует, нам
необходимо вручную вернуть в
байт текущего состояния автома-
та новое состояние (если оно из-
менилось). Извещение об измене-
нии передается из подпрограммы
автомата с помощью бита 1 регис-
тра г17. Последовательность рабо-
ты с этим битом такая же, как при
обработке извещений от обработ-
чика прерываний фоновому про-
цессу - анализ состояния бита,
после чего немедленный его сброс.
23. А это - анализ окончания ра-
боты виртуального таймера (бит 3
регистра г17). Последовательность
Радиолюбитель - 1
1
/2 0 0 7 [|
29
предыдущая страница 29 Радиолюбитель 2007-11 читать онлайн следующая страница 31 Радиолюбитель 2007-11 читать онлайн Домой Выключить/включить текст