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
Lesezeichen