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

       movlw d’20’; Запишем 20 в W

       movwf h’3F’; и скопируем его в регистр h’3F’ — счетчик цикла

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

LOOP

        bcf PORTA,0; Выставим на RAO НИЗКИЙ уровень

        nop ; Ждем один машинный цикл

        bcf PORTA,0; Выставим на RA0 ВЫСОКИЙ уровень

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

        decfsz h’3F’; Считаем в обратном направлении

            goto LOOP; Повторить тело цикла, если не ноль

... ...; ИНАЧЕ выйти из цикла

Первоначальный код, обрамленный комментариями в виде пунктирной линии, завершается командой декрементирования с проверкой, которая обеспечивает выход из цикла при достижении регистром h’3F’ нулевого значения. Обратите внимание на запись d’20’ — так в ассемблере явно указывается десятичное число (см. стр. 267). Эта запись эквивалентна записи h’14’, однако гораздо понятнее программисту. В теле цикла используется только одна команда nop, поскольку дополнительная задержка длительностью в один машинный цикл формируется в результате выполнения команд bcf и bsf.


∙ incfsz

Команда инкрементирования регистра данных и пропуска следующей команды при нулевом результате инкрементирует, а не декрементирует содержимое указанного регистра данных. При переходе содержимого через ноль, т. е. в ситуации h’FC’ —> h’FD’ —> h’FE’ —> h’FF’ —> h’00’, будет пропущена следующая команда. Вернемся к нашему примеру, блок-схема которого показана на Рис. 5.19. Если мы предварительно загрузим в регистр h’3F’ число -20 (h’FC’) и заменим команду decfsz h’3F’,f командой incfsz h’3F’,f, то получим тот же самый результат. Только в этом случае счет будет осуществляться в прямом направлении, а не в обратном.



Рис. 5.19. Формирование 20 импульсов на выводе RA0


Примеры


Пример 5.1

Напишите программу для декрементирования 2-байтной переменной, расположенной в памяти данных по адресам h’26’ (старший байт) и h’27’ (младший байт). Помните, что команда decf не влияет на состояние флага переноса/заема.

Решение

Сначала напишем алгоритм:

1. ЕСЛИ младший байт в регистре h’27’ равен нулю, то декрементировать старший байт.

2. ВСЕГДА декрементировать младший байт.

Одна из возможных реализаций этого алгоритма приведена в Программе 5.5. При увеличении разрядности исходного значения до n байт оно будет обрабатываться точно так же — от младшего байта к старшему, с декрементированием как (n + 1) — го, так и n-го байта при равенстве нулю n-го байта.


Программа 5.5. Декрементирование 2-байтного числа

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

Z equ 2; Бит 2 — флаг нуля

MSB equ h’26’; Старший байт

LSB equ h’27’; Младший байт


       movf LSB,f; Младший байт равен кулю?

       btfcs STATUS,Z; ЕСЛИ нет, ТО пропускаем декрементирование старшего байта


       decf MSB,f; ИНАЧЕ декрементируем старший байт

       decf LSB,f; Всегда декрементируем младший байт


Пример 5.2

В некоторых ранних моделях компьютеров для представления двоично-десятичных чисел использовался сдвоенный пятизначный код (bi-quinary). Этот код представляет собой 7-битный код, в котором при любой комбинации битов будут установлены только два из них:



Хотя такое представление чрезвычайно неэффективно (используется только 10 из 128 возможных комбинаций), его преимуществом является чрезвычайная простота обнаружения ошибок. Напишите программу для проверки корректности числа, представленного в сдвоенном пятизначном коде и находящегося в регистре h’20’ (полагаем, что старший бит равен нулю). В случае ошибки в рабочий регистр необходимо записать h’FF’, иначе — h’00’.

Решение

Все, что нам нужно сделать, — это распознать ситуацию, когда число установленных битов будет больше или меньше двух. Исходя из этого, составим перечень задач:

1. Подсчитать количество единичных битов в числе.

2. Обнулить W.

3. Если полученное число не равно двум, загрузить h’FF’ в W для индицирования ошибки.

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

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

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

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

Сид Катцен

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

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

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

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

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

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