Volkov / ЛР_3 Шутова Д.С
.docxНижегородский государственный технический университет им. Р.Е. Алексеева
Кафедра «Компьютерные технологии в проектировании и производстве»
Лабораторная работа №3
Изучение директив и логических команд микроконтроллера и препроцессора
выполнил:
студент группы М13-КТЭС
Шутова Д.С
проверил:
Волков М.Б
Нижний Новгород
2014 г.
Цель работы: Изучить директивы и логически команды компилятора MPASM. Разработать алгоритм решения проблемы, в соответствии с которым, используя систему команд, написать программу для МК.
Задание: Разработать программу вычисления двух значений Y*1 и Y*2, по уравнениям. Неизвестные уравнений соответствуют трём переменным, где 1 – день рождения, 2 – месяц рождения, 3 – год рождения. Продемонстрировать разработанную программу в интегрированной среде разработки.
Выполнение:
Вариант №6:
-
Краткое описание команд и директив:
Директивы бывают:
-
директивы контроля;
-
#define;
-
#include;
-
#undefine;
-
constant;
-
end;
-
equ;
-
org;
-
processor;
-
radix;
-
set;
-
variable;
-
-
директивы условий;
-
else;
-
endif;
-
endw;
-
if;
-
ifdef;
-
ifndef;
-
while;
-
-
директивы управления данными;
-
__badram;
-
__badrom;
-
__config;
-
__idlocs;
-
__maxram;
-
__maxrom;
-
cblock;
-
da;
-
data;
-
db;
-
de;
-
dt;
-
dw;
-
endc;
-
fill;
-
res;
-
директивы формирования листинга;
-
error;
-
errorlevel;
-
list;
-
messg;
-
nolist;
-
page;
-
space;
-
subtitle;
-
title
-
-
директивы управления макросом;
-
endm;
-
exitm;
-
expand;
-
local;
-
macro;
-
noexpand;
-
-
директивы управления объектным файлом.
-
access_ovr;
-
bankisel;
-
banksel;
-
code;
-
code_pack;
-
extern;
-
global;
-
idata;
-
idata_acs;
-
pagesel;
-
pageselw;
-
udata;
-
udata_acs;
-
udata_ovr;
-
udata_shr;
-
-
Алгоритм
Начало
W=27 X1=W
A1:
W=02 X2=W
A2:
W=92 X3=W
A3:
W=0
W=~X1 n_X1=W
W=~X3 n_X3=W
W=X2 W=n_X1&W
W=n_X3&W
tmp1=W
t6_1=W
W=~tmp1
tmp1=W
A4:
A5:
A6:
A7:
W=0
W=~X2 n_X2=W
W=X1 W=n_X2&W
W= X3&W
tmp2=W
t6_2=W
W=~tmp2
tmp2=W
A8:
A9:
A10:
W=0
W=tmp1 W=tmp2|W
Y1=W
A11:
A12:
W=0
A13:
W=t6_1 W=t6_2||W
Y2=W
A14:
Конец
-
Код программы
; Lab_3
;-------------------------------
#include<p16F877.inc> ; подключение заголовочного файла
; для МК PIC 16F877
;-------------------------------
X1 EQU 0x20 ;
X2 EQU 0x21 ;
X3 EQU 0x22 ;
n_X1 EQU 0x23 ;
n_X2 EQU 0x24 ;
n_X3 EQU 0x25 ;
t6_1 EQU 0x28 ;
t6_2 EQU 0x29 ;
t_val_1 EQU 0x2A ;
t_val_2 EQU 0x2B ;
Y1 EQU 0x2C ;
Y2 EQU 0x2D ;
;-------------------------------
org 0x00 ; начало памяти программ (ПП)
goto main ; произвести переход на метку 'main',
; с которой начнётся выполнение
; основной программы
org 0x05 ; адрес начала размещения кода в ПП
;-------------------------------
main:
;------------------------------- ; загрузка данных в переменные
A1: movlw D'27' ; W = 27
movwf X1 ; X1 = W
A2: movlw D'02' ; W = 02
movwf X2 ; X2 = W
A3: movlw D'92' ; W = 92
movwf X3 ; X3 = W
;------------------------------- ;
A4: clrw ; W = 0
A5: comf X1,W ; W =~ X1
movwf n_X1 ; n_X1 = W
A6: comf X3,W ; W =~ X3
movwf n_X3 ; n_X3 = W
;------------------------------- ; расчёт 1-ой части 1-го уравнения
A7: movfw X2 ; W = 02
andwf n_X1,W ; W = n_X1 & X2
andwf n_X3,W ; W = W & n_X3
movwf t6_1 ; t6_1 = W
comf t6_1,W ; W =~ t6_1
movwf t_val_1 ; t_val_1 = W
;------------------------------- ;
A8: clrw ; W = 0
;------------------------------- ; расчёт 2-ой части 1-го уравнения
A9: comf X2,W ; W =~ X2
movwf n_X2 ; n_X2 = W
A10: movfw X1 ; W = 27
andwf n_X2,W ; W = W & n_X2
andwf X3,W ; W = W & X3
movwf t6_2 ; t6_2 = W
comf t6_2,W ; W =~ t6_2
movwf t_val_2 ; t_val_2 = W
;------------------------------- ;
A11: clrw ; W = 0
;------------------------------- ; расчёт общей части уравнения
A12: movfw t_val_1 ; W = t_val_1
iorwf t_val_2,W ; W = t_val_1 | t_val_2
movwf Y1 ; Y1 = W
;------------------------------- ;
A13: clrw ; W = 0
;------------------------------- ; расчёт 2-го уравнения
A14: movfw t6_1 ; W = t6_1
xorwf t6_2,W ; W = t6_1 || t6_2
movwf Y2 ; Y2 = W
goto main
END
-
Листинг программы
??????
-
Вывод