
- •Программирование цифровой техники и микроконтроллеров управления
- •Алматы 2012
- •1 Микроконтроллеры в современном мире
- •1.1 Краткая история развития микроконтроллеров
- •1.2 Задачи и роль микроконтроллеров
- •2 Выполнение арифметических операций в мп
- •2.1 Системы счислений
- •2.2 Двоичная арифметика
- •2.3 Дополнительный код
- •2.4 Знаковый разряд
- •3 Регистры общего и специального назначения
- •3.1 Регистры portc и trisc
- •3.2 Регистр Status
- •3.3 Фиксированная (абсолютная) адресация
- •4 Косвенная адресация. Логика
- •4.1 Косвенная адресация
- •4.2 Логические функции
- •5 Маскирование. Стек
- •5.1 Маскирование
- •5.2 Счетчик команд
- •5.3 Стек
- •6 Конвейер и подпрограмма задержки
- •6.1 Конвейер
- •6.2 Программа задержки
- •6.3 Расчет времени задержки
- •7 Выполнение умножения и деления
- •7.1 Умножение и деление при помощи сдвига
- •7.2 Инструкции условных переходов
- •7.3 Целочисленное умножение
- •7.4 Целочисленное деление
- •7.5 Умножение на дробное число
- •8 Программирование клавиатуры. Дешифратор
- •8.1 Клавиатура
- •8.2 Фрагменты программы
- •8.3 Дешифратор
- •8.4 Компаратор
- •9 Основные элементы цифровой техники
- •9.1 Сумматор
- •9.2 Арифметико-логическое устройство
- •9.3 Бистабильные схемы
- •9.4 Триггеры и регистры
- •10 Структура микроконтроллера. Индикатор
- •10.1 Применение операций сдвига
- •10.2 Цифровой индикатор
- •10.2 Структурная схема мк
- •11 Прерывания и сторожевой таймер
- •11.1 Прерывания
- •11.2 Подсчет посетителей с помощью прерываний
- •11.3 Сторожевой таймер
- •12 Фактор времени и аналоговый мир
- •12.1 Модуль таймера tmr1
- •12.2 Применение таймера tmr1
- •12.3 Аналоговый мир
- •Приложение а Список некоторых сокращений
- •Список литературы
- •Содержание
- •050013, Алматы, Байтурсынова, 126
5.2 Счетчик команд
Счетчик команд (Program Counter — PC) используется для адресации, или указания, считываемой из памяти программ команды. Этот 13-битный регистр обычно инкрементируется после каждой выборки, функционируя как двоичный счетчик. Однако, как мы с вами увидим в следующей лекции, существует ряд команд, таких как команда goto, выполнение которых вызывает переход к другому месту в памяти программ. Соответственно, нормальное функционирование счетчика команд нарушается. Программист может также напрямую обращаться к счетчику команд через память данных.
В счетчике команд микроконтроллера PIC16F84 задействованы только младшие 10 бит (210 = 1024), поэтому число команд ограничено. Если программа попытается перейти по адресу, находящемуся вне этого диапазона, то адрес окажется «сверх памяти программ». В любом случае счетчик команд очищается при сбросе микроконтроллера, т.е. первая выполняемая команда, всегда располагается по адресу h’000’. Этот адрес называется вектором сброса.
5.3 Стек
Корректную работу основной программы и подпрограмм обеспечивает стек. В него записывают номер последней команды из счетчика команд при вызове подпрограммы. Из этой подпрограммы может быть вызвана другая подпрограмма. Чтобы, в конечном счете, вернуться обратно в основную программу, последовательность действий при возврате должна в точности соответствовать последовательности действий при входе. Это обеспечивается LIFO-структурой стека (последний пришел – первый ушел), который автоматически поддерживает произвольные вложенные последовательности, причем глубина вложенности ограничена только размером стека. В микроконтроллерах среднего семейства число уровней вложенности равно восьми. Стековый механизм также используется и для обработки прерываний. Поэтому в системах, использующих как подпрограммы, так и прерывания, глубина вложенности будет немного меньше. Этот способ настолько удобен, что практически используется во всех микропроцессорах.
Рассмотрим ситуацию, показанную на рисунке 5.1, где главная программа MP вызывает подпрограмму первого уровня P1, которая, в свою очередь, вызывает подпрограмму второго уровня P2.
Рисунок 5.1 – Вложенные подпрограммы
При вызове подпрограммы Р1 в стек записывается номер последней команды из счетчика команд, обозначим её как MPn. При вызове из подпрограммы Р1 новой подпрограммы Р2 в вершину стека записывается из счетчика команд номер последней команды, обозначим её как Р1k, а команда MPn опускается на более низкий уровень стека. При выполнении команды Return из Р2, Команда P1k переходит в счетчик команд, а команда MPn вновь поднимается на вершину стека. Подпрограмма Р1 продолжает выполняться со следующей команды после Call P2. При выполнении команды Return из Р1, Команда MPn переходит в счетчик команд, стек освобождается и основная программа продолжает работу со следующей команды после Call P1.
Поскольку стек совместно со своим указателем является частью «железа» микроконтроллера и не требует инициализации, программист должен учитывать только следующие моменты:
- вызов подпрограмм должен осуществляться с помощью команды Call;
- точка входа в подпрограмму должна быть помечена (это её имя);
- последней командой в подпрограмме должна быть команда Return или Retlw, причем, последняя используется для загрузки в рабочий регистр заданной константы L при возврате из подпрограммы.