
- •Воронежский государственный технический университет
- •В.И.Кравченко
- •Однокристальные микроконтроллеры
- •С 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
Синтаксис:
IF <EXPR.>
<EXPR> - выражение MPALC.
Описание. Если выражение действительно, выполняется следующий собранный код. Если выражение ЛОЖНО и директива ELSE существует, выполняется следующий за директивой ELSE код. Сборка условного блока завершается директивой ENDIF.
Примеры:
IF win = = TRUE
movlw 0xF
movwf 0xA
ENDIF
_ _ _ _ _ _ _ _ _ _ _ _ _
IF VERSION = = 100
movlw 0x0A
movwf IO_1
ELSE
movlw 0x1A
movwf IO_2
ENDIF
END - конец программы или структуры
Синтаксис:
END
Описание. Директива END сообщает Ассемблеру, что последняя исходная строка была прочитана. Дополнительные записи, следующие после END, игнорируются.
EQU - определяет константу Ассемблера
Синтаксис:
<метка> EQU <EXPR> [;<Комментарий>]
<EXPR> - выражение MPALC.
17
Описание. Величина выражения присваивается метке. Величина, определяемая директивой EQU, не может быть переопределена. (Если величина метки должна быть изменена, следует использовать директиву SET).
Пример:
FOUR EQU 4 ; Метке FOUR присваивается числовая величина 4
SET - определяет переменную Ассемблера
Синтаксис:
<метка> SET <EXPR> [;<Комментарий>]
<EXPR> - выражение MPALC.
Описание. Директива SET функционально эквивалентна директиве EQU, за исключением того, что в директиве SET значение может быть переопределено.
ORG - устанавливает начальный адрес программы
Синтаксис:
[<метка>] ORG <EXPR> [;<Комментарий>]
<EXPR> - выражение MPALC.
Описание. Устанавливает начальный адрес программы, равный результату вычисления выражения. Если есть метка, то она получит величину <EXPR>. По умолчанию начальный адрес программы нулевой.
Пример:
List P = 16C56
Sub1 ORG 0x200
........................................
........................................
<Текст подпрограммы>
.........................................
retlw 0
(См. также директиву res).
1 8
RES - резервирование ячеек памяти
Синтаксис:
[<метка>] RES <Количество слов памяти> [;<Комментарий>]
Описание. Директива перемещает счетчик команд из его текущей позиции на величину, указанную в позициях <Количество слов памяти>. Часто директива RES используется после директивы ORG.
Пример:
Buffer RES 64 ; Резервируется 64 слова памяти
MACRO - обозначение макроопределения
Синтаксис:
<метка> MACRO [<Аргумент-1>, . . . , <Аргумент-k>] [;<Комментарий>]
Описание. Макрокоманда определяет последовательность инструкций, которая может быть включена в исходную Ассемблерную программу, используя единственное обращение к макрокоманде. Макрокоманда должна быть сначала определена с использованием формальных аргументов (имен). В дальнейшем, при вызове макрокоманды, формальные аргументы заменяются фактическими. Макрокоманда может вызывать другую макрокоманду, или может вызываться рекурсивно.
Тело макрокоманды в ее описании должно заканчиваться оператором завершения макроопределения ENDM.
В описании макрокоманды может использоваться оператор безотлагательеного завершения макрокоманды EXITM, который отменяет возможное альтернативное продолжение сборки команд и заканчивает выполнение макрокоманды, как и оператор ENDM.
Примеры:
Read MACRO device, buffer, count
MOVLW device
MOVWF RAM_20
MOVLW buffer
MOVWF RAM_21
MOVLW count
19
CALL SYS_21
ENDM
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Test MACRO Size
IF size = = 0
EXITM
ELSE
x set x+1
y set y+1
ENDIF
ENDM
LOCAL - объявляет локальные макропеременные
Синтаксис:
LOCAL <Метка-1> [,<Метка-2>, ... , <Метка-К>]
<Метка-n> - метка Ассемблера.
Описание. Директива позволяет использовать в макрокоманде данные (метки), которые могут существовать за пределами контекста макроопределения, то есть она объявляет, что определенные элементы данных могут считаться локальным контекстом в макрокоманде. Если макрокоманда рекурсивная, то каждый вызов будет иметь его собственную локальную копию.
Пример:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
<сегмент основной программы>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Length EQU 10 ;
Size EQU 20 ;
;
Test MACRO Size ;
LOCAL Length, Label ; Локальная длина
Length SET Size ; Модификация локальной длины
Label RES Length ; Резервный буфер
Length SET Length – 20 ;
ENDM ; Конец макрокоманды
2
0
LIST - опции листинга
Синтаксис:
LIST <Опция-1> [, <Опция-2> , ... , <Опция-N> ]
Описание. Опции выбираются в соответствии с их назначением согласно табл. 2.3.
Таблица 2.3
Опция |
Описание и значение по умолчанию |
C=<columns>
D
E=<level>
F=<type>
N=<lines>
T= (ON I OFF)
P=<part>
R=<radix>
X=<ON I OFF) |
Определяет количество столбцов на страницу для листинга распечатки. С=80. Значение “columns” должно быть определено как константное выражение.
Таблица выдачи идентификаторов файла в PICESII формате (для совместимости с PICICE форматом).
Определяет уровень сообщения ошибок/предупреждений, которые нужно выводить. (Е=1). Значения уровней: 0 – сообщается все; 1 – сообщения предупреждающие, фатальные, критические; 2 – сообщения фатальные и критические;3 – сообщения критические.
Определяет формат объектного кода: PICICE, INHX16, INHX8S, INHX8M
Определяет количество строк на страницу для листинга распечатки. (N=51). Значение “<lines>” должно быть определено как константное выражение.
Включает или выключает листинг строки при определенной “C”- опции. Значение по умолчанию – ON, если выбран формат PICICE.
Определяет процессор, для которого произведен объектный код. (16С54). <part> может быть: 16С54, 16С55, 16С56, 16С57, 16С71 или 16С84.
Определяет основание для констант в исходном файле. (HEX). <redix> может быть: HEX, DEC, OCT
Определяет, что макрорасширение должно быть включено или выключено. |
21
Следует иметь в виду, что объектный кодовый модуль и файл таблицы идентификаторов всегда производятся в шестнадцатеричном формате, независимо от опций LIST, E, F, P и R. Кроме того, опции исходной программы заместят ключи командной строки E, F, P и R.
INCLUDE - включить файл
Синтаксис:
INCLUDE “<Имя файла и путь>”
Описание. Определенный файл передается в исходную программу и подстыковывается к концу исходного файла. Разрешаются вложенные файлы, вплоть до десяти уровней вложенности. Запись <Имя файла и путь> должна быть заключена в кавычки или апострофы.
Пример:
include “C:\sys\sysdefs.inc” ; Включить файл
include “C:\sysregs.def” ;
TITLE - определяет название программы
Синтаксис:
TITLE “<Текст названия>”
Описание. <Текст названия> - строка выводимого ASCII-кода, заключенная в кавычки или апострофы. Длина строки – не более 60 символов. Директива может использоваться так часто, как этого пожелает пользователь. Строка названия обычно состоит из основного файлового имени, текста названия и номера страницы. Если страница содержит директиву SUBTITLE, то директиву TITLE можно не использовать.
Пример:
TITLE “Operational Code, Rev 5.0”
SUBTITL - определяет название программного подзаголовка
Синтаксис:
SUBTITL “<Текст подзаголовка>”
22
Описание. <Текст подзаголовка> - текстовая строка в ASCII-коде, заключенная в кавычки или апострофы, длиной не более 60 символов. Директива используется для формирования подзаголовка в листинге выхода. Нет необходимости использовать директиву TITLE, если далее идет директива SUBTITL, так как первая строка SUBTITL может содержать файловое имя, а вторая – подзаголовок.
Пример: