- •Установка и подготовка к работе mplab
- •Создание проекта и подключение файла с программой
- •Структура текста программы
- •Правила оформления программы
- •Особенности сопоставления имен и чисел. Прямая и косвенная адресация
- •Циклическая концепция программы
- •Модульная структура программы
- •Понятие о времени исполнения программы
- •Компиляция и устранение ошибок
- •Глава 4. Макетная плата. Программатор
- •Задержки в программе и их расчёт
- •Обозначение ножек микроконтроллера
- •Функциональное назначение ножек
- •Назначение ножек
- •Макетная плата и её назначение
- •Инструкция по прошивке микроконтроллера
- •Глава 5. Элементарные базовые проекты
- •Теория и практика работы портов мк
- •1 (Input) – работа на вход
- •0 (Output) – работа на выход
- •Пример 1. Мигающие светодиоды
- •Пример 2. "Бегущий огонь" и "бегущая тень"
- •Пример 3. Включение символов на индикаторе
- •Пример 4. Отслеживание нажатия кнопки
- •Пример 5. Кнопка в режиме переключателя. Антидребезг
Структура текста программы
Мы установили программу, подключили файл с текстом программы и что дальше? С чего начать? Чем закончить?
Здесь мы рассмотрим структуру текста программы и ответим на вопросы: что, как и в какой последовательности должно располагаться в тексте, а далее рассмотрим нюансы при создании структуры.
Текст программы состоит из двух частей: шапки и тела программы.
В шапке программы указывается:
– тип используемого МК;
– его конфигурация (директива __CONFIG);
– перечисляются имена с сопоставленными числами (директива EQU).
В шапке программы, образно говоря, определяют правила игры. Действительно, нужно знать какой используется МК, как он настроен (об это позже), какие регистры и какие числа решили сопоставить.
Необходимо отметить, что имена регистров специального назначения мы можем узнать не только из документации, но и в файлах с расширением *.INC (путь – C:_Program Files_Microchip_MPASM Suite), например, P16F84A.INC .
Между шапкой и телом программы стоит директива ORG , определяющая начальный адрес программы в памяти программ в МК.
Затем идёт тело программы, которое определяет логику работы МК.
В самом конце идёт директива END , определяющая конец программы.
Структура программы
Шапка программы LIST P=PIC16F84A
__CONFIG H3FF1
W EQU H0000
F EQU H0001
... прочие наименования
org 0 ; начало программы
Тело программы ... текст программы
end ; конец программы
Правила оформления программы
Текст программы традиционно пишется в три колонки от левого края. Каждая колонка занимает 12 знакомест.
Рассмотрим пример
LIST P=PIC16F84A
__CONFIG H3FF1
PORTB EQU H0006
org 0 ; начало программы
metka clrf PORTB
bsf PORTB,7
goto metka
end ; конец программы
Ничего сложного нет.
В первый столбец записываются определяемые имена и метки.
Во второй столбец – команды и директивы.
В третий столбец – имена регистров и числа.
Большой ошибки не будет, если колонки будут шириной 10…14 знакомест; иногда такое происходит в процессе написания текста программы.
Комментарии записываются после символа "точка с запятой" ; . Не ленитесь и не бойтесь писать комментарии, пусть даже самые глупые. Глупый комментарий, как правило, самый запоминающийся.
Для лучшего зрительного восприятия блоки программы можно друг от друга отделять пустыми строками. Комментарии и пустые строки игнорируются компилятором. Компилятор обрабатывает только тело программы, заключенное между директивами ORG и END.
Конфигурирование МК. Директива __CONFIG
Конфигурирование МК рассмотрим на примере PIC16F84A. Для других типов МК принцип конфигурирования такой же.
Под конфигурированием МК понимается установка битов конфигурации в регистре по адресу H2007. Это необычный регистр – у него не 8 бит, а 14.
Рабочие биты с 0-го по 4-й, не рабочие – с 5-го по 13-й. Не рабочие биты читаются (и записываются) как единица.
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Не задействованы (читаются как 1) |
CP |
-PWRTE |
WDTE |
FOSC1 |
FOSC0 |
||||||||
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0\1 |
0\1 |
0\1 |
0\1 |
0\1 |
Описание конфигурационных битов.
Бит 4 CP
бит защиты памяти программ |
1 – защита выключена
0 – защита включена |
Бит 3 –PWRTE
бит разрешения работы таймера включения питания PWRT |
0 – будет производиться выдержка при включении питания
1 – выдержки производиться не будет |
Бит 2 WDTE
бит разрешения работы сторожевого таймера WDT |
1 – WDT включен
0 – WDT выключен |
Бит 1-0 FOSC1-FOSC0
биты выбора типа генератора |
|
Описание комбинаций битов выбора генератора.
00 |
LP – генератор |
НЧ генератор для экономичных приложений |
01 |
XT – генератор |
Стандартный кварцевый генератор |
10 |
HS – генератор |
ВЧ кварцевый генератор |
11 |
RC – генератор |
RC генератор с внешней RC цепью |
Кратко опишем суть рабочих битов.
Бит защиты памяти программ CP. Используя программатор мы записываем программу в МК. С помощью программатора можно прочитать записанную программу и продублировать её на другом МК. Если установлен бит защиты, то прочитать записанную программу невозможно (защита от копирования). В примерах бит защиты отключен.
Бит разрешения работы таймера включения питания –PWRTE. После включения МК требуется некоторое время для стабилизации частоты кварцевого генератора и стабилизации напряжения. С помощью таймера включения осуществляется задержка на время 72мс (типовое время). В примерах таймер включен.
Бит разрешения работы сторожевого таймера WDT. Суть работы сторожевого таймера заключается в периодическом сбросе МК, после чего МК начинает выполнение программы с начала. Используется в тех случаях, когда к устройству на МК предъявляются высокие требования к отказоустойчивости. Используя сторожевой таймер, в текст программы периодически необходимо вставлять команду CLRWDT – сброс сторожевого таймера. Сторожевой таймер имеет дополнительные настройки связанные с интервалами между сбросами. В примерах сторожевой таймер отключен.
Биты выбора типа генератора OSC. Существуют различные типы генераторов, отличающиеся конструктивным исполнением, способом подключения, частотой генерации и стабильности. В наших примерах мы используем стандартный кварцевый генератор.
Как для директивы __CONFIG определить число конфигурации?
Сначала записываем бинарное число в соответствии с нашими настройками:
111111111 – неиспользуемые девять бит в состоянии 1;
1 – защита выключена;
0 – выдержка при включении;
0 – сторожевой таймер отключен;
01 – стандартный кварцевый генератор.
Получается число 11111111110001 которое либо в конвертере BinHexDec, либо в стандартном калькуляторе переводим в 16-тиричное – h3FF1. Число, полученное таким образом, указывается после директивы __CONFIG.
Шестнадцатеричное число конфигурации можно определить иначе, без использования конвертера или калькулятора. Открываем в MPLAB меню Configure -> Configuration Bits.… Здесь мы можем выбрать для проекта значения опций конфигурирования МК.
Число в колонке "Value" является искомым числом.
В этом разделе мы также рассмотрим конфигурирование МК путем использования битов конфигурации в явном виде. Биты конфигурации как и регистры специального назначения описаны в файле с расширением *.INC (путь – C:_Program Files_Microchip_MPASM Suite), например, в файле P16F84A.INC . Файл *.INC является обычным текстовым файлом, который можно посмотреть с помощью стандартного текстового редактора "Блокнот" из Windows.
Итак, после строчки с записью LIST P=PIC16F84A необходимо записать две строчки следующего вида
#include P16F84A.INC
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
С помощью #include мы прописываем файл P16F84A.INC с описаниями регистров и битов (с сопоставлениями). Этот файл должен находиться либо в папке MPASM Suite, либо в папке с проектом.
После директивы __CONFIG идёт перечисление соответствующих битов конфигурации. Расшифровку сокращенных наименования битов конфигурации предлагаем вам разобрать самостоятельно.
Какой вариант конфигурирования использовать – это дело личных предпочтений. Мне нравится "короткая" запись типа __CONFIG H3FF1. Длинная запись более наглядна, но требует наличия и прописывания файла типа *.INC. С другой стороны, с прописанным файлом *.INC в шапке программы не требуется сопоставлять регистры специального назначения. В наших дальнейших примерах мы не будем прописывать файл *.INC . Мы будем использовать "короткую" запись для конфигурирования МК и будем вручную сопоставлять регистры специального назначения с тем, чтобы вы обращались к первоисточникам и привыкали к наименованиям регистров специального назначения.
