
- •Воронежский государственный технический университет
- •В.И.Кравченко
- •Однокристальные микроконтроллеры
- •С risc - архитектурой
- •Часть 2. Введение в программирование Учебное пособие
- •1 . Собенности архитектуры pic-процессоров
- •2. Зык ассемблера для pic-процессоров
- •Синтаксис:
- •Subtitl “Диагностическая секция”
- •Sublw k
- •Movlw b'00000010' ;установить маску в pегистpе w
- •Movlw 04h ;загpузить 04h в pегистp w
- •Movlw 0Fh ;загpузить 0Fh в pабочий pегистp w
- •Movlw b'01010101' ;загpузить 01010101 в pегистp w
- •Movlw 0fFh ;загpузить fFh в pегистp w
- •Clrf status ;очистить pегистp status
- •Movlw 0fFh ;загpузить 0fFh в pегистp w
- •Bcf dataport,7 ;очистить бит 7 в поpте b
- •Btfsc f,b
- •Специальные команды
- •Тладочные средства и средства программирования микроконтроллеров
- •Ge sample.Ini Пример листинга файла sample.Ini приведен на рис. 2.
- •Lo sample
- •Загрузка стимулирующего файла
- •Установка параметров трассировки
- •Установка точек отладочных прерываний
- •Модификация объектного кода
- •Особенно просто проблема программирования решается для мк типа pic16c84. Этот мк может быть запрограммирован или перепрограммирован практически немедленно (для этого потребуется около 20 с).
- •Вопросы для самоконтроля
- •Кравченко Владимир Ильич
- •394026 Воронеж, Московский проспект, 14
2. Зык ассемблера для pic-процессоров
2.1. Общие сведения
Ассемблер является средством программного обеспечения, используемым для перевода инструкций Ассемблера (исходная программа) в команды, которые понятны процессору (машинные коды).
Команды Ассемблера предоставляют программисту удобные, эффективные средства, с помощью которых он может задавать машине требуемую последовательность действий.
Так как внутренние физические и логические компоненты, из которых состоит МК аналогичны любому другому однокристальному МП, то и машинно-ориентированный язык программирования Ассемблер для PIC-процессоров содержит много общих черт с Ассемблерами для других процессоров [2].
Ассемблер для PIC-процессоров включает в себя три компоненты:
Мнемоника инструкций;
Директивы;
Макроопределения.
Мнемоники команд являются инструкциями, которые непосредственно переводятся в машинные коды. Они используются для выполнения арифметических и логических операций над данными, находящимися в памяти и регистрах, а также для перемещения данных между регистрами и памятью и выполнения условных/безусловных переходов в определенные программные адреса.
Директивы обеспечивают управление действиями Ассемблера, сообщая ему, как использовать мнемонику, справочную информацию, а также форматируют листинг и выходные файлы. Директивы облегчают программирование и избавляют программиста от множества возможных ошибок.
Макрокоманда состоит из последовательности команд, объединенной одним именем. Пассивные данные (параметры) передаются макрокоманде непосредственно в том месте программы, где она используется. Макрокоманды обеспечивают следующие преимущества:
- высокий уровень абстракции, который улучшает читаемость, обеспечивает простоту реализации и большую надежность;
- последовательное решение часто используемых функций;
- простота изменений.
10
В пособии рассматривается одна из версий языка Ассемблера для PIC-процессоров – MPALC. Программное средство MPALC имеет следующие основные характеристики:
- переводит исходную программу, написанную на языке Ассемблера, в машинный исполняемый код (объектный код) с использованием IBM-совместимой ПЭВМ, работающей под управлением MSDOS версии 3.31 и выше.
- генерирует объектный код в четырех разных форматах для обеспечения совместимости с другими программными средствами и использования в инструментальных средствах программирования МК;
- обеспечивает настройку и генерирует объектный код для различных типов МК семейства PIC-процессоров, включая PIC16C54, PIC16C55, PIC16C56, PIC16C57, PIC16C71 и PIC16C84;
- обеспечивает полное отображение в объектном коде всех макрокоманд;
- поддерживает шестнадцатеричные (по умолчанию), десятичные и восьмеричные коды.
2.2. Вызов Ассемблера
Ассемблер
вызывается следующей командой:
MPALC<имя_файла>[опции]
Вызываемый файл должен иметь расширение ‘ASM’. Между каждой опцией должен быть пробел.
Опции:
/? – отображение на экране краткой подсказки;
/p<процессор> - определяет тип используемого процессора (16C54, 16С55, 16С56, 16С57, 16С71 или 16С84). По умолчанию – 16С54;
/f<объектный формат> - определяет выходной формат для объектного файла: INHX16, INHX8S, INHX8M или PICICE. По умолчанию - INHX16. Формат INHX16 создает один 16-битный шестнадцатеричный файл. Этот формат используется в программном обеспечении для программатора PICPRO. Формат INHX8S создает два 8-битных шестнадцатеричных файла: один для младших байтов, а другой - для старщих с расширениями ‘obl’ и ‘obh’ соответственно. Этот формат полезен для генерации ППЗУ. Формат INHX8M создает один объединенный шестнадцатеричный файл с комбинацией младших и старших байтов. Этот формат используется для загрузки PIC16C5x при программировании ППЗУ. Формат PICICE формирует файлы, совместимые с PIC-ICE Эмулятором. В этом формате никакие сообщения
11
Ассемблера не будут присутствовать в листинге файла, включая названия и подзаголовки, тем не менее, все предупреждения будут видны на дисплее.
/w<уровень предупреждений> - определяет уровень предупреждений, которые выдаются в листинге. Есть четыре уровня предупреждений (сообщений): 0 – комментарий; 1 – предупреждения; 2 – фатальные; 3 – критические. Сообщения выдаются с заявленного уровня и выше. По умолчанию – уровень 1.
/w-<код ошибки> - форма сообщения об ошибке. Код ошибки может быть любым числом от 0 до 64. Коды ошибок приведены в приложении 1.
/r<основание> - определяет по умолчанию основание для констант. Основание может быть DEC, OCT или HEX. Значение по умолчанию – HEX.
/t<ширина_табуляции> - определяет, что табуляция в исходном файле должна быть заменена пробелами. <Ширина_табуляции> - количество пробелов для замены табуляции.
/i – определяет, что все символы будут нечувствительными. По умолчанию – чувствительные.
/d<имя_метки=величина_метки> - определяет метку и ее величину. При генерации семейства программ метки командной строки могут использоваться, чтобы управлять условным ассемблированием или устанавливать критические константы.
2.3. Выходные файлы Ассемблера
Ассемблер создает различные выходные файлы со следующими расширениями:
.obj – объектный файл;
.obh и .obl – пары данных для старших и младших байтов при исполь-
зовании INHX8S-формата;
.lst – файл листинга;
.erl – файл ошибок и предупреждений;
.sim – символьный файл, производимый с использованием
форматов INHX16 и INHX8M;
.ref - файл символьных ссылок, производимых с PIC-ICE
выходным форматом;
.MAP – отображаемый двоичный отладочный файл, произво-
димый только с PIC-ICE-форматом.
12
2.4. Формат строки Ассемблера
Исходные коды программы на языке Ассемблера разделяются на четыре базовые области:
область метки;
область команд;
область операнда;
область комментариев.
Общий формат для программной строки Ассемблера:
[ <метка>] <команда> [<операнд>] [;<комментарий>]
Пример:
Data EQU 0x03 ; присваивание метке числового значения
Start ; начало программы
movlw Data ; пример инструкции (команды)
goto Start ; продолжение программы (зацикливание)
END ; конец программы
Поле метки в MPALC-ассемблере может начинаться в любом столбце исходной строки. Расположение меток и макроимен становится зависимым, если в командной строке стоит опция /i.
Метка обычно используется в качестве позиции символической ссылки для обеспечения возможностей переходов в программе, а также для присваивания имен константам.
<метка> - имя длиной 1-32 символа. Оно должно начинаться с буквы или
подчеркивания ‘_’, и может содержать любую комбинацию букв,
цифр или подчеркиваний. Примеры меток:
__Start
START
Start
<команда> - может быть мнемоникой машинного кода операции, директивой
Ассемблера или макрокомандой.
<операнд> - информация, используемая конкретным кодом операции, дирек-
тивой Ассемблера или макрокомандой. Если необходим более,
чем один операнд, они отделяются друг от друга запятой и
дополнительно одним или более пробелов или табуляцией.
13
<комментарий> - дополнительная область, содержащая любые выводимые
символы. Все, что находится после символов ‘;’ (точка с
запятой), рассматривается как комментарий и игнорирует-
ся Ассемблером. Область комментария должна отделять-
ся от предыдущей области по крайней мере одним пробе-
лом или символом табуляции. Пустые строки также рас-
сматриваются как комментарий.
2.5. Константы
Ассемблер поддерживает шестнадцатеричные, десятичные, восьмеричные, двоичные и символьные константы. В объектном файле по умолчанию константам будет присваиваться шестнадцатеричное основание, если оно явно не определено в базовом коде. Константе может предшествовать знак плюс или минус. Константы без знака считаются положительными. Шестнадцатеричные числа должны начинаться с числа 0-9, в противном случае они будут интерпретироваться как символы. Обычно используется формат
0х<шестнадцатеричные цифры>.
Возможные представления констант с различными основаниями даны в табл. 2.1.
Таблица 2.1
Тип константы |
Синтаксис |
Пример |
Шестнадцатеричная |
H’<hex-число>’ <hex-число>h 0x<hex-число> |
H’9F’ 900h 0x9FF |
Десятичная |
.<число> |
.100 |
Восьмеричная |
O’<octal-число>’ Q’<octal-число>’ <octal-число>O <octal-число>Q \<octal-число> |
O’777’ Q’777’ 777O 777Q \777 |
Бинарная |
B’<binary-число>’ <binary-число>B |
b’00111001’ 00111001B |
Ассемблером непосредственно определены три символа для регистров и обозначения расположения – «встроенные символы». Эти символы следующие:
W и w – имеют величину нуля;
F и f - имеют величину единица;
Local – резервируется для использования в макроопределениях.
За исключением «Local», эти символы могут быть переопределены пользователем.
14
2.6. Символы и выражения
Символы используются в поле метки, в областях операнда, в качестве текущего программного адреса, а также в директивах и макрокомандах. Символы представлены строкой с одним или более текстовых символов с первым символом A-Z, a-z, ?.
Выражения используются в поле операнда исходной строки и могут содержать константы, символы или любую комбинацию констант и символов, разделенных арифметическими и логическими операторами. Каждой константе или символу могут предшествовать знаки:
‘+’ – представляет положительную величину (значение по умолча-
нию);
‘-‘ – представляет одноместный минус.
Операторы, используемые в выражениях, представлены в табл. 2.2.
Таблица 2.2
Оператор |
Операция |
Пример |
+ + - - % * / << >> ( ) = = != <= >= ! ~ | & | | && ^ $ |
Сложение Унарный плюс Вычитание Унарный минус Модуль Умножение Деление Сдвиг влево Сдвиг вправо Скобки Логическое равенство Логическое неравенство Меньше или равно Больше или равно Отрицание (инверсия) Дополнение Включающее ИЛИ Включающее И Логическое ИЛИ Логическое И Исключающее ИЛИ Текущее значение программного счетчика |
3+4 +x 4-3 -x 3%5 3*4 ¾ 3<<4 3>>4 ((3+4)/5) x= =y x!=y x<=y x>=y !x ~x x|y x&y x| |y x&&y x^y $ |
Все операции используют 32-битные целые величины, следовательно, все доли вследствие деления будут исключаться. Если выражение дает переполнение, то выдается предупреждение. Следует помнить, что выражения в
15
Ассемблере выполняют только роль «калькулятора» на этапе ассемблирования и не сохраняются в объектном коде.
2.7. Директивы Ассемблера
Директивы – это команды Ассемблера, которые используются в исходной программе, но не переводятся непосредственно в коды операций. Они используются для управления Ассемблером, его вводом и выводом, а также распределением данных.
Директивы Ассемблера MPALC разделяются на четыре класса:
Директивы данных – управляют распределением памяти и обеспечивают возможности ссылок на элементы данных с использованием символических имен.
Директивы листинга – управляют файловыми форматами, специфицируют названия и подзаголовки страниц, обеспечивают связь с другими листингами.
Директивы управления – оперируют секциями условно собранного кода.
Макро-директивы – управляют выполнением и распределением данных в пределах тела макрокоманды.
Ниже приводятся синтаксис и описание директив Ассемблера версии MPALC.
DATA - создание числовых и текстовых данных.
Синтаксис:
[<метка>] data <операнд>, [<операнд>]
data “ТЕКСТОВАЯ СТРОКА”
Описание. Директива data инициализирует одно или более слов в форме констант, меток или выражения. Данные могут также состоять из ASCII-символьных строк, включенных в кавычки (апострофы). Каждый операнд может быть выражение или строкой, вплоть до 70 символов. Ассемблер выделяет одну ячейку памяти для каждого выражения или каждого символа в строке.
Примеры:
DATA Reloc_Label + .10 : Константа
DATA 1,2 : Константы
DATA “Text” : Текстовая строка
DATA Char + ‘O’ : Символьное выражение
(Смотрите также директиву res).
1
6
IF, ELSE, ENDIF - сочетание директив, используемое для образования условной альтернативной сборки. IF – начинает условную сборку.