Порядок проведения лабораторной работы. 1. Создайте новый проект и введите программу, листинг которой представлен на рисунке 3.13
1. Создайте новый проект и введите программу, листинг которой представлен на рисунке 3.13.
2. Проанализируйте комментарии к программе.
3. Откомпилируйте проект и перейдите к режиму симуляции.
4. Откройте окна регистров специальных функций и ОЗУ данных.
5. Выполняя в пошаговом режиме (F7) проанализируйте содержимое регистров STATUS, FSR и ячеек памяти с 20h по 31h.
6. Дополните программу таким образом, чтобы после заполнения константой, программа очищала заполненную область.
#include P16F877.inc
;******************* Программа ZAPOLN *********************************
; Заполнение константой (0FFh) 32-х ячеек памяти данных с адреса 21h
;************************************************************************
TMP equ 20h ; Адрес временного регистра
; с символическим именем TMP
MASKA equ 0ffh ; значение константы
org 0x00 ; адрес начала программы
goto START ; переход на метку START
org 0x06 ; адрес размещения основной программы
START:
bcf STATUS,RP0 ; установить 0-й банк ОЗУ
bcf STATUS,RP1 ;
movlw 21h ; w = 21h, начальный адрес массива
movwf FSR ; FSR = w, содержмое регистра косвенной адресации
movlw 20h ; w = 20h
movwf TMP ; TMP = w, количество ячеек ОЗУ подлежащих очистке
NEXT:
movlw MASKA ; w = 0FFh(MASKA)
movwf INDF ; @FSR = w = FFh,
incf FSR,F ; FSR = FSR+1
decfsz TMP,F ; TMP = TMP-1
goto NEXT ; переход на метку NEXT, если TMP>0
; выход из цикла при TMP=0
end
Рисунок 3.13
Примечание:
1. Для предотвращения синтаксической ошибки при компиляции, все шестнадцатеричные числа в формате: FFh, ABh, DDh, и т.д необходимо дополнять впереди нулём. Корректными являются следующие записи: 4Fh и 0ABh. Для остальных форм записи ограничений не существует: 0xFF или h’FF’.
2. Указатель размещения результата в команде: incf FSR,1, подразумевает размещение результата в регистре FSR, а в команде: incf FSR,0 размещение результата в аккумуляторе W. Те же результаты показывают команды, использующие символические имена приёмников: incf FSR,F и incf FSR,W.
3. При повторном запуске программы меняйте значение константы MASKA для замены значений ячеек памяти данных с адреса 21h по адрес 41h.
4. Пример программы приведён: LAB-Элат \ Lab_Digital \ Mps_2\ Примеры \ zapoln.asm
Контрольные вопросы
1. Какой командой можно проверить содержимое аккумулятора W на предмет равенства его нулю?
2. Какие выводы и какого порта направлены на вход, а какие на выход после выполнения фрагмента программы:
DAT equ 0x78
bsf STATUS, 5
bcf STATUS, RP1
movlw DAT
movwf TRISB
3. Оцените содержимое аккумулятора:
clrw
movwf TMP
comf TMP,W
4. Оцените конечный адрес и содержимое массива данных после выполнения программы:
START: movlw 21h
movwf FSR
movlw 5fh
movwf TMP
clrf INDF
incf FSR,F
decfsz TMP,F
goto $-3
end
3.4 Лабораторная работа № 4
«ИЗУЧЕНИЕ КОМАНД АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ»
Цель работы
Изучить команды арифметических операций, используемых в микроконтроллере, работу с банками данных, назначение регистров специального назначения, процесс создания окон с переменными.
Краткие сведения
Данная группа команд состоит из 6 команд, позволяющих производить операции сложения и вычитания над целыми 8-ми битными числами. Местом назначения результата арифметической операции может служить как аккумулятор с регистром, так и только аккумулятор, в случае операций с константой.
Таблица 3.6 Группа командарифметических операций
Мнемокод | Описание | Флаги | |
ADDWF | f, d | Сложение W и f | C,DC,Z |
ADDWF | f, W | (f) + (W) ® (W) | |
ADDWF | f, F | (f) + (W) ® (f) | |
ADDLW | k | Сложить константу с W | C,DC,Z |
(W) + (k) ® (W) | |||
DECF | f, d | Вычесть 1 из f | Z |
DECF | f, W | (f) - 1 ® (W) | |
DECF | f, F | (f) – 1 ® (f) | |
INCF | f, d | Прибавить 1 к f | Z |
INCF | f, W | (f) + 1 ® (W) | |
INCF | f, F | (f) + 1 ® (f) | |
SUBWF | f, d | Вычесть W из f | C,DC,Z |
SUBWF | f, W | (f) - (W) ® (W) | |
SUBWF | f, F | (f) - (W) ® (f) | |
SUBLW | k | Вычесть W из константы | C,DC,Z |
k - (W) ® (W) |
Принципиально важно, что команды сложения и вычитания воздействуют на флаг переноса «С»(STATUS<0>),акоманды инкремента и декремента не воздействуют на флаг переноса «С».
Содержание лабораторной работы
Составить программу, в которой присутствует 4 переменные: a1, a2, a3, itog1. В соответствии, со своим вариантом, по данным таблицы 3.7, составить программу. Переменные заданы в десятичных числах, перед составлением программы переведите их в шестнадцатеричную систему. Итоговые значения сохранять в переменной itog1.