Stack Pointer (SP)

Указатель стека (SP) представляет собой два 8-разрядных регистра с адресами $3E ($5E) и $3D ($5D) (рис.4.6). Для адресации всего SRAM контроллера AT90S8535 необходимо 10 разрядов, так как последний байт SRAM имеет адрес $25F. В регистре SPH биты 2-7 не используются, доступны только для чтения. По умолчанию, в них записаны нули.

Бит $3E($5E) R/W Нач.знач.                 SPH
- - - - - - SP9 SP8
R R R R R R R/W R/W
               
Бит $3D($5D)R/W Нач.знач.                 SPL
SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0
R/W R/W R/W R/W R/W R/W R/W R/W
               

Рисунок 4.6 – Указатель стека - SP

Указатель стека указывает на последнюю свободную ячейку стека. Область стека в ОЗУ должна быть задана до того, как произойдет любой вызов подпрограммы или будут разрешены прерывания. Указатель стека уменьшается на 1 при записи данных в стек командой PUSH и уменьшается на 2 при вызове подпрограммы командой CALL или обработке прерывания. Указатель стека увеличивается на 1 при выборе данных из стека командой POP и увеличивается на 2 при выполнении команд возврата из подпрограммы или обработчика прерывания (RET или RETI).

Сброс и обработка прерываний.

В AT90S8535 предусмотрено 10 источников прерываний. Эти прерывания и сброс имеют различные векторы в области памяти программ (FLASH). Каждому из прерываний присвоен отдельный бит в определенных регистрах управления. Если бит установлен в «1», и бит I регистра состояния SREG разрешает общее обслуживание прерываний, то данное прерывание будет разрешено. Например, для того, чтобы было разрешено прерывание INT0, необходимо, чтобы был выставлен бит INT0 регистра GIMSK.

Самые младшие адреса памяти программ определены как векторы сброса и прерываний от внешних источников. Полный список векторов прерываний приведен в табл.4.1. Этот список определяет и приоритет различных прерываний. Меньшие адреса соответствуют более высокому уровню приоритета. Самый высокий уровень у RESET, следующий приоритет у INT0 - внешнего запроса прерывания 0 и т.д.

Таблица 4.1

Таблица векторов прерываний.

Номер вектора Адрес Источник Описание прерывания
  $000 RESET Вывод сброса. Сброс при подаче питания и сброс от сторо­жевого таймера
  $001 INT0 Запрос внешнего прерывания 0
  $002 INT1 Запрос внешнего прерывания 1
  $003 TIMER2COMP Совпадение таймера/счетчика 2
  $004 TIMER2 OVF Переполнение таймера/счетчика 2
  $005 TIMER1 CAPT Захват таймера/счетчика 1
  $006 TIMER1 COMPA Совпадение A таймера/счетчика 1
  $007 TIMER1 COMPB Совпадение B таймера/счетчика 1
  $008 TIMER1 OVF Переполнение таймера/счетчика 1
  $009 TIMER0 OVF Переполнение таймера/счетчика 0
  $00A SPI, STC SPI: передача закончена
  $00B UART, RX Последовательный порт: прием закончен
  $00C UART, UDRE Последовательный порт: регистр данных пуст
  $00D UART, TX Последовательный порт: передача закончена
  $00E ADC Окончание преобразования АЦП
  $00F EE_RDY Готовность EEPROM
  $010 ANA_COMP Аналоговый компаратор

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: