і
МИКРОКОНТРОЛЛЕРЫ
\
управляющую информацию по одному адресу, а эф-
фект от этой записи хотим получить по другому адре-
су. “Интеллектуальных способностей” микроконтрол-
лера не хватает для того, чтобы это понять!
Простейший способ добиться этого - команда
пор:
Выход из этого положения один - сделать так, что-
бы чтение нужной информации происходило все-таки
позже, чем соответствующая информация попадала
в управляющие регистры.
тс^1
%Ь4,
ооооооооь
; Доступ к младшему байту
пор
тс^
%а0,%Ь5
; Заносим его в ОЗУ.
movl
%Ь4 , ОООООЮОЬ
; Доступ к старшему байту
пор
тс^
%а1,%Ь5
; Заносим его в ОЗУ
Есть, однако, и еще один, намного более изящный способ - просто переставить местами две команды:
movl
%Ь4,
ооооооооь
; Доступ к младшему байту.
movl
%Ь4, ОООООЮОЬ
; Доступ к старшему байту (эта команда выполняет роль пор
; для предыдущей и последующей команды!).
тс^
%а0,%Ь5
; Заносим младший байт в ОЗУ (эта команда также выполняет
; роль пор для соседних команд).
mov
%а!,%Ь5
; Заносим старший байт в ОЗУ
Несмотря на “дикость” и “глупость” приведенного про-
граммного кода, он работает
абсолютно правильно
- и,
думается, читатель теперь понимает, почему. Те же самые
проблемы будут возникать при работе через порты с вне-
шними устройствами, если в программе требуется чередо-
вать запись данных с чтением. Имейте в виду - в ситуации:
movl
%Ь2,ОІОІОІОІЬ
; Вывести управляющие биты.
ЬЬЫ
%Ь2 , ООООООЮЬ
; Проверить результат отработки управляющих битов
команда чтения
ЬИ1
отработает
раньше,
чем закончит-
ся выполнение команды
ш о у !!
Более того, команда ЫН
вообще
не будет обращаться
к порту В, а просто про-
верит бит в регистре результата (понятное дело - он
для нашего примера всегда будет нулевым!). В этом
случае также поможет команда
пор,
или -
что более
правильно,
- какая-нибудь полезная команда, которую
можно выполнить в промежутке между записью и чте-
нием (см. предыдущий пример). Вообще, при органи-
зации временных задержек, старайтесь по возможности
заменять команды
пор
более полезными - например,
перенесите в качестве них часть команд из последую-
щего фрагмента программы (разумеется, если логика
работы программы это позволяет). Уже пример с кон-
вейером команд показывает, что параллельное про-
граммирование для микроконтроллера - не абстракт-
ные рассуждения: даже параллельная работа блоков
конвейера при обработке команды должна быть при-
нята во внимание.
П родолж ение в N88/2006
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
Простейший Программатор
Возвращаясь к напечатанному
-
-
("РЛ". №5/2006. с. 39)
для микроконтроллеров АТТшу
В журнале №5 за 2006 год было опуликовано описание простейш его программатора для микроконтролле-
ров АТПпу. Автор получил несколько писем читателей, в которых были изложены проблемы, возникающие
при работе с этим программатором. В настоящий момент эти проблемы исправлены, новую версию про-
граммы для программатора можно скачать с сайта журнала “Радиолюбитель”. Автор искренне благодарит
всех читателей, приславш их отзывы на статью.
Александр Черномырдин
Ч_____________________________________________________________________________________________________________ У
I
36 |
| Радиолюбитель - 0 7 /2 0 0 6
\
предыдущая страница 36 Радиолюбитель 2006-07 читать онлайн следующая страница 38 Радиолюбитель 2006-07 читать онлайн Домой Выключить/включить текст