Полный список команд смотрите в таблице 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 |