Консультация № 198156
06.04.2020, 20:58
0.00 руб.
0 8 1
Уважаемые эксперты здравствуйте! Пожалуйста, ответьте на вопрос:

Выполняю задание Вывод содержимого заданного участка памяти на дисплей посимвольно с заданным промежутком времени между выводами символов. Программу делаю в режиме так чтобы события обрабатывались в режиме прерывания программы. Фоновая задача - пустой цикл.

Проблема следующая: зависаю в бесконечном цикле, прерывание не вызывается. Помогите пожалуйста решить проблему.


Приложение:
RD #33
WR 102
RD #80
WR 70
RD #4
WR 71
RD #2
WR 72
RD #304
WR 80
RD #49
WR 81
RD #50
WR 82
RD #51
WR 83
RD #500
ADD #500
MUL 72
DIV #16
WR 73
RD #101
OUT 11
RD #11
OUT 11
M0:RD 73
OUT 21
RDI 1111
OUT 22
EI
LOOP: NOP
NOP
JMP LOOP
TIMER:
RDI 1000
OUT 22
RD #101
OUT 20
RD 70
WR R1
RD @R1
DIV #256
MUL #256
WR R4
RD @R1
SUB R4
RET
OUT 10
RD 70
ADD #1
WR 70
RD 71
SUB #1
WR 71
JNZ M0
IRET
HLT

Обсуждение

давно
Старший Модератор
31795
6196
07.04.2020, 11:41
общий
Адресаты:
Привет!
Внимательно посмотрите на рисунок!

В первой строке Вы определяете адрес обработчика TIMER:.

Вот только у него адрес другой.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
07.04.2020, 11:51
общий
Адресаты:
И не понятно, что делает RET в обработчике, если за ним идет цикл изменеия указателя выводимого числа.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
07.04.2020, 18:28
общий
Адресаты:

Обычно CompModel'ю занимался , но что-то он пропал, а я занимался х86+ процессором.
Вот сижу на карантине, за одно и изучаю CompModel и Ваш код.
Подключил таймер и дисплей, пока только добился вывода одного нуля.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403871
4
07.04.2020, 21:46
общий
У вас что-нибудь получилось ? Заметил ноль выводиться только при первом запуске программы.
давно
Старший Модератор
31795
6196
08.04.2020, 14:09
общий
Адресаты:
Пока балуюсь с "игрушкой":
[code lang=asm];начальная установка регистров
CALL L0
;записуем начиная с "0"
RD #48
WR R3
;цикл заполнения памяти
L1:
RD R3
WR @R1+
ADD #1
WR R3
RD R2
SUB #1
WR R2
JNZ L1
;включаем дисплей
RD #11
OUT 11
RD #0
OUT 13
;возвращаем начальные установки
CALL L0
;цикд вывода на экран
L2:
RD @R1+
OUT 10
RD R2
SUB #1
WR R2
JNZ L2
HLT
;подпрограмма начальной установки регистров
L0:
RD #80
WR R1
RD #6
WR R2
RET[/code]

Суйчас думаю, как таймер подключить.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
08.04.2020, 17:11
общий
Адресаты:
Проверяйте
[code lang=asm];начальніе настройки регистров
CALL L0
;начальное значание
RD #48
WR R3
;в цикле заполняем память
L1:
RD R3
WR @R1+
ADD #1
WR R3
RD R2
SUB #1
WR R2
JNZ L1
;включаем дисплей
RD #11
OUT 11
RD #0
OUT 13
;ставим обработчик таймера
RD #23
WR 102
;начальніе настройки таймера
CALL T0
;начальніе настройки регистров
CALL L0
;разрешаем прерівания и пустой цикл
EI
L2:
NOP
NOP
JMP L2
;обработчик таймера
T1:
;останов
RDI 1000
OUT 22
;сброс
RD 101
OUT 20
;вывод одного элемента
RD @R1+
OUT 10
;уменьшаем счетчик
RD R2
SUB #1
WR R2
;если ноль останавливаем программу
JZ T2
;настраиваем таймер
CALL T0
IRET
T2:
HLT
L0:
;начальный алрес в памяти
RD #80
WR R1
;количество символов
RD #6
WR R2
RET
T0:
;задержка
RD #300
OUT 21
;запуск
RDI 1111
OUT 22
RET[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403871
4
08.04.2020, 20:25
общий
Спасибо.
давно
Старший Модератор
31795
6196
08.04.2020, 20:30
общий
это ответ
Здравствуйте, bobr!

Смотрите приложение:
[code lang=asm h=300];начальніе настройки регистров
CALL L0
;начальное значание
RD #48
WR R3
;в цикле заполняем память
L1:
RD R3
WR @R1+
ADD #1
WR R3
RD R2
SUB #1
WR R2
JNZ L1
;включаем дисплей
RD #11
OUT 11
RD #0
OUT 13
;ставим обработчик таймера
RD #23
WR 102
;начальніе настройки таймера
CALL T0
;начальніе настройки регистров
CALL L0
;разрешаем прерівания и пустой цикл
EI
L2:
NOP
NOP
JMP L2
;обработчик таймера
T1:
;останов
RDI 1000
OUT 22
;сброс
RD 101
OUT 20
;вывод одного элемента
RD @R1+
OUT 10
;уменьшаем счетчик
RD R2
SUB #1
WR R2
;если ноль останавливаем программу
JZ T2
;настраиваем таймер
CALL T0
IRET
T2:
HLT
L0:
;начальный алрес в памяти
RD #80
WR R1
;количество символов
RD #6
WR R2
RET
T0:
;задержка
RD #300
OUT 21
;запуск
RDI 1111
OUT 22
RET[/code]

Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа