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







Zitieren

Lesezeichen