2012-02-03 15:14:35 by sw
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
previous pasted code - show raw - paste new code - next pasted code