Кафедра вычислительной техники СПб ГУ ИТМО Лабораторная работа 2 “Система команд. Подпрограммы” Цель работы: Знакомство с особенностями системы команд микропроцессоров PIC18Fxxx. Написание и использование подпрограмм. Задание Написать программу на языке ассемблера, которая вычисляет сумму элементов массива (беззнаковые целые числа). Размерность элементов массива 1 байт (8 бит). Размерность переменной для хранения суммы элементов 2 байта (16 бит). Значение элементов массива задается в тексте программы. Программа должна выводить массив переменных и их сумму в последовательный порт в виде текстовых строк. Например, так: или так: 145 + 86 + 154 + 57 = 442 145 + 86 + 154 + 57 = 442 Запись символа в последовательный порт и действия по преобразованию числа в строку текста оформить в виде подпрограмм. Тщательно изучите систему команд микропроцессора. Любая задача может быть выполнена множеством различных способов. Попробуйте создать несколько вариантов программы, используя разные комбинации команд. Создайте вариант программы занимающей в памяти минимальный объем. Пояснения Блок объявления переменных располагается в начале программы и выглядит следующим образом: CBLOCK 0x010 Number1 Counter Number2:3 ENDC Параметр “0x010” указывает начальный адрес, с которого переменные будут располагаться в памяти (SRAM). Через двоеточие после имени переменной указывается количество байт отводимое для нее в памяти, если количество не указано, то в памяти выделяется 1 байт. В данном случае под переменные Number1 и Counter отведено по 1 байту, а под Number2 – 3 байта. Так как объявляемые таким образом переменные располагаются в памяти данных (энергозависимая память), инициализировать переменные нужно "вручную" в тексте программы. Пример (инициализация переменной Number1): movlw D’68’ ;WREG = 68 -1- Кафедра вычислительной техники СПб ГУ ИТМО movwf Number1 ;Number1 = 68 D’xx’ – означает десятичную константу. По умолчанию все константы считаются шестнадцатеричными. Если переменную нужно обнулить, лучше использовать одну команду: clrf Counter ;Counter = 0 Структура подпрограммы: SubProg: ;имя подпрограммы <тело подпрограммы> return ;выход из подпрограммы Для вызова подпрограмм используются команды call и rcall. call SubProg1 rcall SubProg2 Для возврата из подпрограммы используются команды return и retlw NN Так как данный микропроцессор не поддерживает стек данных, то для передачи параметров в подпрограмму используются переменные в памяти (глобальные переменные). Программа должна завершаться бесконечным циклом, либо строиться таким образом, чтобы она работала по бесконечному алгоритму (так же как и программа из лабораторной работы 1). Преобразование числа в строку текста: 1. Разделить число на 10. 2. Получить очередной символ прибавив к остатку от деления код символа ‘0’. 3. Проверить частное на равенство нулю. Если не ноль перейти к п. 1. Если ноль преобразование закончено. Символы числа будут вычисляться начиная с младших разрядов. Пример: Число: 243 Порядок вычисления символов: ‘3’, ‘4’, ‘2’. Так как в данном микропроцессоре (PIC18F458) отсутствуют команды деления, эту операцию нужно реализовать самостоятельно. Литература. 1. Microchip PIC18FXX8 Data Sheet. 2. MPASM Assembler Help. 3. Стенд SDK-5.0. Руководство пользователя. -2-