Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
07.04.2023
Размер:
2.02 Mб
Скачать

Листинг программ.

Code.asm

$mod52

ORG 0h ; Начальный адрес программы (если нет прерываний)

JMP MAIN

ORG 0003h

JMP INTRO

ORG 000Bh

JMP DIVIDER

MAIN:

MOV P1, #0

MOV IE, #10000011b ; T/C0 по TF0 (переполнение) + INT0

MOV TL0, #0h ; обнуляем счетчик

MOV TH0, #0FFh ; то, что будет загружаться в TL0 при перезаполнении

MOV TMOD, #00000001b ; здесь происходит установка режима таймера

MOV TCON, #00010001b ; запуск таймера (4-й бит слева TCON.4 за это отвечает) + прерывание INT0 (последний бит TCON.0 за это отвечает)

; записываем в порт значения единицы в крайнем левом положении

; это будет эквивалетнтно четырём подряд идущим галочкам

MOV P1, #0F0h ; #11110000b = #0F0h

MOV 31h, #0F0h ; #11110000b = #0F0h

MOV A, #7 ; Имитация, что в аккумуляторе записано что-то (раздел "Acc" в окне "SFR")

LOOP:

JMP LOOP

Intro: ; обработка прерывания int0, происходящая по сигналу 0003h

MOV P1, #055h ; здесь происходит вывод решётки в порт

RETI

DIVIDER: ; обработка прерывания TF0, происходящая по сигналу 000Bh

PUSH ACC ; сохраняем значение аккумулятора

CLR TR0 ; остановка таймера

MOV A, 31h ; сдвиг вправо 4-х галочек

RR A ; сдвиг вправо 4-х галочек: здесь происходит битовый сдвиг вправо (RR -- операция битового сдвига)

MOV 31h, A ; сдвиг вправо 4-х галочек

MOV P1, A ; сдвиг вправо 4-х галочек: здесь происходит вывод решётки в порт

MOV TL0, #0h ; обнуляем счётчик

MOV TH0, #0FFh ; то, что будет загружаться в TL0 при перезаполнении

SETB TR0 ; восстанавливаем работу таймера

POP ACC ; восстанавливаем значение аккумулятора до обработки прерывания

RETI

END

Результат работы.

Рисунок 16. Инициализация 01

Рисунок 17. 02 - 0fh

Рисунок 18. 03 - 0fh

Рисунок 19. 04 - 0fh

Рисунок 20. 05 - 0fh

Рисунок 21. 06 - 055h grid dle

Рисунок 21. 07 - 0fh

Вывод

В ходе выполнения лабораторной работы были изучены режимы обработки запросов прерываний с различными приоритетами. Изначально сигналу INT0 присваивался высший приоритет, а сигналу прерывания TF0 от T/C0 – низший, что позволяло прерывать обработчик прерывания от сигнала TF0. Затем мы убедились, что программа, запускаемая от таймера/счетчика 0, не прерывается, если назначить сигналу INT0 приоритет, равный или меньше приоритета сигнала прерывания TF0 от T/C0.

Соседние файлы в папке 3 и 4 лабы
  • #
    07.04.20232.02 Mб2lab34.docx
  • #
    07.04.2023366 б0lab3_1.asm
  • #
    07.04.2023168 б0lab3_2.asm
  • #
    07.04.20232.69 Кб0lab4_1.asm