Консультация № 188559
27.12.2015, 16:37
0.00 руб.
0 3 1
Программа CompModel некого Жмакина
Задание: Вывод на дисплей трех текстов, хранящихся в памяти, с задержкой
Используемые ВУ: Дисплей, таймер
Пояснение: Первый текст вводится сразу при запуске программы, второй – через 15 с, третий – через 20 с после второго
Два решения
1. Текст программы с программным анализом флагов готовности ВУ.
2. Текст программы с обработчиком прерывания.

Обсуждение

давно
Посетитель
7438
7205
05.01.2016, 02:48
общий
это ответ
Здравствуйте, emicent.lollipop!
Даю программу с обработчиком прерывания.
По адресу 50 необходимо записать блок параметров, который задает, когда, где и что выводить на дисплей
Каждый параметр состоит из 3 полей:
1) времени таймера, через сколько должен сработать следующий параметр
2) позиции на дисплее, вычисляется, как 16*строка+колонка
3) сама строка в коде ASCII, заканчивается нулем
Все параметры идут подряд. Для последнего параметра поле времени таймера можно оставить равным 0, т.к. оно не нужно.
Например, можно задать такой блок параметров:
15,1,49,50,51,52,0,20,17,65,66,0,0,33,57,0
Тогда выведутся:
В первой строке со второй колонки текст "1234" и запустится таймер на 15 секунд
Через 15 секунд во второй строке со второй колонки текст "AB" и запустится таймер на 20 секунд
И наконец, через 20 секунд в третьей строке со второй колонки текст "9"
После чего таймер остановится и произойдет останов
[code lang=asm h=200]
RDI #101 ;команда очистки
out 11 ; дисплея
RDI #102 ; команда сброса ошибки
out 11 ; для дисплея
RDI #11 ; команда разрешения МВУ
out 11 ; для монитора с автоувеличением адреса

RD #25 ; адрес обработчика прерывания таймера
WR 102 ; запишем по адресу обработчика IRQ2
RDI #101 ; команда сброса ошибки
out 20 ; сброс таймера 1

rdi #50 ;адрес блока параметров
wr r1 ;будем адресовать через регистр r1
rdi #3 ;количество выводимых строк (параметров)
wr r0 ;в регистре r0
call pr ;отработаем один параметр из блока

EI ; разрешаем прерывания от устройств (таймера)

LOOP: ; пустой цикл
NOP ; вся работа в прерывании
NOP
JMP LOOP

INT2: ;прерывание таймера 1
call pr ;отработаем очередной блок параметров
IRET ;выход из прерывани

pr: ;в r1 адрес параметра
rd @r1+ ;первое значение загружаем в таймер
out 21
rdi #50111 ; команда управления на таймер 1:
;коэффициент деления предделителя 50
;направление счета - декремент
;разрешение прерывания от таймера
;включаем таймер
out 22 ;команда таймеру

rd @r1+ ;второе значение - позиция вывода на дисплее
out 13
loop1:rd @r1+ ;далее строка
jz next ;заканчивается нулем
out 10 ;выводим на дисплей
jmp loop1
next:jrnz r0,prret ;параметры закончились?
rdi #0 ;да - останавливаем таймер
out 22
hlt ;и останов
nop
nop
prret: ;не закончились - выход и ждем срабатывания таймера
ret
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
400364
1
25.05.2016, 20:04
общий
Не понятно как сделать блок параметров,напишите пример плиз
давно
Посетитель
7438
7205
26.05.2016, 08:42
общий
Адресаты:
Цитата: dreamcatcher
напишите пример плиз

Вы читать умеете?
Цитата: Лысков Игорь Витальевич
Каждый параметр состоит из 3 полей:
1) времени таймера, через сколько должен сработать следующий параметр
2) позиции на дисплее, вычисляется, как 16*строка+колонка
3) сама строка в коде ASCII, заканчивается нулем
Все параметры идут подряд. Для последнего параметра поле времени таймера можно оставить равным 0, т.к. оно не нужно.
Например, можно задать такой блок параметров:
15,1,49,50,51,52,0,20,17,65,66,0,0,33,57,0
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа