;****************************************************************************** ; ; Unterprogramme zur Displayansteuerung ; ;****************************************************************************** ;------------------------------------------------------------------------------ ; Allgemeine Konstanten ;------------------------------------------------------------------------------ XPIXEL .EQU 240 ; X-Aufl”sung YPIXEL .EQU 128 ; Y-Aufl”sung XBYTES .EQU XPIXEL/8 ; Anzahl Bytes in X-Richtung XMAX .EQU XPIXEL-1 YMAX .EQU YPIXEL-1 ;------------------------------------------------------------------------------ ; Kontroller Konstanten ;------------------------------------------------------------------------------ CURPTRSET .EQU 021h ; Cursor Pointer Set OFFREGSET .EQU 022h ; Offset Register Set ADRPTRSET .EQU 024h ; Address Pointer Set TEXTHOME .EQU 040h ; Text Home Address TEXTAREA .EQU 041h ; Text Area Set ATTRBHOME .EQU 042h ; Attribut/Grafik Home Address ATTRBAREA .EQU 043h ; Attribut/Grafik Area Set GRAFIKHOME .EQU ATTRBHOME GRAFIKAREA .EQU ATTRBAREA MODESET .EQU 080h ; Mode Set Command: CG-ROM + Text OR Grafik DISPON .EQU 098h ; Display Mode Set: Grafik ON, Text OFF + Cursor OFF DISPOFF .EQU 090h ; Display Mode Set: Grafik OFF, Text OFF + Cursor OFF CURPATTERN .EQU 0A0h ; Cursor Pattern Set: 1 Zeile ;------------------------------------------------------------------------------ ; Makro Definitionen fr die Displayausgabe ;------------------------------------------------------------------------------ #define DISPBEF SETB CD ; Befehlsmodus fr Display #define DISPDAT CLR CD ; Datenmodus fr Display #define DISPOUTA MOVX @R0,A #define DISPINA MOVX A,@R0 #define AUTOBEGWR MOV BEFEHL,#0B0h #defcont \ LCALL BEFOUT1 #define AUTOBEGRD MOV BEFEHL,#0B1h #defcont \ LCALL BEFOUT1 #define AUTOREAD LCALL AUTORD #define AUTOWRITE LCALL AUTOWR #define AUTOENDWR LCALL AUTORESWR #define AUTOENDRD LCALL AUTORESRD #define DISPWRITE MOV BEFEHL,#0C4h #defcont \ LCALL BEFOUT2 #define DISPWRINC MOV BEFEHL,#0C0h #defcont \ LCALL BEFOUT2 #define DISPWRDEC MOV BEFEHL,#0C2h #defcont \ LCALL BEFOUT2 #define DISPREAD MOV BEFEHL,#0C5h #defcont \ LCALL BEFIN1 #define DISPRDINC MOV BEFEHL,#0C1h #defcont \ LCALL BEFIN1 #define DISPRDDEC MOV BEFEHL,#0C3h #defcont \ LCALL BEFIN1 #define SETADDRESS MOV BEFEHL,#ADRPTRSET #defcont \ LCALL BEFOUT3 #define STATUS01 MOVX A,@R0 #defcont \ JNB A.0,$-1 #defcont \ JNB A.1,$-4 #define STATUS2 MOVX A,@R0 #defcont \ JNB A.2,$-1 #define STATUS3 MOVX A,@R0 #defcont \ JNB A.3,$-1 ;------------------------------------------------------------------------------ ; initialisiert das Display: ; ; šbergabe: - ; Rckgabe: - ; ; Ver„nderte Register: A, B, DPTR ;------------------------------------------------------------------------------ DISPINIT: CLR DRST MOV A,#5 LCALL WARTEMS SETB DRST MOV A,#30 LCALL WARTEMS DISPBEF MOV DPTR,#BILDSTART MOV BEFEHL,#GRAFIKHOME ; Grafik Home Address Set LCALL BEFOUT3 MOV DPL,#XBYTES MOV DPH,#0 MOV BEFEHL,#GRAFIKAREA ; Grafik Area Set LCALL BEFOUT3 MOV BEFEHL,#MODESET ; Mode Set: CG-ROM + Text OR Grafik LCALL BEFOUT1 MOV BEFEHL,#DISPON ; Display Mode: Grafik ON, Text + Cursor OFF LCALL BEFOUT1 RET ;------------------------------------------------------------------------------ ; L”scht das Display ; ; šbergabe: - ; Rckgabe: - ;------------------------------------------------------------------------------ DISPCLR: MOV XPOS,#1 MOV YPOS,#1 MOV XSTART,#0 MOV YSTART,#0 MOV XEND,#XMAX MOV YEND,#YMAX CLR F_MUSTER MOV R7,#DEL ; Display l”schen LCALL BEREICH RET ;------------------------------------------------------------------------------ ; Setzt die Pixeladresse ; ; šbergabe: XSTART, YSTART ; Rckgabe: - ; ; Ver„nderte Register: - ;------------------------------------------------------------------------------ SETPIXADR: PUSH A PUSH B MOV A,YSTART MOV B,#XBYTES MUL AB MOV DPL,A MOV DPH,B MOV A,XSTART MOV B,#8 DIV AB ADD A,DPL MOV DPL,A MOV A,DPH ADDC A,#0 MOV DPH,A SETADDRESS POP B POP A RET ;------------------------------------------------------------------------------ ; Gibt einen 1-Byte Befehl zum Display aus ; ; šbergabe: BEFEHL = Auszugebender Befehl ; Rckgabe: - ; ; Ver„nderte Register: A ;------------------------------------------------------------------------------ BEFOUT1: STATUS01 MOV A,BEFEHL DISPOUTA RET ;------------------------------------------------------------------------------ ; Gibt einen 2-Byte Befehl zum Display aus ; ; šbergabe: A = Datenbyte; Befehl = Auszugebender Befehl ; Rckgabe: - ; ; Ver„nderte Register: A ;------------------------------------------------------------------------------ BEFOUT2: PUSH A ; Daten sichern STATUS01 DISPDAT ; Display im Datenmodus POP A ; Daten vom Stack holen DISPOUTA ; und ausgeben DISPBEF STATUS01 MOV A,BEFEHL DISPOUTA ; Befehl ausgeben RET ;------------------------------------------------------------------------------ ; Gibt einen 3-Byte Befehl zum Display aus ; ; šbergabe: DPL = Datenword lower Byte ; DPH = Datenword higer Byte ; BEFEHL = Auszugebender Befehl ; Rckgabe: - ; ; Ver„nderte Register: A ;------------------------------------------------------------------------------ BEFOUT3: STATUS01 DISPDAT ; Display im Datenmodus MOV A,DPL ; Low-Byte Daten in den A DISPOUTA ; und ausgeben DISPBEF STATUS01 DISPDAT MOV A,DPH ; High-Byte Daten in den A DISPOUTA ; und ausgeben DISPBEF STATUS01 MOV A,BEFEHL DISPOUTA ; Befehl ausgeben RET ;------------------------------------------------------------------------------ ; Liest Daten nach einen 1-Byte Befehl vom Display ein ; ; šbergabe: Befehl = Auszugebender Befehl ; Rckgabe: A = Eingelesene Daten ; ; Ver„nderte Register: - ;------------------------------------------------------------------------------ BEFIN1: STATUS01 MOV A,BEFEHL DISPOUTA ; Befehl ausgeben STATUS01 DISPDAT ; Display im Datenmodus DISPINA ; und Wert einlesen DISPBEF RET ;------------------------------------------------------------------------------ ; Schreibt ein Byte im A zum Display mittels AUTOWRITE ;------------------------------------------------------------------------------ AUTOWR: PUSH A STATUS3 POP A DISPDAT DISPOUTA DISPBEF RET ;------------------------------------------------------------------------------ ; Liest ein Byte vom Display mittels AUTOREAD ;------------------------------------------------------------------------------ AUTORD: STATUS2 DISPDAT DISPINA DISPBEF RET ;------------------------------------------------------------------------------ ; Beendet den AutoWRITE Modus ; ; Ver„nderte Register: A ;------------------------------------------------------------------------------ AUTORESWR: STATUS3 SJMP AUTORESET ;------------------------------------------------------------------------------ ; Beendet den AutoREAD Modus ; ; Ver„nderte Register: A ;------------------------------------------------------------------------------ AUTORESRD: STATUS2 AUTORESET: MOV A,#0B2h DISPOUTA RET