Порядок проведения лабораторной работы. 1. Запустите MPLAB. Откройте свой проект, созданный в Лабораторной работе №1
1. Запустите MPLAB. Откройте свой проект, созданный в Лабораторной работе №1. Программа выведет сообщение о том, что шестнадцатеричный файл не был откомпилирован для данного проекта, нажмите «ОК». Откройте ваш исходный файл с расширением .asm.
2. Начните писать программу. Программа всегда начинается с директивы include, отвечающей за подключение дополнительного исходного файла. Нам необходимо подключить файл PIC16F877.inc, содержащий определения конфигурации, регистров и другой используемой информации для PIC16F877. Наберите в первой строке:
#include P16F877.inc
3. Используя директиву equ, предназначенной для присвоения значения константе, присвойте переменной Dat адрес 0x20 (форма записи шестнадцатеричного числа, аналог десятичного 32):
Dat equ 0x20 ; с адреса 20h располагаются свободные
; регистры общего назначения 1-го банка
4. Используя листинг нижеприведенной программы закончите свою программу.
#include p16f877.inc
Dat equ 0x20 ; Dat = 20h
org 0x000 ; директива org предназначена для
; установки адреса программы
goto Start ; переход на метку Start
; по команде goto
org 0x006 ; начало размещения программы в памяти
Start: bcf STATUS, RP1 ; выбор банка 0
bcf STATUS, RP0 ; памяти данных
clrf PORTB ; очистка порта В
bsf STATUS, RP0 ; выбор банка памяти данных 1
movlw b'00000000' ; настройка выводов порта В
movwf TRISB ; на вывод информации
bcf STATUS,RP0 ; выбор банка памяти данных 0
movlw 0x0F ; загрузка в аккумулятор
; выбранного числа, например W = 0Fh
movwf Dat ; пересылка числа в регистр с переменной Dat
; Dat = W = 0Fh
movf Dat, 0 ; пересылка переменной Dat в аккумулятор
movwf PORTB ; вывод аккумулятора на порт В
clrf Dat ; отчистка регистра с переменной Dat
end ; директива, указывающая на конец
; программы, необходимо ее указывать в конце
; всех программ
5. После написания программы сохраните файл командой Saveиз меню File и выполните ее компиляцию. Выберите в меню Project команду Build All, и ваша программа будет откомпилирована, на рабочее поле будет выведено окно с результатами компиляции. Если компиляция была выполнена успешно, то в окне появится надпись «Build completed successfully» (рисунок 3.10), если в процессе компиляции были обнаружены ошибки в программе, то в окне будет приведена характеристика ошибки, и в последней строке будет надпись «Build Failed» (рисунок 3.11).
Окно результатов компиляции, дает полную информацию обо всех обнаруженных ошибках. Строка включает в себя: номер ошибки, путь к файлу, в котором обнаружена ошибка, номер строки с ошибкой, и тип ошибки.
Рисунок 3.10 Окно результатов компиляции (ошибок не обнаружено)
6. Для проверки программы запустим ее в режиме симуляции. Выберите пункт Reset из подменю Run меню Debug для инициализации приложения. Следует отметить, что все команды управления симуляцией дублируются в графическом меню и функциональными клавишами (например, команде Reset соответствует клавиша F6). Счетчик команд будет установлен в ноль, в линейке состояния РС будет равен 0x00.
Рисунок 3.11 Окно результатов компиляции (обнаружены ошибки)
7. Откройте окно регистров специального назначения (РСН) Special Function Register Window с помощью графического меню. В окне указаны все РСН, с данными, содержащимися в них (в шестнадцатеричной, десятеричной, двоичной и вещественной формах). Окно регистров памяти данных File Register Windowпокажет содержимое регистров общего назначения (рисунок 3.12).
8. Для запуска программы необходимо выбрать пункт Run из подменю Debug. Но для процесса отладки более приемлемым является пункт Step, при пошаговом выполнении, каждая выполняемая строка выделяется цветом (по умолчанию черным). Вы заметите, что в окне регистров специального назначения, регистры меняют свой цвет при изменении данных, в соответствии, с выполняемыми командами ассемблера.
9. При сбросе микроконтроллера пункт RES(F6)подменюRunиз менюDebug, счётчик команд PCL(02h-РОН)переходит в состояние 00h. STATUS, TRISB, PORTB в произвольном состоянии. При осуществлении шага программы (F7),управление передаётся на ячейку 06h. Последовательно осуществляя шаги программы наблюдаем изменение содержимого PCL, изменения битов PR1(6) и PR0(5) регистра STATUS, содержимого аккумулятора W,и в конечном счёте, содержимого PORTB(06h-РCН).
10. Для остановки выполнения программы нажмите клавишу Halt.
11. Пример программы приведён: LAB-Элат \ Lab_Digital \ Mps_2\ Примеры \ dat.asm.
Рисунок 3.12 Окно регистров специального назначения и ОЗУ
Контрольные вопросы
1. Какие информационные поля может содержать программа, написанная на языке ассемблера? Каков их порядок? Какие из них являются необязательными?
2. В чем заключается отличие директивы от команды микроконтроллера?
3. Можно ли осуществить установку данных в регистр памяти без использования аккумулятора?
4. Как осуществить подключение дополнительного исходного файла к существующему, используя внутренние возможности ассемблера MPASM?
5. Почему порты А и В называют двунаправленными?
6. Как осуществить компиляцию всего проекта?
7. Какой выбран банк памяти после выполнения фрагмента программы:
DAT equ 0x51
movlw DAT
movwf STATUS
3.3 Лабораторная работа № 3
«КОСВЕННАЯ АДРЕСАЦИЯ В КОМАНДАХ ПЕРЕСЫЛКИ ДАННЫХ»
Цель работы
Изучить основные принципы косвенной адресации данных.
Краткие сведения
Пересылка данных предполагает передачу данных в направлении от источника к приёмнику. При этом источник не меняет своего содержимого. Адресация приёмника или источника может осуществляться:
1. Прямым способом, когда адрес операнда содержится в самом теле команды, например:
MOVWF STATUS ; (W)→(STATUS) или MOVF PORTB,W ; (PORTB)→(W);
2. Непосредственным способом, когда сам 8-ми битный операнд (константа) располагается в теле команды, например:
MOVLW A0h ; A0h→(W)
3. Косвенным способом, при котором адрес операнда располагается в специальном регистре косвенной адресации. Для выполнения косвенной адресации в микроконтроллерах PIC необходимо обратиться к физически не реализованному регистру INDF. Обращение к регистру INDF фактически вызовет действие с регистром, адрес которого указан в FSR.
Например: movlw 21h ; Обнуление содержимого
movwf FSR ; ячейки с адресом 21h
clrf INDF ;
Содержание лабораторной работы
В соответствии с приведённой программой реализовать заполнение константой области памяти данных.