ВУЗ:
Составители:
Необходимо также сказать, что над регистрами ввода-вывода можно
выполнять побитовые операции, как с регистрами быстрого доступа – SBI,
CBI – формат см. в системе команд.
Организация памяти МК AT90S8535 такова:
Прерывания
Микроконтроллер AT90S8535 имеет 16 векторов прерываний. При
выполнении условия прерывания и если прерывание по этому условию
разрешено (т.е. разрешены в том числе и глобальные прерывания) АЛУ
запоминает свое состояние в стеке и после этого выполняет инструкцию,
расположенную по соответствующему адресу, т.е. из таблицы векторов
прерываний. Эта таблица находится с нулевого адреса ПП и может
содержать до 16 (по числу возможных источников прерывания) элементов –
обычно инструкций перехода на адрес (или метку) обработчика возникшего
прерывания. Обработчик (подпрограмма) прерывания должна
заканчиваться инструкцией RETI, по которой в АЛУ загружаются из стека
предыдущее состояние (которое было до возникновения данного
прерывания).
Первые 16 адресов ПП отведены под таблицу векторов прерываний.
Ниже приведен типичный фрагмент начала программы, в которой
возможны прерывания от всех 16-ти источников прерывания. Например,
если МК включили, происходит автоматический сброс по включению
питания. Сброс является одним из источников прерывания, поэтому МК
считывает инструкцию по соответствующему адресу ($000h). Там –
переход (rjmp) на метку RESET. Это обычно метка начала подпрограммы
инициализации. Инструкцию RETI в конце основной программы не ставят,
т.к. из основной программы выйти, очевидно, некуда; организуют цикл.
Если же прерывание произошло, предположим, от приемника UART, то
выполнится инструкция перехода на подпрограмму обработки приемника
UART (метка UART_RXC), в конце которой должна находиться команда
RETI (выход из прерывания).
Адрес ПП комментарий
.org $000 ; следующий блок кода будет начинаться с
адреса 0
<таблица векторов прерываний>
$000 rjmp RESET
; вектор прерывания по сбросу МК
$001 rjmp EXT_INT0
; вектор прерывания от вывода INT0
$002 rjmp EXT_INT1
; вектор прерывания от вывода INT1
$003 rjmp TIM2_COMP
; вектор прерывания по сравнению Таймера 2
$004 rjmp TIM2_OVF
; вектор прерывания по переполнению Таймера 2
$005 rjmp TIM1_CAPT
; вектор прерывания по захвату Таймера 1
$006 rjmp TIM1_COMPA
; вектор прерывания по сравнению/захвату «А»
; Таймера 1
$007 rjmp TIM1_COMPB
; вектор прерывания по сравнению/захвату «В»
; Таймера 1
$008 rjmp TIM1_OVF
; вектор прерывания по переполнению Таймера 1
$009 rjmp TIM0_OVF
; вектор прерывания по переполнению Таймера 0
$00a rjmp SPI_STC
; вектор прерывания по завершению передачи SPI
$00b rjmp UART_RXC
; вектор прерывания по завершению приема
; UART (от RX)
$00c rjmp UART_DRE
; вектор прерывания по очистке регистра UDR
; (UART)
$00d rjmp UART_TXC
; вектор прерывания по завершению передачи
; UART (от TX)
$00e rjmp ADC
; вектор прерывания по завершению АЦП-
; преобразования
$00f rjmp EE_RDY
; вектор прерывания по готовности EEPROM
$010 rjmp ANA_COMP
; вектор прерывания от аналогового
; компаратора
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »
