Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР_15.doc
Скачиваний:
2
Добавлен:
27.09.2019
Размер:
102.4 Кб
Скачать

3.2. Исследование прерываний от таймеров/счетчиков

Создайте в Вашей папке файл с именем int_t.asm и занесите в него программу

ORG 0000H

JMP MAIN

ORG 000BH ; Вектор прерывания от T/C0

CLR P2.6 ; Сбросить P2.6  0

RETI ; Возврат из прерывания

ORG 001BH ; Вектор прерывания от T/C1

CLR P2.7 ; Сбросить P2.7  0

RETI ; Возврат из прерывания

ORG 0030H

MAIN: MOV SP, # 38H ;Определить стек

SETB ET0 ; Разрешить прерывания от T/C0

SETB ET1 ; Разрешить прерывания от T/C1

SETB EA ; Общее разрешение прерываний

STOP: MOV P2, # 0FFH ; Вывод (P2)  FFH

JMP STOP

END

Получите файлы int_t.obj и int_t.hex. Запустите симулятор AVSIM51 и загрузите в него файл int_t.hex. Выполните программу в пошаговом режиме. Наблюдайте за установкой битов T1 и T0 в регистре разрешения прерываний En на экране симулятора. С помощью комбинации клавиш Ctrl-T переместите курсор в область таймеров (Timers на экране симулятора). Установите флаг переполнения TF0 = 1 таймера T/C0. Продолжайте выполнять программу в пошаговом режиме. Убедитесь, что при входе в подпрограмму обработки прерывания от T/C0 флаг переполнения TF0 автоматически сбрасывается, а подпрограмма обработки запроса выполняется только один раз.

Задание. Исследуйте работу МК при запросе от T/C1 по методике, аналогичной для T/C0.

3.3. Исследование приоритетов запросов прерывания

Создайте в Вашей папке файл с именем int_ext.asm и занесите в него программу

ORG 0000H

JMP MAIN

ORG 0003H ; Вектор прерывания от /INT0

CLR P2.0

RETI

ORG 000BH ; Вектор прерывания от T/C0

CLR P2.6

RETI

ORG 00013H ; Вектор прерывания от /INT1

CLR P2.1

RETI

ORG 001BH ; Вектор прерывания от T/C1

CLR P2.7

RETI

ORG 0030H ; Основная программа

MAIN: MOV SP, # 38H

SETB EX0 ; Разрешить прерывание от /INT0

SETB IT0 ; Установить прерывание по перепаду 10 сигнала /INT0

SETB EX1 ; Разрешить прерывание от /INT1

SETB IT1 ; Установить прерывание по перепаду 10 сигнала /INT1

SETB ET0 ; Разрешить прерывания от T/C0

SETB ET1 ; Разрешить прерывания от T/C1

SETB EA ; Общее разрешение прерываний

NOP

NOP

STOP: MOV P2, # 0FFH

JMP STOP

END

Получите файлы int_ext.obj и int_ext.hex. Запустите симулятор AVSIM51 и загрузите в него файл int_ext.hex.

Выполните программу в пошаговом режиме, наблюдая за изменением битов в регистрах управления прерываниями. Затем переместите курсор с помощью комбинации клавиш Ctrl-T к регистрам таймеров/счетчиков и установите флаги переполнения TF0 = 1 и TF1 = 1. После этого с помощью комбинации клавиш Alt-P переместите курсор в область портов и установите P3.2 = 0 и P3.3 = 0. Таким образом, в МК одновременно поступают 4 запроса прерывания запросы внешних прерываний /INT0 и /INT1, а также запросы прерываний от T/C0 и T/C1. Продолжите выполнение программы в пошаговом режиме. Наблюдайте за порядком обслуживания запросов прерывания по изменению выходов порта P2. Убедитесь, сто порядок обслуживания запросов прерывания соответствует изображенному на рис. 3.

Теперь исследуем возможность управления приоритетами прерываний. Допустим, что нужно присвоить запросу прерывания от T/C1 высокий приоритет, остальные запросы будут иметь низкий приоритет. С этой целью занесем в счетчик команд (PC) = 0041. Это будет адрес первой команды NOP. Перейдем в командную область симулятора и выполним две команды

Patch  Patch code

Запишем команду SETB PT1, которая устанавливает высокий приоритет для прерывания по переполнению таймера/счетчика T/C1.

Затем установите на входах P3.2 = P3.3 =1, а в счетчик команд занесите нули (PC) = 0000. Выполните программу в пошаговом режиме до момента зацикливания программы. Теперь подайте 4 запроса прерывания, установив TF0 = 1, TF1 = 1 и P3.2 = 0, P3.3 = 0. Продолжайте выполнять программу в пошаговом режиме. Наблюдайте за изменением порядка обслуживания запросов прерывания. Убедитесь, что запрос от T/C1 обслуживается первым, а остальные запросы – согласно рис. 3.

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