реклама на сайте
подробности

 
 
> Программирование принтера
tangar
сообщение May 8 2005, 07:58
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 12-03-05
Пользователь №: 3 297



Есть такая задача - надо управлять принтером (довольно старым матричным Epson FX-1000)

по средствам параллельного порта, используя толь ко базовый адрес LPT порта и два его

регистра (к примеру - 378h, 379h и 37Ah). Можно ли это сделать вообще, и если да, то как

(я пробовал отправлять на 378h бит информации, потом выставлять регистр и строб данных

на 37Ah, примерно так же, как и при работе с ЖК индикатором, но принтер символ не

печатал).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
tangar
сообщение May 9 2005, 19:47
Сообщение #2





Группа: Новичок
Сообщений: 10
Регистрация: 12-03-05
Пользователь №: 3 297



Достаточно ли команды типа outport(378h,data_byte); (в старом С++), или на до еще отправлять данные на служебные регистры?

С комбинацией типа:
int control=lpt+2;
void wd(int data)
{
outport(control,0x07);
delay(10);
outport(lpt,data);
delay(10);
outport(control,0x06);
delay(10);
outport(control,0x07);
delay(10);
outport(control,0x05);
delay(10);
}

принтер ничего не печатает и даже отказывается переходить в состояние готовности. (После отключения от компа - готов тут же.)
Go to the top of the page
 
+Quote Post
vvs157
сообщение May 9 2005, 22:22
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(tangar @ May 9 2005, 22:47)
outport(control,0x05);
delay(10);
}

*


Во-первых ноги разъема 1(STROBE), 14(CRLF), 17(SELECT) - инвертированые, то есть когда туда пишется 1 на выходе будет 0. Нога 16 (INIT)- неинвертированая.
Во-вторых дергать ногу CRLF не надо! Она не имеет никакого отношения к посылке СИМВОЛОВ CR+LF на принтер.

Поэтому

void outLPT(char data) {

char by=0xC;
outport(control,by);
outport(lpt,data);
by|=1;
outport(control,by);
by&=0xFE;
outport(control,by);
}

outLPT(data);
outLPT(0xD); // по этой команде идет печать и возврат каретки
outLPT(0xA); // переход на новую строку


Ширина строба - не менее 0.5 мкс, поэтому delay(10) - 10 мс - это слишком
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 03:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01313 секунд с 7
ELECTRONIX ©2004-2016