; ; kleine Unterprogrammbiblitohek zur Ansteuerung der seriellen Schnittstelle ; Betrieb mit Polling, Schnittstellenparameter wie vom Tasking Monitor ; vorgegeben! ; Bibliotheken können mit dem Kommando $INCLUDE "lib.asm" im Quelltext ; eingebunden werden. ;------------------------------ ; Unterprogramm zum Versenden eines Zeichens ; Übergabe: Akku -- zu versendenes Zeichen ; Stackbedarf: 2 Byte ;------------------------------ putChar: jnb TI, $ ; warte auf TI=1 clr TI ; lösche TI mov SBUF, A ; Zeichen versenden ret ;-------------------------------- ; Versenden Zeichenkettenkonstanten ; Übergabe: dptr -- Zeiger auf den Beginn der Zeichenkette ; verwendete Unterprogramme: putChar ; Stackbedarf: 6 (2 Rückkehradr., 2 Bytes gesicherte Daten) ;-------------------------------- putString: push psw ; Sichern von Registern, die verändert werden push acc putString1: clr a movc a, @a+dptr ; nächstes Zeichen aus String lesen inc dptr ; Zeiger auf String erhöhen jz putStringEnd ; Zeichen 0? ... dann beende Strignausgabe acall putChar ; ... sonst Zeichen ausgeben sjmp putString1 ; ... und wiederhole putStringEnd: pop acc ; Wiederherstellen der Registerinhalte pop psw ret ;--------------------------------------------- ; versenden eines Bytes als 2 hex.-Ziffern ; Eingabewert: Akku (zu versendendes Byte) ; Ausgabe auf SIO z.B. für ACC=a0 -> A0 ;--------------------------------------------- putByte: push acc ; sichere Acc push acc ; Eingabewert 2mal sichern anl a, #0f0h ; unteres Halbbyte maskieren swap a ; Halbbytes tauschen acall putHalbbyte ; ASCII-Zeichen für oberes Halbbyte senden pop acc ; Eingabewert wiederherstellen anl a, #0fh ; oberes Halbbyte löschen acall putHalbbyte ; ASCII-Zeichen für unteres Halbbyte senden pop acc ; .. und Acc wiederherstellen ret ;--------------------------------------- ; Halbbyte als ASCII-Zeichen versenden ; Eingabe: Akku (Wertebereich 0 bis 0fh ;-------------------------------------- putHalbbyte: push ACC clr c ; Carry löschen subb a, #0ah pop ACC jc putHalbbyte_zahl add a, #55 ; A...F erzeugen acall putChar ret putHalbbyte_zahl: add a, #48 ; 0...9 erzeugen acall putChar ret ;----------------------------------------------- ; Unterprogramm für den Empfang eins Zeichens ; Rückgabewert: Akku (empf. Zeichen) ;----------------------------------------------- getChar: jnb RI, $ ; Warte, bis RI=1 ist clr RI ; loesche RI mov A, SBUF ; lese Empfangspuffers ret