Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Обработка результатов ввода с параллельного порта



Задача: Требуется узнать готов ли принтер к приему данных. Принтер подключен к параллельному порту с базовым адресом 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; Прочитано: 251 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...