Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 03.11.2007, 07:30 Titel: unter DOS Druckkopf bewegen Epson LQ-1070+ / ESC/P2 |
|
|
Hallo,
habe da folgendes einfaches Programm erstellt:
Code: |
mov ax, @data
mov ds, ax
M1: mov ah, 1
int 21h
mov dl, al ; 1 Zeichen einlesen
cmp dl, 0dh ; ENTER-Taste damit sicher ein CR/LF ausgelöst wird
je M2
cmp dl, 35 ; #-Zeichen
je M3
mov ah, 5 ; das eine eingegebene Zeichen, wenn nicht # ist an Drucker senden
int 21h
jmp M1
m2: mov dl, 10
mov ah, 5
int 21h
mov dl, 13
mov ah, 5
int 21h
jmp M1
M3: mov ah, 4ch
int 21h
end
|
es funktioniert soweit, nur kann ich den Druckkopf nicht nach rechts/links bewegen (Leertaste/Rücktaste geht nicht, normale Abstände während dem Schreiben erscheinen aber normal; mit den Pfeiltasten kommen M und O's )
Wie kan ich den Drucker dazu bewegen, sich an eine bestimmte Stelle in Echtzeit manöverieren zu lassen?
Ein ähnliches Programm welches je eine Zeile ausdruckt habe ich in VB für DOS erstellt, dort tritt das Problem auch auf dass keine Abstände VOR dem Text erscheinen(habe einfach LPRINT verwendet). _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 03.11.2007, 19:14 Titel: |
|
|
Könntest du vllt dabeischreiben, mit welcher FB-Version du das kompilieren(und ausführen) kannst?
Gut, die linuxer wissen sowieso auf den ersten Blick, daß ein Programm, das Dos-Funktionsaufrufe benutzt(Int 21H) nicht unbedingt für linux gemacht ist..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 03.11.2007, 23:14 Titel: |
|
|
das assembliere ich mit masm (in FB kann man ja keinen int auslösen)  _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 03.11.2007, 23:20 Titel: |
|
|
c.m.obrecht hat Folgendes geschrieben: | das assembliere ich mit masm (in FB kann man ja keinen int auslösen)  | ..wunderschön
1. hatte ich mir das gedacht^^
2. wollte ich das mal geschrieben sehen
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Georgp24
Anmeldungsdatum: 30.06.2006 Beiträge: 81 Wohnort: Ahlen
|
Verfasst am: 04.11.2007, 17:45 Titel: |
|
|
Man kann den Drucker in einen Hex Dump Modus stellen, dann sieht man, welche Zeichen er überhaupt empfängt.
Es gibt auch ESC-Codes um den Druckkopf eine bestimmte Zahl von Schritten nach links oder rechts zu bewegen. Ein Blick ins Handbuch gibt da Aufklärung.
Gruß
Georg |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 05.11.2007, 23:25 Titel: |
|
|
..ich dachte nicht daran dass man nicht darauf kommen könnte dass das Programm mit MASM assembliert werden muss
Das Space-Zeichen 20h wird ganz normal gesendet (habe ich über den Hexdump erfahren); jedoch wird der Druckkopf erst dorthin bewegt nachdem ein anderes Zeichen eingegeben wurde oder das Zeilenende erreicht.
Habe nun im Handbuch nachgeschaut; es sind ESC-Befehle angegeben (Druckposition um n Einheiten verschieben) doch ich verstehe nicht, wie ich die an den Drucker senden soll; wenn ich esc @ irgendwas übergebe (habe nun auch FUnktion 17h statt 21h probiert, gleicher Effekt) wird logischerweise diese Zeichenfolge ausgedruckt (oder?); wie muss ich da vorgehen?
Danke  _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
Georgp24
Anmeldungsdatum: 30.06.2006 Beiträge: 81 Wohnort: Ahlen
|
Verfasst am: 06.11.2007, 20:20 Titel: |
|
|
Im Hexdump sieht man natürlich alle Zeichen auf dem Papier. Ansonsten wird der Drucker den mit ESC eingeleiteten Befehl ausführen und diesen Steuerbefehl nicht aufs Papier bringen.
Nur bei längeren, falsch eingegebenen Steuerbefehlen kommt ein Teil davon aufs Papier, da der Drucker den Befehl nicht versteht und dann einen Teil der Zeichen wieder als Druckdaten interpretiert.
Gruß
Georg |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 07.11.2007, 08:58 Titel: |
|
|
Da muss ich also wirklich Vorgehen in der Art von: Code: |
mov dl, "ESC Befehl....."
mov ah, 5
int 21h
... |
? _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
Georgp24
Anmeldungsdatum: 30.06.2006 Beiträge: 81 Wohnort: Ahlen
|
Verfasst am: 07.11.2007, 09:26 Titel: |
|
|
In dl kann man immer nur ein Zeichen übergeben.
Mehrere Zeichen gibt man besser mit ah=40h aus.
Gruß
Georg |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 07.11.2007, 18:12 Titel: |
|
|
Habe einmal die System Calls nachgeschaut:
INT 21h/AH=01h:
http://www.ctyme.com/intr/rb-2552.htm
INT 21h/AH=05h:
http://www.ctyme.com/intr/rb-2557.htm
=> demnach willst Du einfach Bytes an den Parallelport unter reinem DOS senden. Für so etwas kannst Du Dir Assembler sparen, würde ich in QB mit z.B.
Code: | OPEN "lpt1" FOR OUTPUT AS 1
PRINT#1, CHR$(Zeichen%);
CLOSE 1 |
viel einfacher lösen, da kannst Du auch ganze Strings übergeben.
Sonst zum Thema Druckkopf positionieren: Musst Du schon als etwas Firmware-Spezifisches betrachten, d.h. Du kannst nur Deinem Drucker im Normalfall sagen, was aufs Papier muss, aber nicht unbedingt das "Wie" beeinflussen. Betrachte den Drucker wie ein Angestellter im Malergewerbe - Du befiehlst ihm als Chef nur, welche Fläche er mit welcher Farbe anstreichen muss. Ob der Arbeiter nun horizontal oder vertikal pinselt, ist seine Sache! Schlussendlich zählt nur das Endergebnis...
Von da her würde ich das Vorhandensein eines solchen Low-Level-Druckerkommandos als etwas sehr Herstellerspezifisches betrachten. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 08.11.2007, 07:40 Titel: |
|
|
Ja stimmt natürlich, da kann man nur je ein Zeichen übergeben; aber der String wäre tatsächlich "esc XXXX....."?
Es soll nicht weiter stören wenn das Programm nur mit dem LQ-1070 läuft. _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
Georgp24
Anmeldungsdatum: 30.06.2006 Beiträge: 81 Wohnort: Ahlen
|
Verfasst am: 08.11.2007, 19:43 Titel: |
|
|
Wenn der Drucker ein ESC bekommt, wartet er erstmal die folgenden Zeichen ab ob sich ein gültiger Steuerbefehl ergibt. Wenn ja wird dieser ausgeführt und die Zeichen nicht ausgedruckt.
Gruß
Georg |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 09.11.2007, 21:33 Titel: |
|
|
Also ich versuchte gerade feolgendes:
Code: |
escsend: mov dl, "e"
mov ah, 5
int 21h
mov dl, "s"
mov ah, 5
int 21h
mov dl, "c"
mov ah, 5
int 21h
mov dl, "v"
mov ah, 5
int 21h
mov dl, 1
mov ah, 5
int 21h
|
mit dem Ergebnis "escvescv" auf dem Papier  _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 09.11.2007, 21:56 Titel: |
|
|
Ein ESC an den Drucker zu senden bedeutet das du den Zahlenwert 27d (1Bh) an den Drucker sendest. Dies leitet einen Escape Steuerbefehl ein.
Schau mal hier nach: http://de.wikipedia.org/wiki/ESC/P _________________ Man kann sich öfter als zweimal im Leben halb tot lachen.
Zuletzt bearbeitet von E-P-S am 09.11.2007, 21:59, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Georgp24
Anmeldungsdatum: 30.06.2006 Beiträge: 81 Wohnort: Ahlen
|
Verfasst am: 09.11.2007, 21:57 Titel: |
|
|
ESC ist das ASCII-Zeichen 1B hex oder 27 dezimal.
Gruß
Georg |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 10.11.2007, 07:34 Titel: |
|
|
Ach so! Danke So etwas dachte ich mir doch. _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
|