Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие 491

.pdf
Скачиваний:
3
Добавлен:
30.04.2022
Размер:
1.84 Mб
Скачать

не существует. Он использует регистр выбора FSR для косвенной выборки одного из 64 возможных регистров. Любая команда,

использующая INDF, на самом деле обращается к регистру данных,

на который указывает FSR.

Регистр слова состояния (STATUS) похож на регистр PSW,

существующий в большинстве микропроцессоров. В нем находятся бит переноса, десятичного переноса и нуля, а также биты режима включения и биты страничной адресации.

Регистр таймеpа/счетчика TMR0 может быть записан и считан как и любой другой регистр. TMR0 может увеличиваться по внешнему сигналу, подаваемому на вывод RTCC, или по внутренней частоте, соответствующей частоте команд. Основное применение таймеpа/счетчика – подсчет числа внешних событий и измерение времени. Сигнал от внешнего или внутреннего источника также может быть предварительно поделен при помощи встроенного в PIC

программируемого делителя.

Программный счетчик (PC) используется для генерации последовательности адресов ячеек ПЗУ, содержащих 14-pазpядные команды. PC имеет разрядность 13 бит, что позволяет прямо адресовать 8К ячеек по 14 бит каждая (8K 14). Для PIC16С84 однако,

только 1К ячеек физически доступно. Младшие 8 разрядов PC могут быть записаны и считаны через регистр PCL, старшие 5 разрядов загружаются из регистра PCLATCH, имеющего адрес 0Ah.

Регистр прерываний INTCON (адрес 0Bh) служит для управления режимами прерывания и содержит биты разрешения прерываний от различных источников и флаги прерываний. Регистр режимов OPTION (адрес 81h) служит для задания источников сигнала для предварительного делителя и таймера/счетчика, а также для задания коэффициента деления предварительного делителя,

активного фронта сигнала для RTCC и входа прерывания. Кроме того

19

при помощи регистра OPTION могут быть включены нагрузочные резисторы для разрядов порта B, запрограммированных как входы.

Регистры вода/вывода PORTA, PORTB соответствуют двум портам ввода/вывода, имеющимся у PIC16C84. Порт A имеет 5

разрядов PA4-PA0, которые могут быть индивидуально запрограммированы как входы или выходы при помощи регистра

TRISA, имеющего адрес 85h. Порт B имеет 8 разрядов PortB 7 – PortB 0 и программируется при помощи регистра TRISB, имеющего адрес

86h. Задание единицы в разряде регистра TRIS программирует соответствующий разряд порта как вход. При чтении порта считывается непосредственное состояние вывода, при записи в порт запись происходит в буферный регистр.

3.2.2.2. Регистры общего назначения

Регистры общего назначения представляют собой статическое ОЗУ, расположенное по адресам 0Ch-2Fh. Всего в PIC16C84 можно использовать 36 ячеек ОЗУ. Эти регистры используются для хранения переменных по усмотрению пользователя. В

микроконтроллерах Р1С 16С84 существуют прямая и косвенная адресация всех регистров и ячеек памяти.

Микроконтроллеры Р1С 16С84 имеют ортогональную

(симметричную) систему команд, позволяющую выполнять любую операцию с любым регистром, используя любой метод адресации.

В микроконтроллерах Р1С16С84 имеется 8-разрядное арифметико-логическое устройство (ALU). ALU выполняет сложение, вычитание, сдвиг, битовые и логические операции.

PIC микроконтроллеры способны работать с различными типами тактовых генераторов:

– XT кварцевый резонатор

20

HS высокочастотный кварцевый резонатор

LP микропотребляющий кварцевый резонатор

RC генератор.

Задание типа используемого тактового генератора осуществляется в процессе программирования микросхемы.

Входная тактовая частота, поступающая с вывода

OSC1/CLKIN, внутри делится на четыре и из нее формируются четыре циклические не перекрывающиеся тактовые последовательности Q1, Q2, Q3 и Q4. Счетчик команд увеличивается в такте Q1, команда считывается из памяти программы и защелкивается в регистре команд в такте Q4. Команда декодируется и выполняется в течение последующего цикла в тактах Q1...Q4.

Микроконтроллер PIC16C84 имеет аппаратный стек шириной 13

бит. Область стека не принадлежит ни к программной области, ни к области данных, а указатель стека пользователю недоступен.

Стек поддерживает до 8 уровней вложенности подпрограмм пользователя, включая обработку прерываний. В стеке сохраняется адрес возврата в основную программу. Стек не имеет отображения на память программ и память данных, нельзя записать или прочитать данные из стека. Значение счетчика команд заносится в вершину стека при выполнении инструкций перехода на подпрограмму

(CALL) или обработку прерываний. Чтение из стека и запись в счетчик команд PC происходит при выполнении инструкций возврата из подпрограмм или обработки прерываний (RETURN, RETLW, RETFIE), при этом значение регистра PCLATH не изменяется.

После 8 записей в стек, девятая запись запишется на место первой, а десятая запись заменит вторую и так далее (рис. 13).

Регистры могут быть адресованы прямо или косвенно, с

использованием регистра косвенной адресации FSR.

Непосредственная адресация поддерживается специальными

21

командами, загружающими данные из памяти программы в рабочий регистр WREG. Регистры общего назначения используются для хранения переменных по усмотрению пользователя.

Рис. 13. Пример последовательности записи в стек

3.2.3.Система команд

Вмикроконтроллерах среднего семейства, команда состоит из одного 14-разрядного слова, разделенного на код операции

(OPCODE), определяющий тип команды и один или несколько операндов, определяющих операцию команды.

Систему команд микроконтроллера PIC16С84 можно разделить на три основных группы (табл. 2):

байт ориентированные команды;

бит ориентированные команды;

команды управления и операций с константами.

Для байт ориентированных команд f является указателем регистра, а d указателем адресата результата. Указатель регистра определяет, какой регистр должен использоваться в команде.

Указатель адресата определяет, где будет сохранен результат. Если d = 0, результат сохраняется в регистре WREG. Если d = 1, результат сохраняется в регистре, который используется в команде.

22

Таблица 2

Синтаксис некоторых команд микроконтроллера PIC16С84

Мнемоника

Описание

Циклов

14-разрядный код

Изм.

команды

Бит 13

Бит 0

флаги

 

 

1

2

3

4

5

6

 

 

 

 

 

 

 

Байт ориентированные команды

 

 

 

 

 

 

 

ADDWF f, d

Сложение WREG и f

1

00 0111

dfff ffff

C, DC, Z

ANDWF f, d

Побитное 'И' WREG и f

1

00 0101

dfff ffff

Z

CLRW –

Очистить WREG

1

00 0001

0xxx xxxx

Z

CLRF f

Очистить f

1

00 0001

1fff ffff

Z

 

 

 

 

 

 

COMF f, d

Инвертировать f

1

00 1001

dfff ffff

Z

DECF f, d

Вычесть 1 из f

1

00 0011

dfff ffff

Z

 

 

 

 

 

 

INCF f, d

Прибавить 1 к f

1

00 1010

dfff ffff

Z

IORWF f, d

Побитное 'ИЛИ' WREG и f 1

1

00 0100

dfff ffff

Z

MOVF f, d

Переслать f

1

00 1000

dfff ffff

Z

RLF f, d

Циклический сдвиг f влево

1

00 1101

dfff ffff

С

через перенос

 

 

 

 

 

 

 

 

 

 

 

RRF f, d

Циклический сдвиг f впра-

1

00 1100

dfff ffff

С

 

во через перенос

 

 

 

 

SUBWF f, d

Вычесть WREG из f

1

00 0010

dfff ffff

C, DC, Z

SWAPF f, d

Поменять местами полу-

1

00 1110

dfff ffff

 

байты в регистре f

 

 

 

 

 

 

 

 

 

 

 

 

XORWF f, d

Побитное «исключающее

1

00 0110

dfff ffff

Z

ИЛИ» WREG и f

 

 

 

 

 

 

 

 

 

 

 

 

Команды управления и операций с константами

 

ADDLW k

Сложить константу с

1

11 111x

kkkk kkkk

C, DC, Z

 

WREG

 

 

 

 

 

 

 

 

 

 

ANDLW k

Побитное И константы и

1

11 1001

kkkk kkkk

Z

WREG

 

 

 

 

 

 

 

 

 

 

 

BTFSC f, b

Проверить бит b в регистре

1(2)

01 10bb

bfff ffff

 

 

f, пропустить если 0

 

 

 

 

CALL k

Вызов подпрограммы

1

10 0kkk

kkkk kkkk

 

BTFSS f, b

Проверить бит b в регистре

1(2)

01 11bb

bfff ffff

 

 

f, пропустить если 1

 

 

 

 

23

Продолжение табл. 2

1

2

3

 

4

5

6

IORLW k

Побитное ИЛИ константы

1

11

1000

kkkk kkkk

Z

и WREG

 

 

 

 

 

 

 

 

 

 

 

 

 

RETFIE

Возврат из подпрограммы с

2

00

0000

0000 1001

 

разрешением прерываний

 

 

 

 

 

 

 

 

 

Возврат из подпрограммы с

 

 

 

 

 

RETLW k

загрузкой константы в

2

11

01xx

kkkk kkkk

 

 

WREG

 

 

 

 

 

 

 

 

 

 

 

 

RETURN

Возврат из подпрограммы

2

00

0000

0000 1000

 

 

 

 

 

 

 

 

SUBLW k

Вычесть W из константы

1

11

110x

kkkk kkkk

C, DC, Z

XORLW k

Побитное исключающее

1

11

1010

kkkk kkkk

Z

ИЛИ константы и WREG

 

 

 

 

 

 

 

 

 

 

 

 

 

Бит ориентированные команды

 

 

 

 

 

 

 

 

 

BCF f, b

Очистить бит b в регистре f

1

01

00bb

bfff ffff

 

BSF f, b

Установить бит b в реги-

1

01

01bb

bfff ffff

 

стре f

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BTFSC f, b

Проверить бит b в регистре

1(2)

01

10bb

bfff ffff

 

f, пропустить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BTFSS f, b

Проверить бит b в регистре

1(2)

01

11bb

bfff ffff

 

 

f, пропустить если 1

 

 

 

 

 

Вбит ориентированных командах b определяет номер бита участвующего в операции, а f – указатель регистра, который содержит этот бит.

Вкомандах управления или операциях с константами, k

представляет восемь или одиннадцать бит константы или значения литералов.

Все команды выполняются за один машинный цикл, кроме команд условия, в которых получен истинный результат и инструкций изменяющих значение счетчика команд PC. В случае выполнения команды за два машинных цикла, во втором цикле выполняется инструкция NOP. Один машинный цикл состоит из

24

четырех тактов генератора. Так, например, для тактового генератора с частотой 4 МГц все команды выполняются за 1 мкс, если условие истинно или изменяется счетчик команд PC, команда выполняется за

2мкс.

Рис. 14. Общий формат команд микроконтроллера PIC16C84

На рис. 14 показан формат трех групп команд. Код команды может быть от 3 до 6 бит, что позволяет реализовать 35 команд.

Синтаксис некоторых команд микроконтроллера PIC16С84

приведен в табл. 2.

Примечание: Во всех примерах используется следующий формат шестнадцатеричных чисел: 0xhh, где h – шестнадцатеричная цифра.

Представление двоичного числа: 00000100b, где b – указатель двоичного числа.

25

3.3. Правила записи программ на языке Ассемблера

Исходный текст программы на языке ассемблера имеет определенный формат. Каждая команда (и псевдокоманда)

представляет собой строку четырехзвенной конструкции:

МЕТКА ОПЕРАЦИЯ ОПЕРАНД(Ы) КОММЕНТАРИЙ

Звенья (поля) могут отделяться друг от друга произвольным числом пробелов. Порядок и позиция полей важны. Так, метки должны начинаться в первом столбце. Операция (мнемоника команды) может начинаться во втором столбце или вне его.

Операнды следуют за мнемоникой команды. Комментарии могут следовать за операндами, мнемоникой или метками, и могут начинаться в любом столбце. Максимальная ширина столбца – 255

символов. Один или большее количество пробелов должен отделить метку и мнемонику команды, и мнемонику и операнд(ы). Операнды должны отделяться запятой

Например:

; Пример фрагмента исходной программы “Инициализация МК“

BEGIN

MOVLW INITA ; Загрузка в рабочий регистр WREG

; значения, присвоенного имени INITA (значение (константа, число) ;должно быть присвоено; ранее в предыдущих; фрагментах программы!)

MOVWF

TRISA

; Загрузка значения из рабочего

; регистра W в регистр управления конфигурацией порта А

MOVLW

INITB

; Загрузка в рабочий регистр WREG

; значения, присвоенного имени INITB

MOVWF

TRISB

; Загрузка значения из рабочего WREG

; в регистр управления конфигурацией порта В

26

Метки. В поле метки размещается символическое имя ячейки памяти, в которой хранится отмеченная команда или операнд. Метка представляет собой буквенно-цифровую комбинацию,

начинающуюся с буквы. Используются только буквы латинского алфавита. Ассемблер допускает использование в метках символа подчеркивания(_). Длина метки может быть от 6 до 32 (например для

MPASM) символов. Метки могут сопровождаться двоеточием (:),

пробелом, табуляцией или концом строки.

В качестве символических имен и меток не могут быть использованы мнемокоды команд, псевдокоманд и операторов ассемблера, а также мнемонические обозначения регистров и других внутренних блоков микроконтроллера.

Операция. В поле операции записывается мнемоническое обозначение команды микроконтроллера или псевдокоманды ассемблера, которое является сокращением (аббревиатурой) полного английского наименования выполняемого действия. Если имеется метка на той же самой строке, то мнемоника команды ассемблера,

директивы ассемблера и макрообращения должны отделяться от этой метки двоеточием или одним или большим количеством пробелов или меток табуляции.

Операнды. В этом поле помещаются операнды (или операнд),

участвующие в операции. Операнды должны отделяться от мнемоники одним или более пробелов или меток табуляции. Списки операндов (операнды) должны отделяться запятыми.

Команды могут быть без-, одно-, или двухоперандными.

Операнд может быть задан непосредственно или в виде его адреса (прямого или косвенного). Непосредственный операнд представляется числом (MOVLW 0FFh, где символ 0 для Ассемблера означает, что это число FFh, а не метка! Или, MOVLW B'01010011',

где В - обозначает двоичное число) или символическим именем

27

(MOVWF, DATAPORT).

Используемые в качестве операндов символические имена и метки должны быть определены, а числа представлены с указанием системы счисления, для чего используется префикс (буква, стоящая перед числом): В – для двоичной, Q – для восьмеричной, D – для десятичной, Н – для шестнадцатеричной. Число без префикса по умолчанию считается десятичным.

Псевдокоманды ассемблера. Ассемблирующая программа транслирует исходную программу в объектные коды. Хотя транслирующая программа берет на себя многие из рутинных задач программиста, такие как присвоение действительных адресов,

преобразование чисел, присвоение действительных значений символьным переменным и т. п. , программист все же должен указать ей некоторые параметры: начальный адрес рабочей программы, конец ассемблируемой программы, форматы данных и т.п. Всю эту информацию программист вставляет в исходный текст своей прикладной программы в виде псевдокоманд (директив) ассемблера,

которые только управляют процессом трансляции и не преобразуются в коды обьектной программы.

Псевдокоманда ORG 100H задает ассемблеру адрес ячейки памяти (100Н), в которой должна быть расположена следующая за ней команда прикладной программы.

Псевдокомандой EQU можно любому символическому имени,

используемому в программе, поставить в соответствие определенный операнд.

Например, запись

TMRO EQU 01h

приводит к тому, что в процессе ассемблирования всюду, где встретится символическое имя TMRO, оно будет заменено числом 1.

28