Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
8 МПС Обозній.doc
Скачиваний:
3
Добавлен:
13.09.2019
Размер:
318.46 Кб
Скачать

Виконання підпрограми переривання

Система переривань формує апаратний виклик (LCALL) відповідної підпрограми обслуговування, якщо вона не заблокована однією з наступних умов:

  • у цей момент обслуговується запит переривання рівного або високого рівня пріоритету;

  • поточний машинний цикл - не останній у циклі виконуваної команди;

  • виконується команда RETI або будь-яка команда, пов'язана зі звертанням до регістрів IЕ або IP

Відзначимо, що якщо прапор переривання був встановлений, але по одному із зазначених вище умов не одержав обслуговування й до моменту закінчення блокування вже скинутий, то запит переривання губиться й ніде не запам'ятовується.

По апаратно сформованому коді LCALL система переривання поміщає в стек тільки вміст лічильника команд (PC) і завантажує в нього адреса вектора відповідної підпрограми обслуговування. За адресою вектора повинна бути розташована команда безумовної передачі керування (JMP) до початкової адреси підпрограми обслуговування переривання. Якщо буде потреба вона повинна починатися командами запису в стек (PUSH) слова стану програми (PSW), акумулятора, розширника, покажчика даних і т.д. і повинна закінчуватися командами відновлення зі стека (POP). Підпрограми обслуговування переривання повинні завершуватися командою RETI, по якій у лічильник команд перезавантажується зі стека збережена адреса повернення в основну програму. Команда RET також повертає керування перерваній основній програмі, але при цьому не знімуть блокування переривань, що приводить до необхідності мати програмний механізм аналізу закінчення процедури обслуговування даного переривання

Приклад програми обробки переривання

Виведіть на індикатор цифру «1», при надходженні переривання по входу INT0 виведіть цифру «5».

org 0000h

jmp start

org 0003h ;перехід до підпрограми обробки переривань

jmp s1

org 0100h

start: mov ie,#10000001b ; дозвіл переривань INT0

mov p0,#01h

jmp start

s1: mov p0,#05h ; підпрограма обробки переривання INT0

reti ; повернення до виконання основної програми

end

Приклад програми програмування таймера

Настройте таймер на режим генератора із частотою 1 Гц (тактова частота процесора 120 кгц).

org 0000h

jmp start

org 000Bh ;перехід до підпрограми обробки переривань від таймера

jmp s2

org 0100h

start:

mov tmod,#00000001b ; настроювання режиму роботи таймера

mov ie,#10000010b ; дозвіл переривань від таймера

mov th0,#0d8h ; попередня установка таймера

mov tl0,#0f0h

mov tcon,#00010000b ; запуск таймера

st: nop

jmp st

s2: mov th0,#0d8h ; підпрограма обробки переривання від таймера

mov tl0,#0f0h ; попередня установка таймера

reti

end

Приклад програми передачі інформації через послідовний порт

На молодшому розряді семи сегментного індикатора реалізувати інкрементний рахунок. При натисканні кнопки передати вміст лічильника на другий контролер і відобразити на індикаторі. Рахунок триває при натисканні кнопки. Провести передачу даних через послідовні порти, настроєні на перший режим з тактовій частоті процесора 11,059 Мгц і швидкості передачі 9,6 Кгц.

Програма передавача.

org 0000h

jmp start

org 0003h

lcall switch ; обробка переривання від кнопки

reti

org 0023h

lcall uartper ; обробка переривання від передавача

reti

org 000bh ; обробка переривання від таймера

lcall timer

reti

org 0100h

start:

mov tmod,#00100001b ; настроювання режимів роботи таймерів

mov ie,#10010011b ; дозвіл переривань від приемопередавача,

; кнопки, таймера

mov th0,#0d8h ; попередня установка таймера 0

mov tl0,#0f0h

mov tl1,#0FDh ; попередня установка таймера 1

mov th1,#0FDh

mov tcon,#01010001b ; запуск таймерів

mov pcon,#0h ; настроювання приемопередавача

mov scon,#01000000b

s3: mov a,r2 ; відображення даних на індикаторі

anl a,#00001111b

orl a,#01110000b

mov p2,a

mov p2,#10110000b

mov p2,#11010000b

mov p2,#11100000b

jmp s3

switch: mov SBUF,r2 ; передача даних

ret

uartper: clr ti ; скидання біта, що сигналізує про закінчення передачі

ret

timer: mov th0,#0d8h ; підпрограма обробки переривань від таймера

mov tl0,#0f0h

inc r6

cjne r6,#40,s5

mov r6,#0

inc r2

cjne r2,#10,s5

mov r2,#0

s5: ret

end

Програма приймача

org 0000h

jmp start

org 0023h

lcall uartpr ; обробка переривання від приймача

reti

org 0100h

start:

mov tmod,#00100000b ; настроювання режимів роботи таймера 1

mov ie,#10010000b ; дозвіл переривань від приемопередавача

mov tl1,#0FDh ; попередня установка таймера 1

mov th1,#0FDh

mov tcon,#01000000b ; запуск таймера 1

mov pcon,#0h ; настроювання приемопередавача

mov scon,#01010000b

jmp start

uartpr: clr ri ; скидання біта прийому, що сигналізує про закінчення

mov p2,sbuf ; відображення прийнятих даних

ret

end

19

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]