Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на ассемблере для PIC2.doc
Скачиваний:
26
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Структура текста программы

Мы установили программу, подключили файл с текстом программы и что дальше? С чего начать? Чем закончить?

Здесь мы рассмотрим структуру текста программы и ответим на вопросы: что, как и в какой последовательности должно располагаться в тексте, а далее рассмотрим нюансы при создании структуры.

Текст программы состоит из двух частей: шапки и тела программы.

В шапке программы указывается:

– тип используемого МК;

– его конфигурация (директива __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 . Мы будем использовать "короткую" запись для конфигурирования МК и будем вручную сопоставлять регистры специального назначения с тем, чтобы вы обращались к первоисточникам и привыкали к наименованиям регистров специального назначения.