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

На Рис. 6.11, а показано вычисление значения √65 описанным способом. Блок-схема этого алгоритма показана на Рис. 6.11, б, а код подпрограммы приведен в Программе 6.12. Максимальное значение счетчика цикла равно h’FF’, поскольку √(65535)~=255. Поэтому под данную локальную переменную резервируется всего один регистр h’35’. Аналогично, максимально возможное значение магического числа равно 511 (h’1FF’), поэтому под эту локальную переменную резервируется уже два регистра h’36’:h’37’. Отсюда следует, что на этапе За выполняется двухбайтное вычитание. При возникновении заема из младшего байта, к копии старшего байта I (I_Н) перед вычитанием добавляется 1. Поскольку I_Н никогда не будет больше h’01’, указанная операция никогда не вызовет переполнения. Если заем генерируется при вычитании из этого старшего байта, ЭТО означает, что результат стал меньше нуля и цикл завершается. В противном случае COUNT инкрементируется, а I умножается на 2. На самом деле значение счетчика цикла всегда равно I/2 — 1, так что переменная COUNT не нужна. Вместо этого при возврате из подпрограммы можно просто сдвинуть 16-битное значение / на один разряд вправо. При этом произойдет деление на 2, а вычитание единицы производится посредством отбрасывания бита, выдвинутого в флаг переноса (I всегда нечетное, поэтому младший бит этого числа всегда равен 1). Попробуйте реализовать этот альтернативный алгоритм.

Рис. 6.11.Нахождение корня квадратного из целого числа

Программа 6.12. Подпрограмма вычисления квадратного корня

; Глобальные объявления

STATUS equ 3; Регистр STATUS

equ 0; Флаг переноса — бит 0

NUM_H equ h’26’; Исходное значение, старший байт

NUM_L equ h’27’; Исходное значение, младший байт

; ****************

; * ФУНКЦИЯ: Вычисляет корень квадратный из 16-битного целого *

; * ПРИМЕР: Число = h’FFFF’ (65,535), Корень = h’FF’ (d’255’)*

; * ВХОД: Число в регистрах h’26’:h’27’ *

; * ВЫХОД: Корень в W. Регистры h’26’:h’27’ и h’35’:h’36’:h’37’ изменяются *

; *****************

; Локальные объявления

COUNT equ h’35’; Счетчик цикла

I_Н equ h’36’; Магическое число, старший байт

I_L equ h’37’; Магическое число, младший байт

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

SQR_ROOT clrf COUNT

; Задача 2: Инициализация магического числа единицей

                clrf I_L

                clrf I_H

                incf I_L,f

; Задача 3: ВЫПОЛНИТЬ

; Задача 3а: Number — I

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

                 subwf NUM_L,f; Вычитаем из младшего байта исходного числа

                 movf I_H,W; Берем старой байт магического числа

                 btfss STATUS,С; ЕСЛИ не было заема (С==1), ТО пропускаем

                    addlw 1; Учитываем заем

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

; Задача 3б: ЕСЛИ потеря значимости, ТО выйти

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

                    goto SQR_END; ИНАЧЕ вычисление завершено

; Задача Зв: ИНАЧЕ инкрементировать счетчик цикла

                  incf COUNT,f

; Задача 3г: Увеличить магическое число на 2

                  movf I_L,w

                  addlw 2

                  btfsc STATUS,С; Если нет переноса, ТО пропускаем

                    incf I_H,f; ИНАЧЕ корректируем старший байт

                      movwf I_L

                      goto SQR_LOOP

; Задача 4: Вернуть счетчик цикла в качестве значения корня

SQR_END movf COUNT,w; Копируем результат в W

                      return

Пример 6.6

Напишите программу умножения содержимого регистра h’46’ на десять (х2 + х8). Для хранения данных и передачи параметров воспользуйтесь программным стеком.

Решение

Объявления глобальных переменных для подпрограммы, код которой приведен в Программе 6.13, и вызывающей процедуры следующие:

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

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

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

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

Сид Катцен

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

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

Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

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

Чарльз Платт

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

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

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

Радиоэлектроника / Технические науки
Искусство схемотехники. Том 3 (Изд.4-е)
Искусство схемотехники. Том 3 (Изд.4-е)

Широко известная читателю по предыдущим изданиям монография известных американских специалистов посвящена быстро развивающимся областям электроники. В ней приведены наиболее интересные технические решения, а также анализируются ошибки разработчиков аппаратуры: внимание читателя сосредотачивается на тонких аспектах проектирования и применения электронных схем. На русском языке издается в трех томах. Том 3 содержит сведения о микропроцессорах, радиотехнических схемах, методах измерения и обработки сигналов, принципах конструирования аппаратуры и проектирования маломощных устройств, а также обширные приложения. Для специалистов в области электроники, автоматики, вычислительной техники, а также студентов соответствующих специальностей вузов и техникумов.

Пауль Хоровиц , Уинфилд Хилл

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