Одной из наиболее мощных и важных функций в микропроцессорах MCS-51, которые также иногда называют микроконтроллерами благодаря встроенным в них периферийным блокам, является обработка прерываний. Как мы уже выяснили, в большинстве процессов реального времени для правильной обработки определенных условий текущая задача должна быть приостановлена на некоторое время, произведена обработка возникшего события, и затем процессор должен вернуться к основной задаче. Для выполнения программ такого типа необходимы прерывания. Этот подход полностью отличается от метода опроса, в котором процессор должен последовательно проверять каждое устройство и спрашивать, требуется ли обработка или нет, потребляя при этом больше процессорного времени.

Прерывания полезны во многих случаях, когда процессор просто хочет продолжать выполнять свою основную работу, а другие блоки (таймеры или внешние события) обращаются к нему, когда это необходимо. Другими словами, микропроцессору не нужно постоянно контролировать таймеры, последовательную связь или внешние контакты P3.2 и P3.3. Всякий раз, когда происходит событие, связанное с этими блока, оно сообщается микропроцессору с помощью прерываний.
Прежде чем говорить непосредственно об обработке прерываний, сначала нужно понять, от чего может входить в обработчик прерываний микропроцессор серии MCS-51. Он может распознавать пять различных событий, которые приводят к прерыванию основной программы при обычном выполнении. Эти пять источников прерываний следующие:
- Прерывание по переполнению таймера 0 – TF0
- Прерывание по переполнению таймера 1 – TF1
- Внешнее аппаратное прерывание – INT0
- Внешнее аппаратное прерывание – INT1
- Прерывание порта последовательной связи – RI / TI
Также к прерываниям можно отнести прерывание по сбросу, когда на линии сброса (RESET) устанавливается высокий логический уровень. При этом процессор переходит к адресу 0000h.
Прерывания по таймеру и последовательному соединению генерируются изнутри, тогда как внешние прерывания генерируются дополнительными интерфейсными устройствами или переключателями (например, кнопками), внешне подключенными к процессору. Эти внешние прерывания могут быть инициированы по фронту или по уровню. Когда происходит прерывание, процессор выполняет процедуру обработки прерывания и выделяет место в памяти, соответствующее прерыванию, которое его разрешает. Список прерываний и соответствующих мест в памяти приведен в таблице векторов прерываний, представленной ниже.

По своей сути, таблица векторов прерываний представляет собой группу ячеек памяти, отведенных для хранения адресов подпрограмм обработки прерываний. Поэтому для каждого прерывания в памяти есть фиксированное местоположение, которое содержит адрес своей подпрограммы обработки прерываний.
Следует отметить, что вектору сброса также выделено место в памяти, но всего 3 байта, что означает, что он может содержать инструкцию перехода в место, где хранится основная программа.
Другим прерываниям выделено 8 байтов для каждого из них, поэтому в таком пространстве уже можно разместить небольшую подпрограмму обработки прерываний. Однако, если ее нужно увеличить по длине, она должна быть размещена в другом месте, а выделенные 8 байтов должны иметь код, который просто перенаправляет управление на необходимую подпрограмму обработки прерываний.
INT0 и INT1 – это внешние прерывания, которые срабатывают при появлении сигналов на линиях P3.2 и P3.3 соответственно. Они могут быть сконфигурированы как источники прерывания по низкому уровню или по срезу. А прерывание порта последовательной связи может быть настроено на запуск при передаче или получении байта во время последовательной связи.
© digitrode.ru