![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Задача: Требуется узнать готов ли принтер к приему данных. Принтер подключен к параллельному порту с базовым адресом Base = $378. Линия внешнего интерфейса для устройства опрошена BUSY. Написать на языке Паскаль.
BUSY = SR[7]; готов = SR[7] = 0;
не готов = SR[7] = 1;
Вариант1 :выделение по маске
var s: byte;
Begin
s: = port [Base + 1]; {S - копия SR. Выделяющая константа (маска)“1” – в старшем разряде, все остальные нули (1000’0000)}
s: = s and $80; {s =?000’0000}
if s = 0 then writeln (‘Принтер готов’) else writeln (‘Принтер не готов’);
Таким образом, можно проанализировать состояние любого разряда, а, следовательно, можно придать смысл нужный программисту любой линии внешнего интерфейса.
Вариант2: анализ знакового разряда
var G: shortint;
Begin
G: = port [Base + 1];
if G >= 0 then writeln (‘Порт готов’) else writeln (‘Порт не готов’);
GOTO...
Вариант3: использование сдвиговых операций
Расширим задачу: в случае неготовности порта – анализировать причины неготовности.
SR [7], имеет смысл сигнала BUSY.
SR [6] – {SR [6] = 1 (информация не принята, продолжать анализ)}
SR [5] – PE {SR [5] = 1 (нет бумаги)}
Будем последовательно сдвигать код и анализировать разряд, тем самым выяснять неготовность принтера.
var s: shortint;
Begin
s: = port [Base + 1];
if s >= 0 then exit;
s: = s shl 1;
if s >= 0 then {SR [6] = 1- (информация не принята, продолжать анализ)}
Begin
writeln (‘Принтер печатает’);
exit;
End;
s: = s shl 1;
if s < 0 then writeln (‘Нет бумаги’);
…..
End.
Дата публикования: 2014-11-28; Прочитано: 286 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!