Читаем PIC-микроконтроллеры. Все, что вам необходимо знать полностью

Код последней подпрограммы приведен в Программе 8.4. Эта программа практически идентична Программе 8.1. Отличие между ними заключается в замене директивы org на TEXT code и cblock на TEMP udata_ovr для распределения автоматических локальных переменных. Данные передаются в подпрограмму посредством 2-байтной глобальной переменной SQR_ROOT, которая объявлена как внешняя (место под эту переменную было выделено в файле main.asm). Имя подпрограммы SQR_ROOT опубликовано как глобальное, чтобы ее было видно из файла main.asm.

Программа 8.4. Перемещаемый исходный файл root. asm

               include "p16f627.inc"

               extern SUM; 2-байтное число (старший: младший)

TEMP udata_ovr; Автоматические переменные

I res 2; Магическое число (старший: младший)

COUNT res 1; Счетчик цикла

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

TEXT code

SQR_ROOT clrf COUNT; Задача 1: Обнулить счетчик цикла

                 clrf I; Задача 2: Записать 1 в магическое число

                 clrf I+1 incf I+1,f

SQR_LOOP movf I+1,w; Задача 3а: Number — I

                 subwf SUM+1,f; Вычитаем мл. байт I из мл. байта Num

                 movf I,w; Берем старший байт магического числа

                 btfss STATUS,С; Пропускаем, ЕСЛИ не было заёма

                   addlw 1; Корректируем заём

                 subwf SUM,f; Вычитаем старшие байты

                 btfss STATUS,С; ЕСЛИ нет заёма, ТО продолжаем

                    goto SQR_END; ИНАЧЕ процесс завершен

                 incf COUNT,f; Задача 3б: ИНАЧЕ инкрементируем счетчик цикла

                  movf I+1,w; Задача 3в: Увеличиваем магическое число на 2

                    addlw 2

                  btfsc STATUS,С; ЕСЛИ нет переноса, ТО продолжаем

                    incf I,f; ИНАЧЕ прибавляем перенос к старшему байту

                  movwf I+1

                  goto SQR_LOOP

SQR_END     movf COUNT,w; Задача 4: Возвращаем счетчик цикла в качестве корня

                   return

                   global SQR_ROOT

                   end

Как и во всех исходных файлах, в файле root.asm используются различные регистры специального назначения, такие как STATUS. Поэтому заголовочный файл pic 16f627.inc включается в каждый из исходных файлов. Поскольку содержимое данного файла представляет собой набор директив equ, имена, определяемые в этом файле, публикуются как абсолютные и не затрагиваются компоновщиком. По этой причине в шар-файле (Листинг 8.6) эти фиксированные идентификаторы не указываются. Однако они выводятся в файл листинга, генерируемый компоновщиком.

Чтобы связать вместе эти три исходных файла, в командной строке при запуске компоновщика перечисляются имена входных объектных файлов, имя командного файла компоновщика и имена шар-файла и файла с машинным кодом. В нашем случае эта строка будет следующей:

mplink.exe rms.lkr main.о sqr.о root.о /m rms.map /о rms.hex

Понятно, что сгенерированный шар-файл будет называться rms.mар, а файл с абсолютным машинным кодом — rms. hex.

Для документирования проекта компоновщик генерирует составной файл листинга, похожий (но более полный) на файл, текст которого приведен в Листинге 8.2, и опциональный map-файл. Как видно из Листинга 8.6, этот файл состоит из двух списков. В первом из них приводится информация по каждой секции. Список включает имя секции, тип, начальный адрес, местоположение секции (в памяти программ или памяти данных) и ее размер в байтах. Из таблицы использования памяти программ (Program Memory Usage) видно, что было использовано 63 ячейки памяти программ, включая два байта вектора сброса команды goto — или примерно 6 % от имеющегося объема.

Листинг 8.6. Содержимое map-файла rms.map, генерируемого компоновщиком

Перейти на страницу:

Все книги серии Программируемые системы

PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника

Похожие книги

Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки