nopaste.us - no paste

Pasted code #5918

2012-02-03 15:14:35 by sw

code

 
using 0
 
 
 
 
 
 
 
cts	equ	P3.5
 
	setb	cts		; Eingang
 
 
 
	mov	r6, #0		; low byte gesamtzeit
 
	mov	r7, #0		; high byte gesamtzeit
 
 
 
; Initialisierung:
 
	mov	scon, #40h	; Modus 1
 
	mov	pcon, #80h	; doppelte Geschwindigkeit
 
	mov	th1, #0f4h 	; Nachladewert Timer 1
 
	mov	tmod, #20h	; Timer Modus 2 (Reload)
 
	setb	tr1		; Timer Run
 
	clr	ti		; Transmit Interrupt
 
	setb	ren		; Empfang freischalten
 
	clr	ri		; Receive flag
 
 
 
; Hauptprogramm
 
 
 
        mov     r1 , #12
 
anfang:
 
	mov	dptr, #loeschen
 
	call	sout
 
	mov	a, r1 
 
	call	nout
 
	call	nout
 
	mov	dptr, #button
 
	call	sout
 
        call    delay		; r0: zeit in 10 ms (200 = zu langsam), taste in sbuf
 
	call	tastendruck
 
	call	zufall
 
	jmp	anfang
 
 
 
 
 
warte:	jnb 	ri, warte
 
	clr 	ri
 
	ret
 
 
 
delay:	mov	r0, #0d	
 
	mov	tmod, #21h	; Timer Mode 1 (16bit)
 
loop:	mov	th0, #0b8h	; Nachladewerte 
 
	mov	tl0, #000h	; f¸r 10 ms
 
	setb	tr0		; Start Timer
 
wait:	jnb	tf0, wait	; Warte auf Timer
 
	clr	tr0
 
	clr	tf0		; Timer r¸cksetzen
 
	jb	ri, taste
 
	inc	r0
 
	cjne	r0, #200, delay
 
	ret
 
 
 
taste:	mov	a,r0
 
	mov	r5,a
 
;	mov 	a,sbuf
 
 
 
        clr	ri
 
	ret	
 
 
 
zeit_berechnen: 
 
	mov	a, r6
 
	add	a, r0
 
	mov	r6, a
 
	jnc	ende_a
 
	inc	r7
 
ende_a:	ret
 
 
 
 
 
tastendruck:
 
 
 
	cjne	r0, #200, ok
 
	mov	dptr,#zulangetext	; zu lange
 
	call	sout
 
	call	warte
 
	call	zeit_berechnen
 
	ret
 
 
 
ok:	mov	a,sbuf
 
	cjne    a, #12, daneben
 
	mov	dptr, #gedrueckttext
 
	call	sout
 
	call	warte
 
	call	zeit_berechnen
 
	ret
 
 
 
 
 
daneben:
 
	mov	dptr, #danebentext
 
	call	sout
 
	call	warte
 
	mov	r0, #200
 
	call	zeit_berechnen
 
	ret
 
 
 
 
 
 
 
 
 
 
 
zufall:
 
	mov	a,r6
 
	inc     a
 
	mov	b,#32
 
	div	ab
 
	mov	r1,b
 
	ret
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
; Unterprogramm zur Ausgabe auf dem Display
 
 
 
sout:	mov	a, #0
 
	MOVC 	A, @A+DPTR
 
	cjne	a, #0ffh, weiter
 
	ret
 
 
 
 
 
weiter:	jb	cts, weiter	; auf Display warten
 
	mov	SBUF, a		
 
waits:	jnb	ti, waits
 
	clr	ti
 
	inc	dptr
 
	jmp	sout
 
 
 
 
 
 
 
nout:	jb	cts, nout
 
	mov	sbuf, a
 
waitn:	jnb	ti, waitn
 
	clr	ti
 
	ret
 
 
 
 
 
 
 
 
 
 
 
 
 
; Ausgabetext
 
gedrueckttext:	db	"Taste wurde gedrueckt!!!", 0,0ffh	
 
 
 
danebentext:	db	"Daneben", 0,0ffh	
 
 
 
zulangetext:	db	"Zu lange", 0,0ffh	
 
 
 
loeschen:	db	12, 27, "TS", 0		; display lˆschen, Tastenpiep aus
 
        	db	27,"TH", 0ffh	
 
 
 
button:  	db	12, 2, "<>", 0, 0ffh	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
______________________________________________________________________________
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
using 0
 
 
 
cts	equ	P3.5
 
	setb	cts		; Eingang
 
 
 
	mov	r6, #0		; low byte gesamtzeit
 
	mov	r7, #0		; high byte gesamtzeit
 
 
 
; Initialisierung:
 
	mov	scon, #40h	; Modus 1
 
	mov	pcon, #80h	; doppelte Geschwindigkeit
 
	mov	th1, #0f4h 	; Nachladewert Timer 1
 
	mov	tmod, #20h	; Timer Modus 2 (Reload)
 
	setb	tr1		; Timer Run
 
	clr	ti		; Transmit Interrupt
 
	setb	ren		; Empfang freischalten
 
	clr	ri		; Receive flag
 
 
 
;---------------------------------------------------------------------------------------------------------
 
;Hauptprogramm
 
	mov	r1,#12
 
Display:
 
	mov	dptr, #loeschen
 
	call	ausgabe
 
	mov	a, r1 
 
	call	wartendisplay
 
	call	wartendisplay
 
	mov	dptr, #button
 
	call	ausgabe
 
	call    delay		; r0: zeit in 10 ms (200 = zu langsam), taste in sbuf
 
;	call	tastendruck
 
;	call	zufall
 
 
 
	jmp	Display
 
 
 
;---------------------------------------------------------------------------------------------------------
 
;Timer
 
 
 
delay:	mov	r0, #0d	
 
	mov	tmod, #21h	; Timer Mode 1 (16bit)
 
loop:	mov	th0, #0b8h	; Nachladewerte 
 
	mov	tl0, #000h	; f¸r 10 ms
 
	setb	tr0		; Start Timer
 
wait:	jnb	tf0, wait	; Warte auf Timer
 
	clr	tr0
 
	clr	tf0		; Timer r¸cksetzen
 
	jb	ri, zeit
 
	inc	r0
 
	cjne	r0, #200, delay
 
	ret
 
 
 
 
 
zeit:	mov	a,r0
 
	mov	r5,a
 
;	mov 	a,sbuf
 
        clr	ri
 
	ret
 
 
 
;---------------------------------------------------------------------------------------------------------
 
; Unterprogramm zur Ausgabe auf dem Display
 
 
 
ausgabe:	mov	a, #0
 
		MOVC 	A, @A+DPTR
 
		cjne	a, #0ffh, wartendisplay
 
		ret
 
 
 
wartendisplay:	jb	cts, wartendisplay	; auf Display warten
 
		mov	SBUF, a	
 
 
 
;--------------------------------------------------------------------------------------------------------
 
; Ausgabetext
 
 
 
 
 
;gedrueckttext:	db	"Taste wurde gedrueckt!!!", 0,0ffh	
 
 
 
;danebentext:	db	"Daneben", 0,0ffh	
 
 
 
;zulangetext:	db	"Zu lange", 0,0ffh	
 
 
 
 
 
loeschen:	db	12, 27, "TS", 0		; display lˆschen, Tastenpiep aus
 
        	db	27,"TH", 0ffh	
 
 
 
button:  	db	33, 2, "<>", 0, 0ffh	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
;	mov     a, r2
 
;	mov     r3, a
 
;	inc     r2	
 
;	loop2:  
 
;		mov     a, r0
 
;		mov     b, #32
 
;		div	ab
 
;		mov     r1, b
 
;		dec     r3
 
 ;               cjne    r3, #0, loop2
 
	;27,48,"A",2		;hier pr¸fen, ob die taste gedr¸ckt wurde und mit "ret" aus dem unterprogramm springen
 
				; aus r0 die zeit lesen... 0=1s / 100=10ms
 
;    	djnz	r0, loop	; 100 x ausf¸hren