| 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, 06: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, 18: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, 22: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, 22: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, 16: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, 22: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, 19: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, 07: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, 08: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: 2531 Wohnort: Hofen SH (Schweiz)
  | 
		
			
				 Verfasst am: 07.11.2007, 17: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, 06: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, 18: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, 20: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, 20: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, 20:59, insgesamt einmal bearbeitet | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		Georgp24
 
 
  Anmeldungsdatum: 30.06.2006 Beiträge: 81 Wohnort: Ahlen
  | 
		
			
				 Verfasst am: 09.11.2007, 20: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, 06:34    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ach so! Danke   So etwas dachte ich mir doch. _________________ ...längre blomstre gamle nord... | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		 |