Полный список команд смотрите в таблице 2. Команды разделены на следующие группы:
· байтовые команды;
· битовые команды;
· команды управления и операций с константами.
На рисунке 5 показан формат команд трех основных групп.
Для байт ориентированных команд:
· 'f ' является указателем регистра и определяет - какой регистр должен использоваться в команде;
· 'd' указателем адресата результата и определяет, где будет сохранен результат.
Если 'd'=0, результат сохраняется в регистре W.
Если 'd'=1, результат сохраняется в регистре, который используется в команде.
В бит ориентированных командах:
· 'b' определяет номер бита участвующего в операции;
· 'f ' - указатель регистра, который содержит этот бит.
В командах управления или операциях с константами:
· 'k' представляет восемь или одиннадцать бит константы.
Рис. 5. Формат команд.
Все команды выполняются за один машинный цикл, кроме команд условия, в которых замещается значение программного счетчика. В случае выполнения команды за два машинных цикла, во втором цикле выполняется инструкция NOP. Один машинный цикл состоит из четырех тактов генератора. Для тактового генератора с частотой 4 МГц команда выполняется за 2 мкс.
Таблица 2. Команды микроконтроллера PIC16F877.
| Мнемоника | Операция | Циклы | Код команды | Флажки | Примечание |
| команды | |||||
| БАЙТОВЫЕ КОМАНДЫ | |||||
| ADDWF f, d | Сложение (W + f->d) | 1 | 00 0111 dfff ffff | C.DC.Z | 1,2 |
| ANDWF f, d | Логическое "И" (W and f — > d) | 1 | 00 0101 dfff ffff | Z | 1,2 |
| CLRF f | Обнулить f | 1 | 00 0001 1fff ffff | Z | 2 |
| CLRW - | Обнулить W | 1 | 00 0001 0xxx xxxx | Z | |
| COMF f, d | Дополнение f (Логическое "НЕ") | 1 | 00 1001 dfff ffff | Z | 1,2 |
| DECF f, d | Декремент f | | 1 | 00 0011 dfff ffff | Z | 1,2 |
| DECFSZ f, d | Декремент f, пропуск если "0" | 1(2) | 00 1011 dfff ffff | 1,2,3 | |
| INCF f, d | Инкремент f | 1 | 00 1010 dfff ffff | Z | 1,2 |
| INCFSZ f, d | Инкремент f, пропуск если "0" | 1(2) | 00 1111 dfff ffff | 1,2,3 | |
| IORWF f, d | Логическое "ИЛИ" (W or f-> d) | 1 | 00 0100 dfff ffff | Z | 1,2 |
| MOVF f, d | Пересылка (f — > W) | 1 | 00 1000 dfff ffff | Z | 1,2 |
| MOVWF f | Пересылка (W — >f) | 1 | 00 0000 1fff ffff | ||
| NOP | Пустая операция | 1 | 00 0000 0xx0 0000 | ||
| RLF f, d | Сдвиг влево через перенос | 1 | 00 1101 dfff ffff | С | 1,2 |
| RRF f, d | Сдвиг вправо через перенос | 1 | 00 1100 dfff ffff | C | 1, 2 |
| SUBWF f, d | Вычитание (f - W -> d) | 1 | 00 0010 dfff ffff | C,DC,Z | 1, 2 |
| SWAPF f, d | Обменять полубайты f | 1 | 00 1110 dfff ffff | 1,2 | |
| XOFWF f, d | Исключающее "ИЛИ" (W or f-> d) | 1 | 00 0110 dfff ffff | Z | 1,2 |
| БИТОВЫЕ КОМАНДЫ | |||||
| BCF f. b | Обнулить бит b в f | 1 | 01 00bb bfff ffff | 1,2 | |
| BSF f, b | Установить бит b в f | 1 | 01 0lbb bfff ffff | 1,2 | |
| BTFSC f, b | Тест бита b в f, пропуск если "0" | 1(2) | 01 l0bb bfff ffff | 3 | |
| BTFSS f, b | Тест бита b в f пропуск если "1" | 1(2) | 01 11bb bfff ffff | 3 | |
| КОМАНДЫ С КОНСТАНТАМИ И КОМАНДЫ УПРАВЛЕНИЯ | |||||
| ADDLW к | Сложение (k + W — > W) | 1 | 11 111x kkkk kkkk | C,DC,Z | |
| ANDLW к | Логическое "И" (k and W -> W) | 1 | 11 1001 kkkk kkkk | Z | |
| CALL k | Вызов подпрограммы k | 2 | 10 0kkk kkkk kkkk | ||
| CLRWDT - | Обнулить WDT | 1 | 00 0000 0110 0100 | TO,PD | |
| GOTO k | Переход к адресу k | 2 | 10 1kkk kkkk kkkk | ||
| IORLW k | Логическое "ИЛИ" (К or W -> W) | 1 | 11 1000 kkkk kkkk | Z | |
| MOVLW k | Пересылка (k — > W) | 1 | 11 00xx kkkk kkkk | ||
| RETFIE - | Возврат из прерывания | 2 | 00 0000 0000 1001 | ||
| RETLW k | Возврат с константой | 2 | 11 01xx kkkk kkkk | ||
| RETURN - | Возврат из подпрограммы | 2 | 00 0000 0000 1000 | ||
| SLEEP - | Останов | 1 | 00 0000 0110 0011 | TO,PD | |
| SUBLW k | Вычитание (k - W -> W) | 1 | 11 110х kkkk kkkk | C,DC,Z | |
| XORLW k | Исключающее "ИЛИ" (k or W->W) | 1 | 11 1010 kkkk kkkk | Z | |
Примечание
1: Если регистр ввода/вывода изменяется, то исходным значением будет величина, считанная
непосредственно с контактов.
2: Если команда модифицирует регистр TMR0, то предделитель будет обнулен.
3: Если в счетчик программ записывается адрес (т.е. условие проверки «истина»), то команда
выполняется за два цикла. Второй цикл выполняется как команда NOP.
Рекомендуемая структура программы
для микроконтроллера PIC16F877
list p=16f877 ; директива определения процессора
#include <p16f877.inc> ; подключение списока определений переменных
;процессора
__CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF
; '__CONFIG' - директива определения битов конфигурации процессора
;***** определение переменных
w_temp EQU 0x70 ; переменная для сохранения текущего состояния при
;обработке прерывания
status_temp EQU ; переменная для сохранения текущего состояния при
;обработке прерывания
;**********************************************************************
ORG 0x000 ; размещение команд по адресу сброса процессора
clrf PCLATH ; очистка старших бит счетчика команд
goto main ; переход на основную программу
ORG 0x004 ; размещение команд по вектору прерывания
;процессора
movwf w_temp ; сохранение текущего значения регистра W
movf STATUS,w ; сохранение текущего значения регистра
;STATUS
movwf status_temp
; прерывающая программа
movf status_temp,w ; восстановление значения регистра STATUS
movwf STATUS
swapf w_temp,f
swapf w_temp,w ; восстановление значения регистра Ц
retfie ; возврат в основную программу
main
; основная программа
END ; директива конца программы
Описание лабораторного стенда
Принципиальная схема системы на базе микроконтроллера PIC16F877 показана на рис. 6. Генератор тактовых импульсов для микроконтроллера PIC16F877 (микросхема DD1) реализован на кварцевом резонаторе ZQ1 и двух конденсаторах С1 и С2. Для запуска контроллера при подаче питающего напряжения к входу MCLR (ножка 1) подключено питание через ограничивающий резистор R1. К ножке 40 МК подключен светодиод D1 и ограничивающий резистор R2.
Рис. 6. Принципиальная схема системы на базе микроконтроллера PIC16F877
В состав лабораторного комплекса также входит персональный компьютер с установленной на нем средой разработки программ для контроллеров Microchip MPLAB и программатор PICPROG для программирования микроконтроллера (рис.7).
Рис. 7. Лабораторный комплекс
Постановка задачи
Необходимо разработать и протестировать программу для микроконтроллера, обеспечивающую мигание светодиода D1 с частотой 1 Гц.
Порядок выполнения работы
1. Разработка алгоритма работы МК.
2. Написание программы на языке ассемблера в соответствии с алгоритмом.
3. Набор и отладка программы в среде MPLAB.
4. Программирование МК с помощью программатора.
5. Проверка корректности работы программы в системе.
Отчет
Отчет включает в себя:
1. Постановку задачи.
2. Описание системы.
3. Алгоритм программы.
4. Текст программы.
Литература
1. Основы микропроцессорной техники. /Новиков Ю.В., Скоробогатов П.К. – М:ИНТУИТ.РУ «Интернет-Университет Информационных технологий», 2003. – 440 с.
2. Ульрих В.А. Микроконтроллеры PIC16C7X.Семейство восьмиразрядных КМОП микроконтроллеров с аналого-цифровым преобразователем.-СПб.:Наука и техника,2000.-253 с.
3. PIC16F87x: Однокристальные 8-миразрядные FLASH CMOS микроконтроллеры компании Microchip Technology Incorporated. – http://www.microchip.ru, 2002 – 184 с.
4. MPLAB IDE: Интегрированная среда разработки для микроконтроллеров PICmicro компании Microchip Technology Incorporated. - http://www.microchip.ru, 2001 - 156 c.
5. MPMASM: Руководство пользователя. http://www.microchip.ru, 2000 – 62 с.
Содержание
| Введение | 3 |
| Цель работы: | 3 |
| Характеристика микроконтроллера PIC16F877 | 3 |
| Аппаратная составляющая микроконтроллера | 4 |
| Архитектура микроконтроллера | 4 |
| Организация памяти команд | 7 |
| Организация памяти данных | 8 |
| Периферийный модуль – порт ввода/вывода PORTB | 10 |
| Программная составляющая микроконтроллера | 11 |
| Система команд микроконтроллера | 11 |
| Рекомендуемая структура программы для микроконтроллера PIC16F877 | 14 |
| Описание лабораторного стенда | 15 |
| Постановка задачи | 16 |
| Порядок выполнения работы | 16 |
| Отчет | 17 |
| Литература | 17 |