fl
"РЛ" - НАЧИНАЮЩИМ
&
Директива
SET.
Полностью аналогична директиве EQU, '
но имеет одну особенность - ею можно присваивать одно-
му и тому же символьному имени разные значения в раз-
ных местах программы. Если вы попытаетесь сделать то
же самое директивой EQU - компилятор выдаст сообще-
ние об ошибке. Директивой SET удобно пользоваться при
работе с ячейками памяти, которые используются для хра-
нений промежуточных результатов вычислений, чтобы не
задействовать большое количество памяти.
Директива
VAR.
Является полным эквивалентом дирек-
тивы SET.
При помощи директив EQU, SET и VAR можно задать
альтернативные имена для уже определенных регистров,
например так:
REGO
EQU
R0
REGB
EQU
В
После этого вы можете использовать в своей програм-
ме обращение к соответствующим ячейкам памяти (или
регистрам) как по стандартному имени, так и по альтерна-
тивному. При помощи директивы EQU можно описать лю-
бые нестандартные внутренние регистры и ячейки микро-
контроллера другой модели, и после этого компилятор
будет работать с ними, как с родными. Именно по такому
пути следует идти, если вы задумаете работать с микро-
контроллерами фирмы
Winbond
или
Silicon Labs,
(быв-
шая
Cygnal) -
у многих микроконтроллеров этих фирм име-
ется значительно больше регистров специальных функ-
ций, чем в базовой модели семейства. Чтобы самостоя-
тельно описать новые регистры, следует вспомнить, что
регистр адресуется как обычная ячейка памяти, значит,
для описания регистра достаточно назначить символьно-
му обозначению численное значение адреса ячейки-реги-
стра, например:
WMCON EQU
96h
; регистр WMCON
SPSR
EQU
OAAh
; регистр SPSR
В приведенном примере показано, как описаны регис-
тры, входящие в состав микроконтроллера AT89S8252 (и
с ними мы будем знакомиться), т.е. вам описывать их в
своих программах не надо.
Теперь поговорим о
распределении памяти.
Для рас-
пределения байтов служат директивы
DS, DB, DW
и
DD,
а
для битов -
DBIT.
При помощи директивы DS можно вы-
делить произвольное количество подряд идущих ячеек па-
мяти. Формат этой директивы прост:
[метка:]
DS
количество байт>
Метка может и отсутствовать, но скорее всего, раз вы
выделяете ячейки, вам потребуется к ним обращаться, а
как же это делать, как не при помощи метки? В качестве
единственного параметра директивы надо указать констан-
ту (или выражение, далее говоря о константе, я буду иметь
в виду и выражения), которая определит количество вы-
деляемых ячеек. Обратите внимание, что эта директива
просто резервирует несколько ячеек памяти, не опреде-
ляя их содержимого. А вот директивы DB, DW и DD слу-
жат не только для резервирования ячеек памяти, но и для
явного указания их содержимого. Формат этих директив
похож:
[метка:]
DB
ссписок значений>
Я привел пример формата директивы DB, но формат
остальных точно такой же. Список значений - это разде-
ленные запятыми значения ячеек, причем в качестве зна-
чений могут выступать не только константы, но и симво-
лы и даже строки символов. Например:
D B
12,
0 ,
20h
- резервирует 3 ячейки памяти, причем пер-
вая будет содержать число 12, вторая - О, а третья - 20h.
DB12, ’Привет!’,
О - резервирует 9 ячеек, причем пер-
вая и последняя содержат числа 12 и О соответственно, а
остальные - ASCII-коды символов, составляющих слово.
Символы и строки необходимо указывать в одинарных
кавычках (апострофах). Кстати, символ, указанный в ка-
вычках, с успехом может использоваться в качестве кон-
станты, точнее используется не сам символ, а его ASCII-
код. Главное, что вам следует помнить при работе с сим-
волами, так это то, что MCStudio работает с кодировкой
символов Windows, а большинство других компиляторов
- с кодировкой DOS.
Директива DB используется для выделения отдельных-
байтов, DW выделяет по 2 байта для хранения числа, a DD
- четыре. Таким образом, при помощи директивы DB мож-
но задать значение ячейки от О до 255, при помощи DW - от
О до 65535, ну а при помощи DD можно задавать числа бо-
лее 4 миллиардов. Многобайтные числа записываются в
выделенные ячейки в обратном порядке: сначала младший
байт, а потом - все более старшие. Такой подход характе-
рен для всех микроконтроллеров и микропроцессоров фир-
мы Intel. Главное, что вы должны помнить, используя эти
директивы, так это то, что они могут использоваться только
в сегментах памяти, значение которых может быть опреде-
лено на этапе компиляции программы. Это значит, что эти-
ми директивами можно задать значения байтов в сегменте
кода и EEPROM, а в сегментах ОЗУ (как внутреннего, так и
внешнего) - нельзя, так как до момента начала работы про-
граммы значение этих сегментов не определено. А вот ди-
ректива DS может использоваться в любом сегменте, так
как в сущности задает только адрес начала области, а не
ее содержимое (а адрес всегда известен еще до начала ис-
полнения программы, т.е. как раз на этапе компиляции).
Наконец, директива
DBIT
позволяет определить от-
дельный бит в сегменте битоадресуемой памяти, т.е. дей-
ствует аналогично DS, но для битового сегмента. Задать
значение битов так же нельзя, т.к. битоадресуемая па-
мять-это часть обычного ОЗУ, содержимое которого нео-
пределенно на этапе компиляции программы.
Вы обратили внимание, что я стал использовать тер-
мин “выражение”. Под выражением понимается любое кон-
кретное число или формула, по которой это число может
быть вычислено. В формуле вы можете использовать все
арифметические действия (сложение, вычитание, умноже-
ние и деление), скобки, а также несколько специальных
действий и ранее описанные символьные имена других вы-
ражений. В
таблице 12
приведен полный список опера-
ций, которые можно использовать в выражениях (опера-
торы выделены жирным, а их операнды - нет).
Выражения можно использовать всюду, где можно ис-
пользовать константы, т.е. в сущности, разницы между
этими терминами нет.
Радиолюбитель - 0 7 /2 0 0 7 [)
41
предыдущая страница 41 Радиолюбитель 2007-07 читать онлайн следующая страница 43 Радиолюбитель 2007-07 читать онлайн Домой Выключить/включить текст