- •СведенИя о процессоре pic16. Система команд Архитектура процессоров семейства pic16
- •Распределение областей памяти процессоров pic16
- •Система команд процессоров pic16
- •Программирование на Ассемблере
- •Синтаксис числовых значений в различных системах счисления
- •Практическая часть Процесс подготовки программ для процессоров pic16 Методические указания
- •Ход работы
- •Лабораторная работа № 1
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 2.
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 3.
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 4
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 5
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 6
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 7
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 8
- •Теоретические сведения
- •Ход работы
- •Список литературы
Программирование на Ассемблере
Программа на языке Ассемблер представляет собой текстовый файл, аналогичный программам на языках высокого уровня (BASIC, C++, PASCAL…). Программы состоят из последовательности строк с командами используемого процессора, их аргументов, комментариев и т.д.
Для преобразования программы в двоичные коды процессора на компьютере выполняется компиляция – проверка синтаксиса, перевод программы в двоичные коды и сборка программы из одного или нескольких блоков.
При указании численных значений могут быть использованы различные системы счисления, определяемые синтаксисом числа.
Синтаксис числовых значений в различных системах счисления
Система счисления |
Синтаксис |
Примеры |
16 - ричная
|
H´число´ 0xчисло |
H´9f´ 0x9f |
10 - тичная
|
D´число´ .число |
D´100´ .100 |
8 - ричная
|
O´число´ |
O´777´
|
2 - ичная
|
B´число´ |
B´00001111´ |
Символьный формат (ASCII) |
´символ´ A´символ´ |
´C´ A´C´ |
Комментарии в программе начинаются символом «;». Запись в строке после точки с запятой игнорируется компилятором.
При разработке программ на языке Ассемблер кроме команд процессора (табл.2,3) используются также вспомогательные команды, позволяющие упростить подготовку основной части программы. Эти команды называют директивами или объявлениями. Компилятор обрабатывает директивы и вставляет данные из них в основную часть программы, что позволяет, в частности, вместо двоичных кодов адресов регистров и данных использовать более привычные из языков высокого уровня имена переменных и констант, метки переходов и т.д.
Директивы, как и команды процессора, могут записываться прописными или строчными буквами с указанием обязательных или необязательных аргументов.
Наиболее часто используемые директивы описаны ниже. Необязательные аргументы директив указаны в квадратных скобках.
1. LIST arg – формирование различных сообщений (arg) для компилятора.
Пример:
LIST p=16f77 ; указание компилятору об использовании в программе
; команд процессора PIC16F77.
2. INCLUDE file_name – включение в программу текста из внешнего дополнительного файла file_name.
Пример:
INCLUDE p16f77.inc ; включение в программу файла p16f77.inc с
; описанием областей памяти и служебных
; регистров процессора PIC16F77.
3. END – обязательная директива, завершающая текст программы. Все записи после этой директивы компилятор игнорирует.
4. name EQU arg – установление соответствия между именем name и численным аргументом arg (arg может являться результатом вычисления арифметического выражения с использованием объявленных ранее имен).
Пример:
c_x EQU 0x20 ; имени c_x соответствует константа 0x20
c_y EQU c_x+1 ; имени c_y соответствует константа 0x21.
5. CBLOCK arg
name1[: size1]
name2[: size2]
name3[: size3]
ENDC
Автоматическое назначение адресов переменных name1, name2, name3, начиная с адреса arg с учетом размера size (в байтах) каждой переменной. По умолчанию (без указания size) выделяется 1 байт.
Пример:
CBLOCK 0x20
name1: 2 ; name1 EQU 0x20
name2: 3 ; name2 EQU 0x22
name3, name4 ; name3 EQU 0x25, name4 EQU 0x26
ENDC
6. ORG arg – указание компилятору о размещении следующих далее команд процессора начиная с адреса arg.
Пример:
ORG 0x015f
label MOVLW 0x25 ; код команды MOVLW 0x25 будет размещен в
; области памяти программ процессора по адресу
; 0x015f.
Этот же адрес будет поставлен в соответствие метке label для использования в командах безусловных переходов, например, GOTO label.
7. name MACRO [arg1, arg2, …]
[local label1, …]
COM1 arg1
label1 COM2 arg2
COM3 arg3
ENDM
Объявление макроса name с передаваемыми внешними аргументами arg1, arg2…, внутренними метками переходов label1…, состоящего из команд COM1, COM2…
Макрос представляет собой блок программных строк, несколько раз повторяющийся в программе, но использующий разные аргументы, что не позволяет такой блок оформить в виде подпрограммы.
Макросы позволяют структурировать программу, упростить процесс программирования, сделать код программы более гибким и удобочитаемым.
Приведенный ниже пример позволяет пару команд, выполняющих загрузку регистров численным значением заменить одной строкой:
SET_VAR MACRO var, data
MOVLW data
MOVWF var
ENDM
После объявления такого макроса последовательность команд
MOVLW 0x3E
MOVWF c_x
MOVLW 0xA9
MOVWF c_y
может быть заменена двумя строками:
SET_VAR c_x, 0x3E
SET_VAR c_y, 0xA9
8. #DEFINE name [string] – объявление имени name, которому может быть поставлена в соответствие строка string.
Объявленное имя name в тексте программы может заменить длинные команды, имена служебных регистров и их битов.
В приведенном ниже примере длинные команды условных переходов по сброшенным/установленным признакам переполнения C и нуля Z заменяются короткими аббревиатурами JNC (Jump if No Carry), JC (Jump if Carry), JNZ (Jump if No Zero), JZ (Jump if Zero):
#define JNC BTFSC STATUS, C
#define JC BTFSS STATUS, C
#define JNZ BTFSC STATUS, Z
#define JZ BTFSS STATUS, C
При отсутствии аргумента string существование объявления имени name может быть проверено директивами:
#ifdef name ; если name объявлено, то компилировать следующий код
…
endif
#ifndef name ; если name не объявлено, то компилировать следующий код
…
endif
Это позволяет создавать универсальные программы для различных вариантов исполнения устройства.
