Александр Черномырдин
г. Магнитогорск
'L
Продолжение.
Ш .
Начало в № 9-10/2007
Пояснения по программному коду:
1. “Классический” код любого фо-
нового процесса - разрешение преры-
ваний и переход в состояние ожида-
ния. Аналогичным участком кода мы
неоднократно пользовались в микро-
контроллере КР1878ВЕ1.
2. А вот каким образом обработчи-
ки прерываний будут извещать фоно-
вый процесс о необходимости выпол-
нить те или иные действия. Как уже
было сказано, регистр г17 мы будем
использовать в качестве регистра фла-
гов, и бит 0 этого регистра и будет из-
вещать нас о том, что показания тер-
модатчика собраны, и пора уже рас-
считывать по ним температуру.
3. Немедленно после того, как мы
проанализировали флаг, его необхо-
димо сбросить в начальное состояние.
Последовательность из трех команд
sbrs/rjmp/cbr - типовой способ обра-
ботки такого рода извещений. “Немед-
ленность” в данном случае объясняет-
ся тем, что за время работы фонового
процесса мы можем получить от обра-
ботчика прерываний второе извеще-
ние, и это извещение не должно про-
пасть! Если мы затянем со сбросом
флага, он может быть взведен повтор-
но, и при его “слепом” сбросе мы поте-
ряем тем самым извещение о втором
событии.
4. Теперь - собственно расчет тем-
пературы. Согласно документации на
микросхему ТМР04 он производится по
формуле Т = 235 - 400 * Ыимп / Ыпауз.
Вначале умножаем длительность
импульса на 400. В данном случае
мы воспользуемся тем, что один из
множителей - константа, и постро-
им умножение по следующей схеме:
400* N = 25*16 *N = (16 + 8+1)* 16 * N.
Введя промежуточное значение NN,
равное N * 16 = N « 4, получим следу-
ющую последовательность расчетов:
NN = (N « 4); Результат = (NN « 4) +
(NN « 3) + NN; Именно по этой
формуле и выполняется вычисле-
ние произведения. Как именно -
Часы-термометр
на ATTINY15
МИКРОКОНТРОЛЛЕРЫ
о—
предлагаем читателю разобраться са-
мостоятельно.
5. Теперь - деление. Подробно ал-
горитмы деления мы разбирали в цик-
ле статей, посвященных микроконтрол-
леру КР1878ВЕ1, поэтому детально ос-
танавливаться на этом участке не бу-
дем. Отметим только то, что в резуль-
тате предыдущего умножения мы по-
лучили произведение, “удлиненное” на
9 двоичных знаков (число 400, на ко-
торое мы умножали длительность им-
пульса, больше 256 (2а), но меньше
512 (29)). Соответственно, при выпол-
нении деления для получения правиль-
ного результата нам следует также
предварительно “удлинить" делитель на
9 двоичных знаков. Удлинение на 8 зна-
ков делается просто - делитель допол-
няется справа пустым байтом, - а за-
тем к полученному делителю нужно
будет применить еще одну операцию -
сдвиг на 1 разряд влево. Обратите вни-
мание также на один интересный при-
ем программирования-использование
т.н. “антикоманд”. По сути дела в том
участке кода, где она применена, тре-
буется не устанавливать бит в регист-
рах результата, а в противном случае
его необходимо установить. Мы же с по-
мощью команды dec вычитаем едини-
цу из регистра, и следующая за ней ко-
манда inc просто вернет содержимое
регистра в прежнее состояние, т.е. не
установит требуемый бит, что и требо-
валось от этого участка кода. Прием
этот достаточно популярен, причем не
только на уровне команд, но и даже на
уровне подпрограмм - для того, чтобы
скомпенсировать действие той или
иной подпрограммы, перед ее выпол-
нением вызывается другая подпрог-
рамма, которая выполняет прямо про-
тивоположные действия. Кстати, при-
менение команд inc/dec в данном уча-
стке кода мера вынужденная - номер
регистра, с которым мы работаем, ме-
нее 16, а с такими регистрами коман-
ды sbr/cbr не работают.
6. А вот, собственно, сохранение
подсчитанной температуры. Она полу-
чается в виде целого числа со знаком
размером 1 байт.
7. Проверка, аналогичная провер-
ке флага. Дело в том, что “экран" уст-
ройства может находиться в одном из
двух режимов работы-попеременной
индикации температуры и времени, и
в режиме установки часов/минут. Со-
ответственно этому меняется и способ
обновления показаний на “экране”.
8. Здесь отсчитывается время пе-
реключения между показаниями тер-
мометра и часов. Обратите внимание
- две команды перехода как бы “пе-
рескакивают” друг через друга. Свя-
зано это с особенностями архитекту-
ры микроконтроллеров АТПпу (и не
только их). Дело в том, что команды
условных переходов - сравнительно
“короткодействующие”, команда Ьгпе,
которая там должна была бы быть,
просто “не дотянется” до метки гк[р1.
В таких случаях поступают всегда
таким вот образом - вместо нужной
команды записывают команду с
“противоположным” условием, кото-
рая обходит следующую за ней ко-
манду безусловного перехода, а ко-
манда безусловного перехода уже
передает управление на нужную
метку - у нее "длинные руки”. Эта
“беда” характерна для всех команд
условных переходов архитектуры
АТМЕЬ. ВКР1878ВЕ1 каких-либо ог-
раничений на длину условного пере-
хода нет, а в микроконтроллерах Р1С
команды условного перехода как та-
ковые просто отсутствуют.
9. Анализ того, что требуется вы-
водить в данный момент на экран - по-
казания термодатчика, или показания
часов.
10. А вот - снова обращения к ре-
гистрам часов, на этот раз - для чте-
ния показаний. Вновь обратите внима-
ние на порядок работы с часами: стар-
товая последовательность, запись
байта команды, запись байта адреса,
стоповая последовательность. Соот-
ветственно, для чтения - стартовая
последовательность, запись байта ко-
манды, чтение байта, подтверждение
байта, чтение байта, извещение о кон-
це операции чтения, стоповая после-
довательность.
28
У
Радиолюбитель - 1
1 /2 00 7
предыдущая страница 28 Радиолюбитель 2007-11 читать онлайн следующая страница 30 Радиолюбитель 2007-11 читать онлайн Домой Выключить/включить текст