- •Эрни Каспер Программирование на языке Ассемблера для микроконтроллеров семейства i8051
- •1.Что нужно знать программисту о микроконтроллерах семейства i8051
- •1.1.Общие сведения об архитектуре i8051
- •1.2.Правила записи команд микроконтроллера семейства i8051 на Ассемблере
- •1.3.Форматы и способы адресации данных
- •1.4.Форматы и способы адресации команд
- •1.5.Команды пересылки информации
- •1.6.Команды поразрядной обработки информации
- •1.7.Команды арифметических операций
- •1.8.Управляющие команды
- •2.Директивы ассемблера для микроконтроллеров семейства i8051
- •2.1.Общие понятия о процессах трансляции и компоновки
- •2.2.Обработка имен транслятором и компоновщиком
- •2.3.Директивы резервирования памяти и инициализации данных
- •2.4.Использование выражений в операндах
- •2.5.Директивы условной трансляции
- •2.6.Директивы подстановок
- •2.7.Директивы управления вводом и выводом
- •Глава 3.
- •3.Кросс-средства фирмы 2500 a.D. Software, Inc. Для семейства i8051
- •Глава 4
- •4.Программирование арифметических действий
- •4.1.Кодирование информации в микроконтроллере
- •4.2.Арифметические действия с большими числами
- •4.3.Арифметические действия с отрицательными числами
- •4.4.Контроль точности при программировании арифметических операций
- •Глава 5
- •5.Программирование вычисления функций
- •5.1.Возведение в квадрат и извлечение квадратного корня
- •5.2.Переход от десятичной системы счисления к двоичной и обратно
- •5.3.Вычисление функций при помощи таблиц
- •5.4.Вычисление обратной функции по таблице прямой функции
- •5.5.Компенсация систематических погрешностей при помощи таблиц
- •Глава 6
- •6.Программирование фильтрации сигналов
- •6.1.Особенности цифровой фильтрации сигналов
- •6.2.Программирование простейших фильтров нижних частот
- •6.3.Программирование фильтра для оценки параметров сигнала
- •6.4.Программирование медианного фильтра
- •Глава 7
- •7.Программирование взаимодействия с внешними устройствами
- •7.1.Общие вопросы взаимодействия
- •7.2.Порядок выполнения прерываний в микроконтроллерах семейства i8051.
- •7.3.Синхронизация работы программы внешним или внутренним сигналом
- •7.4.Программирование приема информации от датчиков
- •7.5.Программирование выдачи команд на исполнительные устройства
- •7.6.Программирование ввода и вывода информации для пользователя
- •8.Несколько рекомендаций о стиле программирования
- •8.1.Стиль программирования и использование ресурсов
- •8.2.Оформление исходного текста программы
- •8.3.Системы обозначений, выражения и простые подстановки
- •8.4.Применение подпрограмм и сложных текстовых подстановок
7.2.Порядок выполнения прерываний в микроконтроллерах семейства i8051.
Механизм прерываний разработан для общения вычислительных устройств с внешним миром. Прерыванием называется выполнение определенных команд не в порядке выполнения программы, а по некоторому событию, называемому запросом на прерывание. Обработка запроса на прерывание откладывается до завершения текущей команды прерываемой программы. Затем производится проверка возможности выполнения прерывания. Если данный вид прерывания разрешен, то проверяется приоритет запроса на прерывание. Если запрос пришел во время обработки прерывания с более высоким приоритетом, то его исполнение откладывается (но не отменяется). Управление приоритетами прерываний и разрешением прерываний производится программно. Команды прерывания не входят в набор команд микроконтроллера, используемых программистом. Логически они являются аналогами команды дальнего перехода к подпрограмме и передают управление на определенный адрес, заданный архитектурой микроконтроллера. Выполнение запроса на прерывание начинается с запоминания в стеке адреса той команды, выполнение которой откладывается для обработки прерывания. Затем управление передается по адресу, соответствующему виду прерывания. В эту ячейку программист должен записать первую команду программы обработки прерывания. Использование прерываний позволяет отделить программирование задач синхронизации и обработки запросов от программирования вычислительных задач.
Микроконтроллеры семейства i8051 работают не менее чем с 5 видами прерываний. Два вида прерывания производятся по внешним сигналам (INTO, INT1), два — по переполнению счетчиков (Т/С0, Т/С1) и один -по завершению приема или передачи байта через последовательный порт. Старшие модели микроконтроллеров имеют больше видов прерываний. Каждому из дополнительных видов прерываний отводится свой начальный адрес в ПЗУ, называемый по аналогии с компьютерами вектором прерывания.
Далее будут рассмотрены только примеры обработки прерывания для синхронизации работы программы при помощи внешнего сигнала и при помощи счетчиков микроконтроллера. Но ради полноты изложения приведем фиксированные адреса ПЗУ, по которым должны располагаться первые команды блоков программы с определенным функциональным назначением:
0000h ; первая команда выполняемая после включения
0003h ; первая команда обработки прерывания по INT0
000Bh ; первая команда обработки прерывания по Т/С0
0013h ; первая команда обработки прерывания по INT1
00lBh ; первая команда обработки прерывания по Т/С1
0023h ; первая команда обработки прерывания по поел, порту
Отведенное на эти команды адресное пространство (3 байт для инициализации и по 8 байт для обработки прерываний) как правило используется только для записи команд передачи управления, потому что оно слишком мало для размещения соответствующих блоков программы. Программа обработки прерывания должна заканчиваться командой возврата из прерывания. По этой команде осуществляется возврат к исполнению прерванной программы.
Разрешение на обработку прерываний осуществляется установкой в единицу соответствующих битов регистра разрешения прерывания IE (Interrupt Enable): IE.7 = EA (Enable All) все прерывания
IE.4 = ES (Enable Serial) прерывание по последовательному каналу
IE.3 = ET1 (Enable Timer 1) прерывание по таймеру 1
IE.2 = EX1 (Enable external 1) прерывание по внешнему входу 1
IE.1 = ETO (Enable Timer 0) прерывание по таймеру О
IE.0 = EXO (Enable external 0) прерывание по внешнему входу О
Запись нуля в старший бит этого регистра запрещает обработку всех прерываний, а единица в этом бите разрешает только проверку разрешений в остальных битах регистра. При прочих равных условиях приоритет имеют прерывания с меньшим номером бита. В случае необходимости можно разделить приоритеты всех сигналов прерывания на две группы при помощи записи единиц и нулей в соответствующие биты регистра приоритетов прерывания IP (Interrupt Priority):
IP.4 = PS (Priority Serial) приоритет последовательного канала
IP.3 = PT1 (Priority Timer 1) приоритет таймера 1
IP.2 = PX1 (Priority external 1) приоритет внешнего входа 1
IP.1 = PTO (Priority Timer 0) приоритет таймера О
IP.О = РХО (Priority external 0) приоритет внешнего входа О
Группа с единицами в битах приоритета проверяется в первую очередь, а группа с нулями проверяется во вторую, причем внутри группы предпочтение отдается прерыванию с меньшим номером бита. В старших моделях для управления разрешениями прерываний и их приоритетом используются биты в тех же или в дополнительных регистрах.