Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Volkov / ЛР_4 Шутова Д.С

.docx
Скачиваний:
12
Добавлен:
28.03.2015
Размер:
28.85 Кб
Скачать

Нижегородский государственный технический университет им. Р.Е. Алексеева

Кафедра «Компьютерные технологии в проектировании и производстве»

Лабораторная работа №4

Функции (подпрограммы) и макроопределения

выполнил:

студент группы М13-КТЭС

Шутова Д.С

проверил:

Волков М.Б

Нижний Новгород

2014 г.

Цель работы: Изучить написание и работу подпрограмм и макроопределений для МК. Закрепить полученные знания на практике.

Задание: Разработать программу вычислений по условиям лабораторной работы № 3, оформив расчёты уравнений в виде функций для Y1, Y2, и макроопределений для Y1, Y2. Продемонстрировать работу в интегрированной среде.

Выполнение:

  1. Расчётные значения для Y1, Y2:

Вариант №6:

  1. Алгоритм:

L1:

L2:

L3:

Конец

Load_Data

W=27 X1=W

W=02 X2=W

W=92 X3=W

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

f_call_Y1

f_call_Y2

W=t6_1 W=t6_2||W

Y2=W

B1:

B9:

Конец

B2:

W=tmp1 W=tmp2|W

Y1=W

Конец

W=~X2 n_X2=W

W=X1 W=n_X2&W

W= X3&W

tmp2=W

t6_2=W

W=~tmp2

tmp2=W

B3:

B4:

B5:

B6:

B7:

W=0

W=0

B8:

Начало

W=0

W=0

W=0

Конец

Load_Data

f_call_Y1

f_call_Y2

W=0

m_call_Y1

m_call_Y2

W=0

A9:

A2:

A3:

A4:

A5:

A6:

A7:

A8:

A1:

A10:

  1. Программа:

; Lab_4

;-------------------------------

#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 ;

m_Y1 EQU 0x2E ;

m_Y2 EQU 0x2F ;

;-------------------------------

org 0x00 ; начало памяти программ (ПП)!

goto main ; произвести переход на метку 'main',

; с которой начнётся выполнение

; основной программы

org 0x05 ; адрес начала размещения кода в ПП

;---------------------------------------------;

;------ Функции программы ----------;

;---------------------------------------------;

Load_Data:

L1: movlw D'27' ; W = 27

movwf X1 ; X1 = W

L2: movlw D'02' ; W = 02

movwf X2 ; X2 = W

L3: movlw D'92' ; W = 92

movwf X3 ; X3 = W

return ; команда возврата

;---------------------------------------------;

f_call_Y1:

;---------------------------------------------; расчёт 1-ой части 1-го уравнения

B1: comf X1,W ; W =~ X1

movwf n_X1 ; n_X1 = W

B2: comf X3,W ; W =~ X3

movwf n_X3 ; n_X3 = W

B3: 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

B4: clrw ; W = 0

B5: comf X2,W ; W =~ X2

movwf n_X2 ; n_X2 = W

B6: 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

B7: clrw ; W = 0

B8: movfw t_val_1 ; W = t_val_1

iorwf t_val_2,W ; W = t_val_1 | t_val_2

movwf Y1 ; Y1 = W

;----------------------------------------------;

return ; команда возврата

;----------------------------------------------;

f_call_Y2:

;----------------------------------------------; расчёт 2-го уравнения

B9: movfw t6_1 ; W = t6_1

xorwf t6_2,W ; W = t6_1 || t6_2

movwf Y2 ; Y2 = W

return ; команда возврата

;---------------------------------------------;

;------ Макросы программы ----------;

;---------------------------------------------;

m_call_Y1 MACRO m_X1,m_X2,m_X3

D1: comf m_X1,W ; W =~ m_X1

movwf n_X1 ; n_X1 = W

D2: comf m_X3,W ; W =~ m_X3

movwf n_X3 ; n_X3 = W

D3: movfw m_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

;----------------------------------------------;

D4: clrw ; W = 0

;----------------------------------------------; расчёт 2-ой части 1-го уравнения

D5: comf m_X2,W ; W =~ m_X2

movwf n_X2 ; n_X2 = W

D6: movfw m_X1 ; W = 27

andwf n_X2,W ; W = W & n_X2

andwf m_X3,W ; W = W & m_X3

movwf t6_2 ; t6_2 = W

comf t6_2,W ; W =~ t6_2

movwf t_val_2 ; t_val_2 = W

D7: clrw ; W = 0

;----------------------------------------------; расчёт общей части уравнения

D8: movfw t_val_1 ; W = t_val_1

iorwf t_val_2,W ; W = t_val_1 | t_val_2

movwf m_Y1 ; m_Y1 = W

;---------------------------------------------;

ENDM ; директива окончания

;---------------------------------------------;

m_call_Y2 MACRO m_t6_1,m_t6_2

;---------------------------------------------; расчёт 2-го уравнения

D9: movfw m_t6_1 ; W = m_t6_1

xorwf m_t6_2,W ; W = m_t6_1 || m_t6_2

movwf m_Y2 ; m_Y2 = W

ENDM ; директива окончания

;---------------------------------------------;

main:

;------- вызовы функций ---------------;

A1: call Load_Data ; загрузка данных

A2: clrw ; W = 0

A3: call f_call_Y1 ; расчёт 1-го уравнения с помощью

функции

A4: clrw ; W = 0

A5: call f_call_Y2 ; расчёт 2-го уравнения с помощью

функции

A6: clrw

;---------------------------------------------;

;------- работа макросов ---------------;

A7: m_call_Y1 X1,X2,X3 ;

A8: clrw ; W = 0

A9: m_call_Y2 t6_1,t6_2 ;

A10: clrw ; W = 0

;---------------------------------------------;

goto main

END

  1. Вывод;

Соседние файлы в папке Volkov