- •Понятие встроенной системы
- •Системы на кристалле. Реконфигурируемые системы
- •Проектирование систем на кристалле. Ip-компоненты
- •Типы вычислительных ядер. Эксплуатационная и проектная гибкость
- •4. Типы вычислительных ядер. Эксплуатационная и проектная гибкость (продолжение)
- •5. Принципы Фон Неймана. Достоинства и недостатки
- •Cisc и risc архитектуры вычислительных ядер
- •Классические вычислительные архитектуры. Стековая архитектура
- •Классические вычислительные архитектуры. Аккумуляторная архитектура
- •Классические вычислительные архитектуры. Gpr-архитектура
- •Принципы конвейерной обработки инструкций
- •Конвейерные конфликты и способы их минимизации
- •Конвейерные конфликты и способы их минимизации (продолжение)
- •Микроконтроллеры. Основные понятия. Структура pic16f84
- •Pic16f84. Структура памяти исполняемых инструкций
- •Pic16f84. Структура памяти данных. Способы адресации
- •Pic16f84. Счётчик инструкций. Способы управления
- •Pic16f84. Встроенная память eeprom. Структура и программное управление
- •16. Pic16f84. Встроенная память eeprom. Структура и программное управление (продолжение)
- •Pic16f84. Порты ввода-вывода. Структура порта a
- •Pic16f84. Порт а. Структура разряда ra4
- •Pic16f84. Порт а. Структура разрядов ra0-ra3
- •Pic16f84. Подключение простейших устройств ввода информации к портам
- •Pic16f84. Порты ввода-вывода. Структура порта b
- •Pic16f84. Источники прерываний и механизм обработки
- •Pic16f84. Проектирование обработчиков прерываний
- •23. Pic16f84. Проектирование обработчиков прерываний (продолжение)
- •Pic16f84. Внутренняя структура и функционирование таймера
- •Pic16f84. Проектирование обработчика прерываний от таймера
- •Pic16f84. Простейшие устройства вывода информации. Семисегментные индикаторы
- •Pic16f84. Подключение и использование сдвиговых регистров
- •Pic16f84. Структура и программирование матричных клавиатур
- •Жидкокристаллические дисплеи (lcd). Основные понятия. Внутренняя организация и способы подключения
- •Внутренняя организация и функционирование контроллеров lcd
- •Программное управление lcd со стороны микроконтроллеров
- •31. Программное управление lcd со стороны микроконтроллеров (продолжение)
- •31. Программное управление lcd со стороны микроконтроллеров (продолжение)
- •Интерфейсы встроенных систем. Основные понятия и классификация
- •Интерфейс i2c. Основные понятия. Внутренняя структура портов i2c
- •Интерфейс i2c. Протокол передачи данных. Взаимодействие i2c устройств. Арбитраж мультимастерного режима
Pic16f84. Проектирование обработчиков прерываний
ОСН. ПОЛОЖЕНИЯ ПО СОСТАВЛЕНИЮ ОБРАБОТЧИКОВ ПРЕРЫВАНИЙ
Возврат из обработчика д. б.
B SF INTCON, GIE
RETURN
либо
RETFIE
Событие на линии RB0 м. б. 2 типов: фронт (0/1), спад (задний фронт, 1/0). Сущ. спец. регистр OPTION_REG (0x81). В нём 6-ой разряд INTEDG – для определения типа события.
BCF 0x81, 6 ; спад
BSF OPTION_REG, INTEDG ; фронт
Управление регистрами при обработке прерываний
Save: MOVF VAR1,0
MOVWF VAR1_tmp
Restore: MOVF VAR1_tmp,0
MOVWF VAR1
Управление аккумулятором WReg
Сохранение
Save: MOVWF W_tmp
Восстановление
Restore: MOVF W_tmp,0
При восстановлении значения аккумулятора м. б. изменён 0-вой флаг регистра статуса Z, к-рый автоматически устанавливается в единицу при нулевом значении аккумулятора. Ввиду специфики некоторых программ необх. восстанавливать и этот флаг.
Есть инструкция SWAP, которая переставляет старшие и младшие байты регистра, не влияя на Z.
WReg: Restore:
SWAPF w_tmp,1 ; 1
SWAPF w_tmp,0 ; 2
23. Pic16f84. Проектирование обработчиков прерываний (продолжение)
Предположим, что w_tmp = 0x5F.
WReg: после 1 – w_tmp = 0xF5
после 2 – Wreg = 0x5F
При этом Z флаг не изменяется.
Управление регистром STATUS
Save: SWAPF STATUS,0
MOVWF STATUS_tmp
Restore: SWAPF STATUS_tmp,0
MOVWF STATUS
Пример обработчика:
Save: BTFSS STATUS,RP0
GOTO S_BANK0
BCF STATUS, RP0
MOVWF W_tmp
SWAPF STATUS, W
MOVWF STATUS_tmp
BSF STATUS, RP0
GOTO INT_CODE
S_BANK0: MOVWF W_tmp
SWAPF STATUS, 0
MOVWF STATUS_TMP
INT_CODE:
…
Restore: SWAPF STATUS_tmp, 0
MOVWF STATUS
BTFSS STATUS, RP0
GOTO Restore_W
BCF STATUS, RP0
SWAPF W_tmp, 1
SWAPF W_tmp,0
BSF STATUS, RP0
RETFIE
Restore_W:
SWAPF W_tmp, 1
SWAPF W_tmp, 0
RETFIE
Pic16f84. Внутренняя структура и функционирование таймера
Структура таймера TMR0
TMR0 представляет собой обычный 8-битный двоичный счётчик. По умолчанию он принимает значение все нули и увеличивается сигналом c (см. рис).
Блок управления делит системную частоту Fsys на 4.
Предварительный делитель частоты (Prescaler) – устройство, которое может предварительно делить вх. частоту TMR0 на опр. коэффициент (чтобы получить частоту с соотв. значением).
Мультиплексоры (MUX) служат для выбора одного из источников синхронизации таймера, а по возможности вкл. предварительное деление исходной частоты.
XOR – программируемый инвертор, выбирает, чем синхронизировать от внешнего источника (фронт, спад).
Если T0SE = 0, то синхронизация таймера будет сигналом фронта Fx (??)
TIMER0 является программируемым модулем и содержит следующие компоненты:
8-разрядный таймер/счетчик TMR0 с возможностью чтения и записи как регистр;
8-разрядный программно управляемый предварительный делитель (предделитель);
мультиплексор входного сигнала для выбора внутреннего или внешнего тактового сигнала;
схему выбора фронта внешнего тактового сигнала;
формирователь запроса прерывания по переполнению регистра TMR0 с FFh до 00h.
Режим таймера выбирается путем сбрасывания в ноль бита T0CS регистра OPTION <5>. В режиме таймера TMR0 инкрементируется каждый командный цикл (без предделителя). После записи информации в TMR0 инкрементирование его начнется после двух командных циклов. Это происходит со всеми командами, которые производят запись или чтение-модификацию-запись TMR0 (например, MOVF TMR0, CLRF TMR0). Избежать этого можно при помощи записи в TMR0 скорректированного значения. Если TMR0 нужно проверить на равенство нулю без останова счета, следует использовать инструкцию MOVF TMR0,W.
Режим счетчика выбирается путем установки в единицу бита T0CS регистра OPTION<5>. В этом режиме регистр TMR0 будет инкрементироваться либо нарастающим, либо спадающим фронтом на выводе RA4/T0CKI от внешних событий. Направление фронта определяется управляющим битом T0SE в регистре OPTION<4>. При T0SE = 0 будет выбран нарастающий фронт.
Предделитель может использоваться или совместно с TMR0, или со сторожевым (Watchdog) таймером. Вариант подключения делителя контролируется битом PSA регистра OPTION<3>. При PSA=0 делитель будет подсоединен к TMR0. Содержимое делителя программе недоступно. Коэффициент деления предделителя программируется битами PS2…PS0 регистра OPTION<2:0>. При PSA=1 делитель будет подсоединен к сторожевому таймеру как постделитель (делитель на выходе).
При использовании предделителя совместно с TMR0, все команды, изменяющие содержимое TMR0, обнуляют предделитель. Если пределитель используется совместно с WDT, команда CLRWDT обнуляет содержимое предделителя вместе с WDT.