Прерывания

Прерывания в микроконтроллерах очень часто используются при разработке радиоэлектронных устройств, они позволяют реализовать многозадачность, то есть параллельное выполнение нескольких задач. Под прерыванием подразумевается условный переход из какой-либо области памяти программ (во время выполнения основной программы) на четко определенный адрес в этой памяти, данный адрес еще называют вектором прерываний. Векторов может быть несколько, но в микроконтроллерах PIC16 только один вектор прерываний, и это адрес в памяти программ равный 0004h. По этому адресу размещают подпрограмму обработки прерываний (обработчик прерываний). Читать далее »

Косвенная адресация

Косвенная адресация очень удобная штука, когда необходимо оперировать с большим количеством регистров, о ней я упоминал еще в первой статье, здесь же покажу, как можно применить данный вид адресации.
Для работы с косвенной адресацией используется регистр специального назначения FSR и физически не реализованный регистр INDF. Принцип работы простой, в регистр FSR записываем адрес какого-либо регистра, пусть это будет регистр с названием temp (то есть адресу этого регистра присвоено название temp с помощью директивы equ), после чего содержимое регистра temp “условно” оказывается в регистре INDF. Теперь все операции, проделанные над регистром INDF, будут выполнены и для регистра temp, на самом же деле обращение к регистру INDF вызовет действие непосредственно с регистром temp, поэтому я и употребил термин “условно”.Читать далее »

Арифметические операции. Умножение и деление

Умножение и деление
В микроконтроллерах PIC16 отсутствует аппаратный блок умножения и деления чисел, но эти арифметические операции можно реализовать программным путем.
Операцию умножения можно представить в виде многократного сложения, деление — многократным вычитанием. Например, выражение 8х3=24 равнозначно 8+8+8=24, для деления в качестве примера возьмем следующее выражение 36:10=3,6. Алгоритм деления можно представить так: 36-10-10-10-10=-4, то есть вычитаем из 36 число 10 до тех пор, пока не получим отрицательный результат. При этом результатом операции деления является количество вычитаний, но только без учета последнего вычитания, которое привело к отрицательному результату, так как я рассматриваю здесь только целочисленные операции без дробных частей. В данном примере после четырех вычитаний получаем -4, соответственно ответ равен 3, без учета последнего вычитания.Читать далее »

Бесконечное зеркало

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

Изготовить данную конструкцию несложно, потребуется обычное зеркало, а также полупрозрачное, светодиоды, ну и конструкционные материалы для того чтобы собрать все вместе.Читать далее »

Арифметические операции. Сложение и вычитание

Сложение и вычитание
Иногда при написании программ требуется выполнить простые арифметические операции с многобайтными числами. С однобайтными числами все просто, сложение и вычитание выполняются стандартными командами addwf, addlw, subwf, sublw, для многобайтных чисел придется писать небольшие подпрограммы. Я буду рассказывать только про целочисленные операции, без дробных частей.
В тексте статьи и в коде я буду использовать приставки к названиям регистров, чтобы легче разобрать старшие и младшие регистры чисел. Ограничусь четырехбайтными числами, соответствующие приставки, начиная от старшего регистра до младшего: HH, HL, LH, LL.Читать далее »

Таблица данных

Таблица данных применяется для задания большого количества констант (чисел) в памяти программ. Например, требуется получить сигнал заданной формы с помощью ШИМ или резистивного ЦАП (R-2R), для этого необходимо загнать в таблицу заранее рассчитанные коэффициенты, и считывать их через определенные промежутки времени, как это сделано в статье про регулировку яркости светодиода. Также таблица данных используется для реализации знакогенератора при выводе символов на жидкокристаллический индикатор (например, дисплей мобильного телефона).Читать далее »

Подключение кнопки к микроконтроллеру

Кнопка и микроконтроллер
Кнопку к микроконтроллеру можно подключить двумя основными способами, с подтяжкой линии порта к высокому логическому уровню или низкому через резистор, как показано на картинке ниже.
Я обычно использую первый вариант подключения, можно конечно использовать внутренние подтягивающие резисторы на входах PORTB, но мне еще не доводилось применять такой способ.Читать далее »

Директивы ассемблера, “шапка” программы

«Шапка» программы начинается с подключения специального файла с расширением INC, в виде строчки #include , где include – директива подключения дополнительного файла. Эти файлы для каждого типа микроконтроллера хранятся в папке программы MPLAB. В этих файлах адресам регистров специального назначения присвоены их названия, а также названия битов, это сделано для удобного написания программы. Если этот файл не подключать, то придется вручную присваивать соответствующие названия, иначе MPLAB выдаст ошибки.Читать далее »