Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УЧПУ.Контроллеры электроавтоматики.doc
Скачиваний:
21
Добавлен:
17.09.2019
Размер:
6.86 Mб
Скачать

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

Сторожевой таймер WDT предназначен для повышения надежности работы микроконтроллера. Он работает от внутреннего RC-генератора, поэтому не зависит от работы основной программы. При переполнении сторожевого таймера происходит общий сброс микроконтроллера. Для надежной работы устройства с использованием микроконтроллера необходимо в рабочей программе предусмотреть периодический сброс сторожевого таймера командой CLRWDT, предупредив таким образом непредвиденный общий сброс микроконтроллера. Сторожевой таймер при необходимости может быть включен или выключен установкой бита WDTE (2 бит в слове конфигурации, записанном по адресу 2007h) при программировании микроконтроллера. Для увеличения периода срабатывания сторожевого таймера к его входу может быть подключен предделитель (см. раздел таймер TMR0).

2.8. Система команд микроконтроллера.

Система команд микроконтроллеров PIC16F873 (PIC16F876) состоит из 35 команд. Полный перечень команд приведен в таблице 31 . Команды условно можно разделить на три группы: к первой группе относятся команды, работающие целиком с байтами; ко второй группе относятся команды, работающие с адресуемыми битами в регистрах; к третьей группе относятся команды управления процессором и команды, работающие с константами. Каждая команда представляет собой 14-разрядный двоичный код, содержащий код операции (OPCODE) и один или два операнда. Форматы команд приведены на рис.25 Большинство команд выполняются за один машинный цикл, исключение составляют команды, которые изменяют состояние счетчика команд:RETFIE, RETLW, RETURN; а также команды условий перехода: DECFSZ и INCFSZ. Эти команды выполняются за два машинных цикла. Машинный цикл состоит из 4 импульсов тактового генератора, т.е. при тактовой частоте 4 МГц время одного машинного цикла равно 1 мкс.

Таблица 31. Система команд микроконтроллера.

№№

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

Описание команд

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

бит 13 бит0

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

1

ADDWF f,d

Сложение регистров W и f

00 0111 dfff ffff

2

ANDWF f,d

Побитное «И» регистров Wи f

00 0101 dfff ffff

3

CLRF f

Очистить регистр f

00 0001 1fff ffff

4

CLRW

Очистить регистр W

00 0001 0xxx xxxx

5

COMF f,d

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

00 1001 dfff ffff

6

DECF f,d

Вычесть 1 из регистра f

00 0011 dfff ffff

7

DECFSZ f,d

Вычесть 1 из f и пропустить следующую команду, если f=0

00 1011 dfff ffff

8

INCF f,d

Прибавить 1 к регистру f

00 1010 dfff ffff

9

INCFSZ f,d

Прибавить 1 к f и пропустить следующую команду, если f=0

00 1111 dfff ffff

10

IORWF f,d

Побитное «ИЛИ» регистров W и f

00 0100 dfff ffff

11

MOVF f,d

Переслать регистр f

00 1000 dfff ffff

12

MOVWF f

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

00 0000 1fff ffff

13

NOP

Нет операции

00 0000 0xx0 0000

14

RLF f,d

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

00 1101 dfff ffff

15

RRF f,d

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

00 1100 dfff ffff

16

SUBWF f,d

Вычесть содержимое регистра W из регистра f

00 0010 dfff ffff

17

SWAPF f,d

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

00 1110 dfff ffff

18

XORWF f,d

Побитное “Исключающее ИЛИ» регистров W и f

00 0110 dfff ffff

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

19

BCF f,b

Очистить бит номер b в регистре f (b = 0 – 7)

01 00bb bfff ffff

20

BSF f,b

Установить в 1 бит номер b в регистре f

01 01bb bfff ffff

21

BTFSC f,b

Проверить бит номер b в регистре f и пропустить следующую команду, если бит равен 0

01 10bb bfff ffff

22

BTFSS f,b

Проверить бит номер b в регистре f и пропустить следующую команду, если бит равен 1

01 11bb bfff ffff

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

23

ADDLW k

Сложить константу k с регистром W

11 111x kkkk kkkk

24

ANDLW k

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

11 1001 kkkk kkkk

25

CALL k

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

10 0kkk kkkk kkkk

26

CLRWDT

Очистить сторожевой таймер

00 0000 0110 0100

27

GOTO k

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

10 1kkk kkkk kkkk

28

IORLW k

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

11 1000 kkkk kkkk

29

MOVLW k

Переслать константу в регистр W

11 00xx kkkk kkkk

30

RETFIE

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

00 0000 0000 1001

31

RETLW k

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

11 01xx kkkk kkkk

32

RETURN

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

00 0000 0000 1000

33

SLEEP

Перейти в режим энергосбережения SLEEP

00 0000 0110 0011

34

SUBLW k

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

11 110x kkkk kkkk

35

XORLW k

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

11 1010 kkkk kkkk

Подробное описание команд.

ADDWF Сложение регистров W и f

Синтаксис команды: [имя метки] ADDWF f,d

Операнды: 0 ≤ f ≤ 127

dÎ [0,1]

Операция: (W) + (f) ® dest (приемник)

Изменяемые флаги: C, DC, Z

Описание операции: Сложить содержимое регистров W и f,

результат остается в регистре W, если

d = 0; если d = 1, результат остается в

регистре f.

ADDLW Сложение регистра W с константой k

Синтаксис команды: [имя метки] ADDLW k

Операнды: 0 ≤ k ≤ 255

Операция: (W) + k ® (W)

Изменяемые флаги: C, DC, Z

Описание операции: Содержимое регистра W складывается с

константой k, результат остается в W.

ANDLW Побитное «И» регистра W с константой k.

Синтаксис команды: [имя метки] ANDLW k

Операнды: 0 ≤ k ≤ 255

Операция: (W) .AND. k ® (W)

Изменяемые флаги: Z

Описание операции: Выполняется побитное «И» регистра (W) с

8-разрядной константой k.

ANDWF Побитное «И» регистров W и f.

Синтаксис команды: [имя метки] ANDWF f,d

Операнды: 0 ≤ f ≤ 127

d Î[0,1]

Операция: (W) .AND. f ® (dest)

Изменяемые флаги: Z

Описание операции: Побитное «И» регистров W и f, результат

в регистре W, если d = 0 и в регистре f,

если d = 1.

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

Синтаксис команды: [имя метки] BCF f,b

Операнды: 0 ≤ f ≤ 127

0 ≤ b ≤ 7

Операция: 0 ® (f <b>)

Изменяемые флаги: нет

Описание операции: Записывается 0 в бит «b» регистра f.

BSF Установить бит b в регистре f.

Синтаксис команды: [имя метки] BSF f,b

Операнды: 0 ≤ f ≤ 127

0 ≤ b ≤ 7

Операция: 1 ® (f<b>)

Изменяемые флаги: нет

Описание операции: Записывается 1 в бит «b» регистра f.

BTFSC Проверить бит b в регистре f, пропустить, если 0.

Синтаксис команды: [имя метки] BTFSC f,b

Операнды: 0 ≤ f ≤ 127

0 ≤ b ≤ 7

Операция: пропустить, если <b> = 0

Изменяемые флаги: нет

Описание операции: Если бит «b» равен 1, то исполняется

следующая команда в программе,

если бит «b» равен 0, то следующая

команда пропускается (исполняется

NOP-операция). Вся команда

выполняется за два машинных цикла.

BTFSS Проверить бит b в регистре f, пропустить, если 1.

Синтаксис команды: [имя метки] BTFSS f,b

Операнды: 0 ≤ f ≤ 127

0 ≤ b ≤ 7

Операция: пропустить, если <b> =1

Изменяемые флаги: нет

Описание операции: Если бит «b» равен 0, то выполняется

следующая команда в программе.

Если бит «b» равен 1, то следующая

команда пропускается (исполняется

NOP-операция). Вся команда

выполняется за два машинных цикла.

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

Синтаксис команды: [имя метки] CALL f

Опе6ранды: 0 ≤ f ≤ 2047

Операция: (PC) + 1 ® TOS

k ® PC <10:0>

(PCLATH <4:3> ® PC <12:11>

Изменяемые флаги: нет

Описание операции: Вызов подпрограммы. Адрес

следующей команды помещается в

вершину стека. Константа загружается

в 11 младших разрядов счетчика

команд, два старших бита счетчика

загружаются из регистра PCLATH

(из разрядов <4:3> ).

Обозначения: TOS – вершина стека, PC – счетчик команд,

PCLATH – специальный регистр для записи

в старшие разряды счетчика команд.

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

Синтакасис команды: [имя метки] RETURN

Операнды: нет

Операция: TOS ® PC

Изменяемые флаги: нет

Описание операции: Возврат из подпрограммы в основную,

содержимое вершины стека загружается

в счетчик команд.

RETFIE Возврат из подпрограммы с разрешением прерывания.

Синтаксис команды: [имя метки] RETFIE

Операнды: нет

Операция: TOS ® PC

1 ® GIE

Изменяемые флаги: нет

Описание операции: Возврат из подпрограммы. Вершина

стека записывается в счетчик команд,

разрешаются глобальные прерывания.

RETLW Возврат из подпрограммы сзаписью константы в регистр W.

Синтаксис команды: [имя метки] RETLW k

Операнды: 0 ≤ k ≤ 255

Операция: TOS ® PC

k ® (W)

Изменяемые флаги: нет

Описание операции: Возврат из подпрограммы. Константа k

загружается в регистр W, вершина стека

загружается в счетчик команд PC.

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

Синтакасис команды: [имя метки] RETURN

Операнды: нет

Операция: TOS  PC

Изменяемые флаги: нет

Описание операции: Возврат из подпрограммы в основную,

содержимое вершины стека загружается

в счетчик команд.

RETFIE Возврат из подпрограммы с разрешением прерывания.

Синтаксис команды: [имя метки] RETFIE

Операнды: нет

Операция: TOS  PC

1  GIE

Изменяемые флаги: нет

Описание операции: Возврат из подпрограммы. Вершина

стека записывается в счетчик команд,

разрешаются глобальные прерывания.

RETLW Возврат из подпрограммы сзаписью константы в регистр W.

Синтаксис команды: [имя метки] RETLW k

Операнды: 0 ≤ k ≤ 255

Операция: TOS  PC

k  (W)

Изменяемые флаги: нет

Описание операции: Возврат из подпрограммы. Константа k

загружается в регистр W, вершина стека

загружается в счетчик команд PC.

CLRF Очистить регистр f.

Синтаксис команды: [имя метки] CLRF f

Операнды: 0 ≤ f ≤ 127

Операция: 00h  f

Изменяемые флаги: 1  Z

Описание операции: Очистить регистр f и установить флаг Z.

CLRW Очистить регистрW.

Синтаксис команды: [имя метки] CLRW

Операнды: нет

Операция: 00h  W

Изменяемые флаги: 1  W

Описание операции: Очистить регистр W и установить флаг Z.

CLRWDT Сбросить сторожевой таймер.

Синтаксис команды: [имя метки] CLRWDT

Операнды: нет

Операция: 00h  WDT

00h  предделитель WDT

1  -TO

1  -PD

Изменяемые флаги: -TO, -PD

Описание операции: Сбрасывается сторожевой таймер и

предделитель, если он подключен к

сторожевому таймеру, в регистре

STATUS устанавливаются биты –TO и

-PD

COMF Инвертировать регистр f.

Синтаксис команды: [имя метки] COMF f,d

Операнлы: 0 ≤ f ≤ 127

d [0,1]

Операция: (f)  dest

Изменяемые флаги: Z

Описание операции: Инвертируется содержимое регистра f,

результат остается в регистре f, если

d = 1, или в регистре W, если d = 0.

DECF Вычесть 1 из регистра f.

Синтаксис команды: [имя метки] DECF f,d

Операнды: 0 ≤ f ≤ 127

d [0,1]

Операция: (f) - 1  dest

Изменяемые флаги: Z

Описание операции: Из регистра f вычитается 1. Результат

в регистре W, если d = 0, в регистре

f, если d = 1.

DECFSZ Вычесть 1 из регистра f и пропустить, если 0.

Синтаксис команды: [имя метки] DECFSZ f,d

Операнды: 0 ≤ f ≤ 127

d [0,1]

Операция: (f) -1  dest, пропустить, если 0

Изменяемые флаги: нет

Описание операции: Вычитается 1 из регистра f, результат

в регистре W, если d = 0, или в регистре

f, если d = 1. Если результат вычитания

равен 0, то следующая команда программы

пропускается, если результат не равен 0,

выполняется следующая команда.

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

Синтаксис команды: [имя метки] GOTO k

Операнды: 0 ≤ k ≤ 2047

Операция: k  PC <10:0>

(PCLATH <4:3>)  PC<12:11>

Изменяемые флаги: нет

Описание операции: Безусловный переход на адрес, заданный

константой k. 11 младших разрядов адреса

записываются в счетчик команд непосред-

ственно константой, два старших разряда

переписывается из регистра PCLATH/