; 09.01.2003 18:40:53

#cpu = 80C31	; @3,5976 MHz

#bit Empfang,Sendebusy
#byte chan_0=7fh, chan_1=7eh, chan_2=7dh, chan_3=7ch
#byte pattern_0=7ah, pattern_1=79h, pattern_2=78h, pattern_3=77h
#byte overhead=7bh
#byte save_akku

ajmp Initialisierung

SINT:	; serieller Interrupt
ajmp Serieller Interrupt

Initialisierung:

; Serieller Port
mov SCON, # D0h	; Modus 3, asynchron, 11 Bit, Baudrate Timer 1 Überlauf, Datenempfang freigeben
mov TMOD, # 20h	; Timer 1 Autoreloadmodus
mov TH1, # FCh	; Reloadwert für Baudrate 2342,188
setb TR1	; Timer 1 Start

; Interrupts
setb ES	; seriellen Interrupt freigeben
setb EA

clr empfang
mov chan_0,#fh
mov chan_1,#fh
mov chan_2,#fh
mov chan_3,#36h

mov overhead,#1h

mov pattern_0, #f8h
mov pattern_1, #fch
mov pattern_2, #feh
mov pattern_3, #ffh

mov r7,#0h


;mov dptr, #copyr
;s1:	
;clr a	
;movc a, @a+dptr
;inc dptr
;if a=#00h
;	jmp ende
;end if
;mov sbuf, a
;loop while not bit ti
;end loop
;acall warten
;jmp s1

ende:

mov p1,#f0h


main:
mov r0,chan_0
for r0
next
mov p1, pattern_0
mov r0, chan_1
for r0
next
mov p1, pattern_1
mov r0, chan_2
for r0
next
mov p1, pattern_2
mov r0, chan_3
for r0
next
mov p1, pattern_3
mov r0, overhead
for r0
next
mov p1,#f0h
jb empfang, get_data
jmp main

get_data:
	mov p1, #ffh
	clr Empfang	
	acall Serielle Daten auswerten	
	if a=#00h
;			mov r7,#0h			
			jmp status_senden
	end if	
	mov save_akku,a
	if r7=#0h
		mov r7,#9h
	end if
	mov a, #80h
	subb a,r7
	mov r1,a
	mov a, save_akku	
	mov @r1,a
	clr EA
	mov a, r7	
	mov sbuf, a
	loop while not bit ti
	end loop
	acall warten
	dec r7
	setb EA
jmp main





status_senden:
	clr EA
	mov r6,#9h
	for r6
		mov a, #80h
		subb a, r6
		mov r1, a
		mov a, @r1
		mov sbuf, a
		loop while not bit ti
		end loop
		acall warten
	next
	setb EA
jmp main

Serielle Daten auswerten:
	mov a, SBUF
	; weitere Befehle
ret

Sende:	; Sendewert in a
	jb Sendebusy, hier	; auf Sendefreigabe warten

	mov SBUF, a
	setb Sendebusy
ret

Serieller Interrupt:
	; Herkunft ermitteln
	if bit TI then	; Senden
		clr TI
		clr Sendebusy
	else	; Empfangen
		clr RI
		setb Empfang
	end if
reti


warten:
mov r2,#3h
for r2
	mov r3,#ffh
	for r3
	next
next
ret

copyr:
DB '**** 4 Channel PWM Fan Control *******',10h
DB '(c) 2003 Hardware by Runni --- Software by elHakim',10h
DB 00h
copyend: