
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Электроэнергетический факультет
Кафедра промышленной электроники и информационно-измерительной техники
ОТЧЕТ
по лабораторной работе №2
по курсу «Отладочные средства микропроцессорных систем»
Трансляция и отладка программ сложной структуры
ОГУ 210106.65.6013 О
Руководитель
канд. техн. наук, доцент
________________ А.В. Хлуденёв
«___» _____________ 2013 г.
Исполнители
студенты группы 09ПЭ
________________ И.Г. Андреев
______________ Р.Ф. Мурсалимов
«___» _____________ 2013 г.
Оренбург 2013
Лабораторная работа №2
Трансляция и отладка программ сложной структуры
Цель работы:
Получить практические навыки выполнения трансляции и автономной отладки в среде MPLABIDE программ сложной структуры.
Задание:
Разработать и кодировать на языке Ассемблера МК PIC-microалгоритм программы вычисления арифметического выражения 81*62-43*87.
Рисунок 1 - Схема алгоритма подпрограммы mpy
Исходный текст программы приведён ниже:
1. Для первой части лабораторной работы
;Программа вычисления суммы произведений однобайтных чисел
LIST p=16F877, st=OFF
#include "P16F877.INC"
CBLOCK 0x20 ; Структура данных
Mulcnd ; множимое
Mulplr ; множитель
H_byte ; старший байт произведения
L_byte ; младший байт произведения
Count ; счетчик циклов
H_sum ; старший байт суммы
L_sum ; младший байт суммы
ENDC
ORG 0x000 ;вектор старта
goto Start
;************* Подпрограмма умножения ************
Mpy clrf H_byte
clrf L_byte
movlw 8
movwf Count
movf Mulcnd,w
bcf STATUS,C
Loop rrf Mulplr,f
btfsc STATUS,C
addwf H_byte,f
rrf H_byte,f
rrf L_byte,f
decfsz Count,f
goto Loop
retlw 0
;*************************************************
Start clrw
Main clrf H_sum ;очистить сумму
clrf L_sum
movlw 0x51
movwf Mulplr ;51h умножить на 3Eh
movlw 0x3E
movwf Mulcnd
call Mpy ;вызов подпрограммы
movf H_byte,w
movwf H_sum
movf L_byte,w
movwf L_sum
movlw 0x2B
movwf Mulplr ;2Bh умножить на 57h
movlw 0x57
movwf Mulcnd
call Mpy ;вызов подпрограммы
movf L_byte,w
bcf STATUS,C
subwf L_sum,f ;вычесть мл.байты
movf H_byte,w
subwf H_sum,f ;вычесть ст.байты
goto Main
END
Листинг программы
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 list p=16F877, st=OFF
00002 #include "P16F877.INC"
00001 LIST
00002 ; P16F877.INC Standard Header File, Version 1.00 Microchip Technology, Inc.
00373 LIST
00003 CBLOCK 0x20 ; Структура данных
00000020 00004 Mulcnd ; множимое
00000021 00005 Mulplr ; множитель
00000022 00006 H_byte ; старший байт произведения
00000023 00007 L_byte ; младший байт произведения
00000024 00008 Count ; счетчик циклов
00000025 00009 H_sum ; старший байт суммы
00000026 00010 L_sum ; младший байт суммы
00011 ENDC
00012
0000 00013 ORG 0x000;векторстарта
0000 280F 00014 gotoStart
00015 ;************* Подпрограмма умножения ************
0001 01A2 00016 Mpy clrfH_byte
0002 01A3 00017 clrfL_byte
0003 3008 00018 movlw8
0004 00A4 00019 movwfCount
0005 0820 00020 movfMulcnd,w
0006 1003 00021 bcf STATUS,C
0007 0CA1 00022 Loop rrfMulplr,f
0008 1803 00023 btfscSTATUS,C
0009 07A2 00024 addwfH_byte,f
000A 0CA2 00025 rrfH_byte,f
000B 0CA3 00026 rrfL_byte,f
000C 0BA4 00027 decfszCount,f
000D 2807 00028 gotoLoop
000E 3400 00029 retlw0
00030 ;*************************************************
000F 0103 00031 Start clrw
0010 01A5 00032 Main clrfH_sum;очиститьсумму
0011 01A6 00033 clrfL_sum
0012 3038 00034 movlw 0x38
0013 00A1 00035 movwfMulplr;38hумножитьна 18h
0014 3018 00036 movlw0x18
0015 00A0 00037 movwfMulcnd
0016 2001 00038 call Mpy ;вызовподпрограммы
0017 0822 00039 movfH_byte,w
0018 00A5 00040 movwfH_sum
0019 0823 00041 movfL_byte,w
001A 00A6 00042 movwfL_sum
001B 3025 00043 movlw0x25
001C 00A1 00044 movwfMulplr;25hумножитьна 62h
001D 3062 00045 movlw0x62
001E 00A0 00046 movwfMulcnd
001F 2001 00047 call Mpy;вызовподпрограммы
0020 0823 00048 movfL_byte,w
0021 1003 00049 bcf STATUS,C
0022 07A6 00050 addwfL_sum,f;сложитьмл.байты
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0023 1C03 00051 btfss STATUS,C
0024 2826 00052 goto Summ1
0025 0AA5 00053 incfH_sum,f
0026 0822 00054 Summ1 movfH_byte,w
0027 07A5 00055 addwfH_sum,f ;сложитьст.байты
0028 1003 00056 bcf STATUS,C
0029 30E8 00057 movlw 0xE8
002A 07A6 00058 addwfL_sum,f
002B 1C03 00059 btfss STATUS,C
002C 282E 00060 gotoSumm
002D 0AA5 00061 incfH_sum,f
002E 3003 00062 Summmovlw 0x03
002F 07A5 00063 addwfH_sum,f
0030 2810 00064 gotoMain
00065 END
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X---------------
All other memory blocks unused.
Program Memory Words Used: 49
Program Memory Words Free: 8143
Errors : 0
Warnings : 0 reported, 0 suppressed
Messages : 0 reported, 0 suppressed