ZX-Ревю 1995 №6 1995 г.

Читатель - читателю - Подключение принтера к порту #FE.


ЧИТАТЕЛЬ - ЧИТАТЕЛЮ

Подключение принтера к порту #FB

(С) Юрий Пехов,

г.Ярославль, 1995.

В предыдущей своей статье (см. ZX-PEBI0-95, N5), я попытался осветить некоторые аспекты адаптации программного обеспечения к работе с распространенным интерфейсом "ZX-Lprint 3", которым, в частности, оснащены Spectrum-coB-местимые компьютеры "Пентагон-128" .

Однако, достаточно частым случаем является полное отсутствие каких-либо аппаратных расширений компьютера. Разумеется, можно разместить где-либо в адресном пространстве параллельный порт (например КР580ВВ55А) и привязать принтер к нему. Пожалуй, в случае параллельного протокола обмена, это будет единственным разумным выходом. А вот если принтер имеет последовательный интерфейс, можно использовать возможности стандартной конфигурации компьютера. Я имею в виду порт ввода/вывода с адресом #FE.

Но вначале вкратце рассмотрим особенности передачи одного байта через интерфейс RS-232C по протоколу DTR (существует более сложный в реализации протокол XON/XOFF, но он для связи с принтерами используется крайне редко и мы его здесь рассматривать не будем).Для связи компьютера и внешнего устройства используются два сигнала; TxD (Transmitted Data) - передаваемые данные и DTR (Data 'Terminal Ready) - готовность приемника данных. Данные передаются асинхронно, то есть между передачей двух байт может быть сколь угодно долгая пауза. Перед передачей каждого байта происходит опрос готовности принтера и, если на линии DTR установлен высокий логический уровень, передача дальнейшей информации приостанавливается. Во время паузы на выходе TxD устанавливается высокий логический уровень (т.н. активная пауза). Ниже приведена временная диаграмма передачи одного байта по протоколу DTR со следующими параметрами: передача 8 бит без контроля на четность/нечетность с двумя стоп-битами.

ЧИТАТЕЛЬ-ЧИТАТЕЛЮ

ние числа в этой ячейке, можно

IM

2

добиться требуемой скорости восп

EI

роизведения .

Продолжение

Приведенная выше программа за

;программы.

нимается только тем, что воспро

изводит музыку. Однако практичес

INTER PUSH

HL

Процедура

ки бывает нужно, чтобы на фоне

PUSH

DE

обработки

непрерывно играющей музыки прог

PUSH

BC

прерываний

рамма занималась бы чем-нибудь

PUSH

AF

второго рода.

еще. В этом нам поможет следующая

PUSH

IX

программа, представляющая собой

CALL

40006

Проигрывание

процедуру обработки... правильно,

POP

IX

одного кварка.

прерываний в режиме IM 2.

POP

AF

POP

BC

ORG 30000

POP

DE

CALL 40000

POP

HL

DI ;Инициали-

3P

#38

Продолжение

LD HL,INTER ;зация.

;процедуры

обработки прерывания.

LD (#66FF),HL;

LD A,#66 ;Вектор

к *

*

LD I,A ;прерываний.

nor. 1 — Г

яог. О

llllll DO 01 D2 D3 D4 D5 ОБ 07

lllllll

2 стол -бита

Этот протокол поддерживается большинством типов принтеров. Введение в протокол обмена контроля четности усложнит программу поддержки обмена и, в нашем случае, не улучшит надежности связи. Передача 8 а не 7 бит оправдана даже в том случае, если принтер поддерживает только 7-битные кодовые таблицы (КОИ-7), так как позволяет без особых проблем печатать графику. Введение двух а не одного стоп-бита призвано несколько улучшить синхронизацию (из-за разброса величины тактовой частоты у разных экземпляров компьютеров скорость передачи может отклоняться от номинальной). При этом на принтере надо выбрать режим с одним стоп-битом, что, по идее, должно предотвратить накопление временной ошибки. Скорость передачи определяет длительность одного бита и рассчитывается по формуле:

t (сек) = 1 / BaudRate (бод).

Для скорости 2400 бод длительность одного бита составит 417 микросекунд.

Внимательно рассмотрев битовую карту порта ввода #FE, можно заметить, что биты 5 и 7 нигде не используются, хотя, как правило, на плате компьютера в качестве порта установлен 8-битный регистр. Поэтому мы можем смело рассчитывать на бит 7 в качестве сигнала DTR (готовность принтера). В качестве сигнала TxD (передаваемые данные) можно использовать бит 3 порта вывода #FE (выход на магнитофон), так как одновременная работа с принтером и выгрузка данных на магнитофон маловероятна.

Конечно, можно было бы и в качестве входа готовности использовать соответствующий бит магнитофонного порта с минимальными доработками схемы, но это, как говорится, дело вкуса.

Теперь, определившись с портами ввода/вывода, мы можем рассмотреть конкретную реализацию подключения принтера к порту #FE. Для примера возьмем схему распространенного компьютера "Ленинград-!". Порт вывода в этом компьютере выполнен на микросхеме К555ТМ9 (D39), сигнал TapeOut формируется делителем R16, R17, подключенным к 5 выводу микросхемы- Значит сигнал передачи данных на принтер следует снимать непосредственно с этого вывода. Порт ввода выполнен на двух мультиплексорах К555КП11 (D37 и D38). Бит 7 порта (14 вывод микросхемы D38) следует подключить к сигналу DTR (готовность принтера).

Здесь я хотел бы сделать небольшое лирическое отступление. Очень большое число пользователей ZX-Spectrum имеют в наличии относительно недорогие принтеры К6311(13) фирмы ROBOTRON различных модификаций (например СМ6329-01М), которые, как правило, укомплектованы адаптером последовательного интерфейса. Чаще всего это является поводом для расстройства и, насколько я знаю, одно время даже существовал такой бизнео - замена адаптеров RS-232C (V24, ИРПС) на адаптеры CENTRONICS (ИРПР). Так вот, уважаемые собратья по несчастью, для вас, и для всех других пользователей, у которых последовательный интерфейс в принтере сделан на базе микросхемы Z80 SIO в конце статьи я попытаюсь показать способ подключения принтера по TTL уровням. Если же не забираться в адаптер, тогда придется дополнительно собирать преобразователь TTL-сигна-лов в соответствующие сигналы интерфейса (+/- 12 В или токовая пеТля 20 мА). При этом нужно внимательно сосчитать количество инверсий сигналов. В своих дальнейших рассуждениях я буду исходить из тоГо, что низкий TTL уровень на входе микросхемы порта соответствует готовности принтера, а высокий TTL уровень на выходе микросхемы порта соответствует передаче единицы. Напомню лишь, что логической единице соответствует напряжение -12 Вольт при обмене по RS-232C и наличие тока в цепи при обмене по токовой петле (ИРПС)»

ЧИТАТЕЛЬ-ЧИТАТЕЛЮ

Ч

И T A T E Л b

- ЧИТАТЕЛЮ

Ниже приводится

листинг прог-

вставленные для обеспечения

необ-

раммы передачи одного байта в

ходимой задержки. Программа

расс-

порт #FE описанным

выше способом.

читана на скорость передачи

! 2400

Символом "*"

отмечены команды,

бод.

SEND

ЕХ

AF,AF'

;сохраняем передаваемый байт

;Ожидание готовности принтера и проверка на

;Break

WAIT

LD A,#OA

;красный Border и "1" на

OUT

(#FE),A

;выходе TxD (пауза)

LD

A,#7F

;чтение порта #7FFE

IN

A,(#FE)

RRA

;выделение 0 бита (если он

;равен 0, нажат "пробел")

JR

C,NOBR

RET

;возврат,со сброшенным

;флагом CY при прерывании

;печати

NOBR

BIT

6,A

;проверка готовности

JR

NZ,WAIT

;принтера

;Передача одного байта

EX

AF,AF•

;восстановление байта

RRCA

;циклический сдвиг байта

RRCA

;вправо на 3 бита - нулевой

RRCA

;бит становится пятым

DI

;запрет прерываний

PUSH

AF

;сохранение байта

LD

L, #09

;счетчик бит

LD

B, #FF

; *

LD

C,#FE

;Border черный,

LD

A,1

; передача стартового бита.

OUT

(C),A

;Border синий

CALL

DELAY

;задержка

LD

DE,#0000

t *

;Побитная передача - цикл

LOOP

POP

AF

;восстановление байта

RRCA

;сдвиг вправо - передаваемый

;бит на 4 позиции

PUSH

AF ;

сохранение байта

DEC

L ;

;уменьшение счетчика бит

JR

Z,FULL ;

;переход если все биты

;переданы

NOP

; *

AND

#10 1

;выделение 4 бита

LD

D,A ;

;его сдвиг на 3 позицию

RRC

D ;

;и передача

OR

D

AND

#08

OUT

(C),A

CALL

DELAY

JR

LOOP

FULL

POP

AF ;

; передача 2 стоповых бит

LD

A,#08

OUT

(C),A

CALL

DELAY

CALL

DELAY

ЧИТАТЕЛЬ - ЧИТАТЕЛЮ

;выход с включенным CY

задержки (скорость 2400 бод)

HL

DE

HL,#0034 DE,#0001

HL,DE N2,DELI

DE HL

scf

EI

RET

;подпрограмма

DELAY PUSH PUSH LD LD SCF CCF

DELI SBC JP NOP POP POP RET

Разумеется, программу можно изменить для другой скорости передачи. Для этого следует изменить подпрограмму задержки DELAY.

Описанную выше процёдуру можно встраивать в программы (например ARTSTUDIO) или, изменив соответствующим образом информацию о потоках и каналах, использовать для распечатки листингов.

Теперь о Тюдключении принтеров типа Robotron СМ6329 и подобных. Последовательный порт в этих принтерах выполнен на базе микросхемы U856 (аналог Z80 SIO производства ГДР - Господи, время-то как летит!), причем используется канал А этой микросхемы. Для того чтобы подключить этот порт по TTL уровням нужно:

- аккуратно перерезать печатный проводник, соединяющий вход RxDA микросхемы U856 (12 ножка) с выходом преобразователя уровня




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
АMБАPКАНТА by Дж.P.P.Тoлкин - Илюрamбaр (Ilurambar) или mирoвыe cтeны oгрaждaют вecь mир...
Вступление - Хочу огорчить всех тех, кто жаждал увидеть Iris Ultrademo.
Балаган" N 2 - подборка анекдотов и приколов из HUMOR и COMMONPLACE.
Реклама - Реклама и обьявления.
Scene news - пополнение в Power of Sound Web Team. Unbeliever не покинул спектрум. Новости от Optical Brothers и Delirium Tremens. Nemo выпустил книгу об IS-Dos. Результаты ASCii. Распалась группа "Proxima Centauri". Triumph ROXX!

В этот день...   21 ноября