Hallo,

Ich habe hier auch noch ein paar Display-Routinen zum Stöbern. Die bedienen das Teil zwar im 8-bit-Modus, dafür ist ist das Warten auf das Display sauber gelöst und es gibt Ausgaberoutinen für div. Datentypen.

Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TASM source: display.inc
; display constants and routines for ES535
; Processor: 8051(80535?) on ES535 + DisplayTech 164A
;
; Hardware: 8000h display command port (memory mapped)
;           8001h display data write port (memory mapped)
;           8002h display status port (memory mapped)
;           8003h display data read port (memory mapped)
; Routines: 
;   ds_init	Init display, clear, cursor home
;		ret: A=0 no display, A=1 display ok
;   ds_busy	Wait until display not busy
;   ds_clear	clear display
;   ds_cursor   set cursor to A=lc (nibbles for line/column)
;   ds_write    display zero delimited string at DPTR
;   ds_int      display A as a dezimal integer
;   ds_hex      display A as a hexadezimal byte
;
; (c) 2003, M.Kuhn, aka "Schwabix"


DISP_CMD .EQU	8000h
DISP_WR	 .EQU	8001h
DISP_BSY .EQU	8002h
DISP_RD	 .EQU	8003h


ds_init	 push	DPH
	 push	DPL
	 acall	ds_busy
	 mov	DPTR,#DISP_CMD
	 mov	A,#40H		; read CGRAM @0
	 movx	@DPTR,A
	 acall	ds_busy
	 mov	DPTR,#DISP_RD
	 movx	A,@DPTR
	 mov	B,A
	 acall	ds_busy
	 mov	DPTR,#DISP_CMD
	 mov	A,#4FH		; read CGRAM @F
	 movx	@DPTR,A
	 acall	ds_busy
	 mov	DPTR,#DISP_RD
	 movx	A,@DPTR

	 xrl	A,B		; both equal?
	 jnz	disp_ok
	 mov	A,#0
	 sjmp	di_exit

disp_ok	 acall	ds_busy
	 mov	DPTR,#DISP_CMD
	 mov	A,#38H		; 8bit, 2lines, 5x7dots
	 movx	@DPTR,A
	 acall	ds_busy
;	 mov	DPTR,#DISP_CMD
	 mov	A,#06H		; inc, no shift
	 movx	@DPTR,A
	 acall	ds_busy
;	 mov	DPTR,#DISP_CMD
	 mov	A,#0CH		; lcd on, no cursor/blink
;	mov	A,#0FH		; lcd on, cursor/blink
	 movx	@DPTR,A
	 acall	ds_busy
;	 mov	DPTR,#DISP_CMD
	 mov	A,#01H		; clear
	 movx	@DPTR,A

	 acall	ds_busy
	 mov	DPTR,#DISP_CMD
	 mov	A,#80H		; cursor home
	 movx	@DPTR,A

	 mov	A,#1
di_exit	 pop	DPL
	 pop	DPH
	 ret

ds_busy	 push	DPH
	 push	DPL
db_1	 mov	DPTR,#DISP_BSY
	 movx	A,@DPTR
	 jb	ACC.7,db_1
	 pop	DPL
	 pop	DPH
	 ret

ds_clear push	DPH
	 push	DPL
	 acall	ds_busy
	 mov	DPTR,#DISP_CMD
	 mov	A,#01H		; clear display
	 movx	@DPTR,A
	 pop	DPL
	 pop	DPH
	 ret
	 
; this is valid only for 4x16 displays
crs_tab	 .DB	80h, 0C0h, 90h, 0D0h

ds_curs	 push	DPH
	 push	DPL
	 push	ACC
	 acall	ds_busy
	 pop	ACC
	 mov	B,A
	 anl	B,#0Fh
	 swap	A
	 anl	A,#0Fh
	 mov	DPTR,#crs_tab
	 movc	A,@A + DPTR
	 add	A,B

	 mov	DPTR,#DISP_CMD
	 movx	@DPTR,A
	 pop	DPL
	 pop	DPH
	 ret
	 
ds_write mov	R0,DPL
	 mov	R1,DPH
dw_1	 acall	ds_busy
	 mov	DPL,R0
	 mov	DPH,R1
	 mov	A,#00
	 movc	A,@A + DPTR
	 jz	dw_exit
	 inc	DPTR
	 mov	R0,DPL
	 mov	R1,DPH
	 mov	DPTR,#DISP_WR
	 movx	@DPTR,A
	 sjmp	dw_1
dw_exit	 ret


ds_int	 push	DPH
	 push	DPL
	 mov	R0,A
di_1	 acall	ds_busy
	 mov	A,R0
	 mov	B,#100
	 div	AB
	 mov	R0,B
	 jnz	di_2
	 mov	A,R0
	 mov	B,#10
	 div	AB
	 mov	R0,B
	 jnz	di_3
	 sjmp	di_4

di_2	 orl	A,#30h
	 mov	DPTR,#DISP_WR
	 movx	@DPTR,A
	 acall	ds_busy
	 mov	A,R0
	 mov	B,#10
	 div	AB
	 mov	R0,B
di_3	 orl	A,#30h
	 mov	DPTR,#DISP_WR
	 movx	@DPTR,A
di_4	 acall	ds_busy
	 mov	A,R0
	 orl	A,#30h
	 mov	DPTR,#DISP_WR
	 movx	@DPTR,A
di_exi1	 pop	DPL
	 pop	DPH
	 ret
	 
ds_0int	 push	DPH
	 push	DPL
	 mov	R0,A
d0i_1	 acall	ds_busy
	 mov	A,R0
	 mov	B,#100
	 div	AB
	 mov	R0,B
	 jnz	d0i_2
	 mov	A,R0
	 mov	B,#10
	 div	AB
	 mov	R0,B
	 sjmp	d0i_3

d0i_2	 orl	A,#30h
	 mov	DPTR,#DISP_WR
	 movx	@DPTR,A
	 acall	ds_busy
	 mov	A,R0
	 mov	B,#10
	 div	AB
d0i_3	 mov	R0,B
	 orl	A,#30h
	 mov	DPTR,#DISP_WR
	 movx	@DPTR,A
	 acall	ds_busy
	 mov	A,R0
	 orl	A,#30h
	 mov	DPTR,#DISP_WR
	 movx	@DPTR,A
	 pop	DPL
	 pop	DPH
	 ret
	 
ds_hex	 push	DPH
	 push	DPL
	 mov	R0,A
	 acall	ds_busy
	 mov	A,R0
	 swap	A
	 anl	A,#0Fh
	 acall	make_dig
	 mov	DPTR,#DISP_WR
	 movx	@DPTR,A
	 acall	ds_busy
	 mov	A,R0
	 anl	A,#0Fh
	 acall	make_dig
	 mov	DPTR,#DISP_WR
	 movx	@DPTR,A
	 pop	DPL
	 pop	DPH
	 ret
make_dig orl	A,#30h
	 mov	B,A
	 setb	C
	 subb	A,#39h
	 mov	A,B
	 jc	lt9
	 add	A,#'A'-'9'-1
lt9	 ret
	 
	 
        .end
Das gehört zu meinen ersten 8051-Routinen überhaupt ... =:-O

Schwabix