Benutz doch einfach meine Assembler Routine, oder schau von der ab. Das ganze ist wirklich sehr einfach.

Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                 Druck-Routinen              ;;
;;                 ============                ;;
;;    (c)Sven Lissel  (svenlissel@web.de)      ;;
;;           www.Mehto.de.vu        ;;
;;                  23.07.2005                 ;;
;;                                             ;;
;; Parallel-Interface                          ;;
;; DB0-DB7:       PD0-PD7                      ;;
;; Strobe:        PB0                          ;;
;; Busy:          PC1                          ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Druck-Routine zum Drucken über ein Paralleles Kabel
;
; Achtung! Folgendes muss eingerichtet sein:

;-Stackpointer
;-PortD als Ausgang Pin0- Pin7
;-PortB als Ausgang Pin0- Pin1
;-PortC als Eingang Pin1

;Wenn der Drucker zum empfangen nicht bereit ist wird gewarten und Pin1 
;an PortB wird auf high geschaltet.(Kann auch weggelassen werden)

;Register r16 und r17 werden verwendet. r17 wird aber gesichert und wieder hergestellt.

;Das zu druckende Zeichen (oder Befehl) in r16 laden und mit "rcall drucken" routine aufrufen.





;;;;;;;;;;;;;;;;;;;;;;Befehle;;;;;;;;;;;;;;;;;;

;;;;Initalisieren:
; Muss vor dem Drucken aufgerufen werden
; aufrufen mit: "rcall drucken_init"



;;;;;Erweiterter Grafiksatz aktivieren;;;;;
; kann aufgerufen werden um erweiterte Zeichen drucken zu können
; aufrufen mit: "rcall drucken_grafiksatz"



;;;;;Puffer Drucken;;;;;
; muss aufgerufen werden wenn die gesendeten zeichen gedruckt werden sollen
; aufrufen mit: "rcall drucken_puffer" 



;;;;;Blatt ausgeben;;;;;
; Muss aufgerufen werden wenn das bedruckte Blatt ausgegeben werden soll.
; aufrufen mit: "rcall drucken_ausgeben"



;;;;;;Farbe aussuchen;;;
; Kann aufgerufen werden um die Textfarbe zu ändern
;
;;;;Farben:
;Farben werden mit Hex nummern angegeben
; 
;0x00 Schwarz
;0x01 Magenta
;0x02 Cyan
;0x03 Violett
;0x04 Gelb
;0x05 Rot
;0x06 Grün

; Zuerst muss die ausgesuchte Farbe nach r17 geladen werden.
; z.B.: ldi r17, 0x02

;Und dann nur noch "rcall drucken_farben" aufrufen



;;;;;Neue zeile;;;;
;; geht in die nächste Zeile.
;; Aufrufen mit: "rcall drucken_zeile"



;;;;;;;Routine;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Drucken ;;;;;;;;;;;;;
drucken:
push r17

;;;;;;;;;;;;;;;;
drucken_wait:			;warten is der Drucker bereit ist

sbi PortB, 1			;LED anschalten um mitzuteilen das auf den Drucker gewartet wird 

sbic PinC, 1
rjmp drucken_wait

cbi PortB, 1			;LED wieder abschalten
;;;;;;;;;;;;;;;



out PORTD, r16			;Daten an PortD anlegen

cbi PortB, 0			;Daten an PortD übernehmen (fallende Flanke)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Impulsdauer zum Daten übernehmen
;Mindestens 0,5 µs höchstens 50µs
;Bei 1Mhz r17=1 ,  bei 16 Mhz = 16 usw.

ldi r17, 2			;bei 1Mhz r17=2 ca. 6µs

loop12:
dec r17
brne loop12
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sbi PortB, 0			;Daten an PortD übernehmen ende (high setzen)


pop r17
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;; Initalisieren ;;;;;;;;
drucken_init:

ldi r16, 0x1B
rcall drucken

ldi r16, 0x40
rcall drucken

reti
;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;Erweiterter Grafiksatz aktivieren;;;;;;;;;;
drucken_grafiksatz:

ldi r16, 0x1b
rcall drucken
ldi r16, 0x36
rcall drucken

reti
;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;Puffer Drucken;;;
drucken_puffer:

ldi r16, 0x0A
rcall drucken

reti
;;;;;;;;;;;;;;


;;;;;;;;;;;;;;Blatt ausgeben;;;
drucken_ausgeben:

ldi r16, 0x0c
rcall drucken

reti
;;;;;;;;;;;;;;



;;;;;;;;;;;;;;Farbe wechseln;;;
drucken_farbe:

ldi r16, 0x1B
rcall drucken

ldi r16, 0x72
rcall drucken

mov r16, r17
rcall drucken

reti
;;;;;;;;;;;;;;


;;;;;;;;;;;;; Neue zeile ;;;;;;;;;
drucken_zeile:

ldi r16, 0x0A			;Neue Zeile
rcall drucken

reti
;;;;;;;;;;;;;

Gruß,
Mehto