Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PIC16F877.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.15 Mб
Скачать

1.12.1 Внешнее прерывание с входа rb0/int

Внешнее прерывание с входа RB0/INT происходит: по переднему фронту сигнала, если бит INTEDG (OPTION_REG<6>) установлен в '1'; по заднему фронту сигнала, если бит INTEDG сброшен в '0'. Когда активный фронт сигнала появляется на входе RB0/INT бит INTF (INTCON<1>) устанавливается в '1'. Прерывание может быть запрещено сбросом бита INTE (INTCON<4>) в '0'. Флаг прерывания INTF должен быть сброшен программно в подпрограмме обработки прерываний. Прерывание INT может вывести микроконтроллер из режима SLEEP, если бит INTE=1 до перехода в режим SLEEP. Состояние бита GIE определяет, переходить на подпрограмму обработки прерываний после выхода из режима SLEEP.

1.12.2 Прерывание по переполнению tmr0

Переполнение таймера TMR0 (FFh → 00h) устанавливает флаг T0IF (INTCON<2>) в '1'. Прерывание от TMR0 можно разрешить/запретить установкой/сбросом бита T0IE(INTCON<5>). Описание работы модуля TMR0 смотрите в разделе 1.10.

1.12.3 Прерывание по изменению уровня сигнала на входах rb7:rb4

Изменение уровня сигнала на входах RB7÷RB4 вызывает установку флага RBIF(INTCON<0>). Прерывание можно разрешить или запретить установкой или сбросом бита RBIE(INTCON<4>). Описание работы PORTB смотрите в разделе 1.8.2.

Пример работы обработки прерываний смотри в разделе 3.8, Лабораторная работа № 8.

1.13 Система команд

Каждая команда микроконтроллеров PIC16F87X состоит из одного 14-разрядного слова, разделенного на код операции (OPCODE), определяющий тип команды и один или несколько операндов, определяющие операцию команды. Полный список команд смотрите в таблице 1.18. Команды разделены на следующие группы:

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

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

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

Описание полей кода операции смотрите в таблице 1.17.

Все команды микроконтроллера PIC16F877 выполняются за один машинный цикл, кроме команд условия, в которых получен истинный результат и инструкций изменяющих значение счетчика команд PC. В случае выполнения команды за два машинных цикла, во втором цикле выполняется инструкция NOP. Один машинный цикл состоит из четырех тактов генератора. Для тактового генератора с частотой 20 МГц все команды выполняются за 200 нс. Если результат проверки условия истинен или изменяется счетчик команд PC в результате выполнения команд переходов(GOTO, RETURN и др.), то время выполнения команды равно 400 нс.

Основным языком программирования для микроконтроллеров является ассемблер, для компиляции исходного текста программы на языке ассемблер для PIC-микроконтроллеров используется инструмент MPASM входящий в интегрированную среду разработки MPLAB. Подробнее описание среды разработки MPLAB смотрите в разделе 2.

Мнемоника команд, поддерживаемая ассемблером MPASM, показана в таблице 1.17. На рисунке 1.3 показан формат команд трех основных групп.

Байтовые операции

Бит 13

Бит 12

Бит 11

Бит 10

Бит 9

Бит 8

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

КОД ОПЕРАЦИИ (OPCODE)

d

f (регистр)

d = 0 результат в W

d = 1 результат в f

f = 7 - разрядный адрес регистра

Битовые операции

Бит 13

Бит 12

Бит 11

Бит 10

Бит 9

Бит 8

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

КОД ОПЕРАЦИИ (OPCODE)

b (разряда)

f (регистр)

b = 3 - разрядный номер бита

f = 7 - разрядный адрес регистра

Операции с константами

Бит 13

Бит 12

Бит 11

Бит 10

Бит 9

Бит 8

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

КОД ОПЕРАЦИИ (OPCODE)

k (константа)

k = 8 - разрядное непосредственное значение

Операции передачи управления (CALL и GOTO)

Бит 13

Бит 12

Бит 11

Бит 10

Бит 9

Бит 8

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

КОД ОПЕРАЦИИ

k (константа)

k = 11 - разрядное непосредственное значение

Рисунок 1.4 Форматы команд микроконтроллера PIC16F877

Для байт-ориентированных команд «f» является указателем регистра, а «d» указателем адресата результата. Указатель регистра определяет, какой регистр должен использоваться в команде. Указатель адресата определяет, где будет сохранен результат. Если «d» = 0, результат сохраняется в регистре W. Если «d» =1, результат сохраняется в регистре, который используется в команде.

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

В командах управления или операциях с константами «k» представляет восьми- или одиннадцатиразрядное число или значения литерала(метки).

Команда микроконтроллера является частью системы команд микроконтроллера, состав которой индивидуален для каждого микроконтроллера. Например, микроконтроллер PIC16F877 имеет систему команд, включающую в себя 35 команд.

Таблица 1.17 Описания полей кода операции

Поле

Описание

f

Адрес регистра (от 0x00h до 0x7Fh)

W

Рабочий регистр (аккумулятор)

b

Номер бита в 8-разрядном регистре

k

Константа (данные или метка)

x

Неопределённое значение (0/1). Ассемблер генерирует код

х = 0. Рекомендуется для совместимости со всеми инструментальными средствами программного обеспечения.

d

Указатель адресата результата операции

label

Имя метки

ТОС

Вершина стека

РС

Счетчик команд

РСLATH

Буфер старшего байта счетчика команд

GIE

Бит глобального разрешения прерываний

WDT

Сторожевой таймер

ТО

Флаг переполнения WDT

PD

Флаг сброса по включению питания

dest

Приемник результата операции, регистр W или регистр памяти

[ ]

Дополнительные параметры (опции)

( )

Содержимое

Присвоение

< >

Битовое поле (указатель разряда)

Из набора (множества)

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

Таблица 1.18 Мнемоника команд микроконтроллера PIC16F877

Мнемоника команды

Описание

Циклов

Флаги

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

ADDWF

f, d

Сложение W и f

1

C,DC,Z

ADDWF

f, W

(f) + (W)  (W)

ADDWF

f, F

(f) + (W)  (f)

ANDWF

f, d

Побитное «И» W и f

1

Z

ANDWF

f, W

(f) and (W)  (W)

ANDWF

f, F

(f) and (W)  (f)

CLRF

f

Очистить f (00hf)

1

Z

CLRW

Очистить W(00h W)

1

Z

COMF

f, d

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

1

Z

COMF

f, W

not (f)  (W)

COMF

f, F

not (f)  (f)

DECF

f, d

Вычесть 1 из f

1

Z

DECF

f, W

(f) - 1  (W)

DECF

f, F

(f) – 1  (f)

DECFSZ

f, d

Вычесть 1 из f и пропустить если 0

1(2)

Z

DECFSZ

f, W

(f) - 1  (W) / If (W) = 0 then NOP

DECFSZ

f, F

(f) – 1  (f) / If (f) = 0 then NOP

INCF

f, d

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

1

Z

INCF

f, W

(f) + 1  (W)

INCF

f, F

(f) + 1  (f)

INCFSZ

f, d

Прибавить 1 к f и пропустить если 0

1(2)

Z

INCFSZ

f, W

(f) + 1  (W) / If (W) = 0 then NOP

INCFSZ

f, F

(f) + 1  (f) / If (f) = 0 then NOP

IORWF

f, d

Побитное «ИЛИ» W и f

1

Z

IORWF

f, W

(f) or (W)  (W)

IORWF

f, F

(f) or (W)  (f)

MOVF

f, d

Переслать f

1

Z

MOVF

f, W

(f)  (W)

MOVF

f, F

(f)  (f)

MOVWF

f

Переслать W в f

1

NOP

Нет операции

1

RLF

f, d

Циклический сдвиг f влево через перенос

1

C

RLF

f, W

(C)← f (7)← f (6) ←… f (0) ←(C) / (f)  (W)

RLF

f, F

(C)← f (7)← f (6) ←… f (0) ←(C) / (f)  (f)

RRF

f, d

Циклический сдвиг f вправо ч/з перенос

1

C

RRF

f, W

(C) f (7) f (6)  … f (0)  (C) / (f)  (W)

RRF

f, F

(C) f (7) f (6)  … f (0)  (C) / (f)  (f)

SUBWF

f, d

Вычесть W из f

1

C,DC,Z

SUBWF

f, W

(f) - (W)  (W)

SUBWF

f, F

(f) - (W)  (f)

SWAPF

f, d

Поменять местами полубайты в регистре f

1

SWAPF

f, W

f (7÷4)  f (3÷0)  (W)

SWAPF

f, F

f (7÷4)  f (3÷0)  (f)

XORWF

f, d

Побитное «исключающее ИЛИ» W и f

1

Z

XORWF

f, W

(f) xor (W)  (W)

XORWF

f, F

(f) xor (W)  (f)

Продолжение таблицы 1.18

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

BCF

f, b

Очистить бит b в регистре f / 0F(b)

1

BSF

f, b

Установить бит b в регистре f / 1F(b)

1

BTFSC

f, b

Если F(b) = 0 то пропустить

1(2)

BTFSS

f, b

Если F(b) = 1 то пропустить

1(2)

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

ADDLW

k

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

1

C,DC,Z

(W) + (k)  (W)

ANDLW

k

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

1

Z

(W) and (k)  (W)

CALL

k

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

2

PC+1TOS / kPC(10÷0) / PCLATH(4,3)  PC(12,11)

CLRWDT

Очистить WDT / (00hWDT)

1

-TO, -PD

GOTO

k

Безусловный переход

2

kPC(10÷0) / PCLATH(4,3)  PC(12,11)

IORLW

k

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

1

Z

(W) or (k)  (W)

MOVLW

k

Переслать константу в W / (k)  (W)

1

RETFIE

Возврат из п/п с разрешением прерываний

2

TOSPC / 1GIE

RETLW

k

Возврат из п/п с загрузкой константы в W

2

TOSPC /(k)  (W)

RETURN

Возврат из п/п / TOSPC

2

SLEEP

Перейти в режим SLEEP

1

-TO, -PD

00hWDT / 0 предделитель WDT, PD / 1TO

SUBLW

k

Вычесть W из константы / k - (W)  (W)

1

C,DC,Z

XORLW

k

Побитное «исключающее ИЛИ» k и W

1

Z

(k) xor (W)  (W)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]