$TITLE (irremote) 
$DEBUG 
$OBJECT 

;************************************************************************
;*			 				*
;*				Version 1				*
;************************************************************************

; Include file for 87LPC764 SFR Definitions
; Philips Semiconductors. Revision 1.0, 04/20/99
ACC     data    0E0h    ; Accumulator
AUXR1   data    0A2h    ; Auxiliary Function Register
ADCON	  data    0C0H	; A/D control register
ADCS    bit     ADCON.3	; A/D start
ADCI    bit     ADCON.4	; A/D complete
B       data    0F0h    ; B Register
CMP1    data    0ACh    ; Comparator 1 Control Register
CMP2    data    0ADh    ; Comparator 2 Control Register
DIVM    data    095h    ; CPU Clock Divide-By-M Control
DPL     data    082h    ; Data Pointer - Low Byte
DPH     data    083h    ; Data Pointer - High Byte
DACO	  data    0C5H    ; A/D Result
I2CFG   data    0C8h    ; I2C Configuration Register
CT0     bit     I2CFG.0 ; Clock Time Select 0
CT1     bit     I2CFG.1 ; Clock Time Select 1
TIRUN   bit     I2CFG.4 ; Timer I Run Enable
CLRTI   bit     I2CFG.5 ; Clear Timer I
MASTRQ  bit     I2CFG.6 ; Master Request
SLAVEN  bit     I2CFG.7 ; Slave Enable
I2CON   data    0D8h    ; I2C Control Register
MASTER  bit     I2CON.1 ; Master Status
STP     bit     I2CON.2 ; Stop Detect Flag
STR     bit     I2CON.3 ; Start Detect Flag
ARL     bit     I2CON.4 ; Arbitration Loss Flag
DRDY    bit     I2CON.5 ; Data Ready Flag
ATN     bit     I2CON.6 ; Attention: I2C Interrupt Flag
RDAT    bit     I2CON.7 ; I2C Read Data
I2DAT   data    0D9h    ; I2C Data Register
IEN0    data    0A8h    ; Interrupt Enable Register 0
EX0     bit     IEN0.0  ; External Interrupt 0 Enable
ET0     bit     IEN0.1  ; Timer 0 Interrupt Enable
EX1     bit     IEN0.2  ; External Interrupt 1 Enable
ET1     bit     IEN0.3  ; Timer 1 Interrupt Enable
ES      bit     IEN0.4  ; Serial Port Interrupt Enable
EBO     bit     IEN0.5  ; Brownout Interrupt Enable
EWD     bit     IEN0.6  ; Watchdog Interrupt Enable
EA      bit     IEN0.7  ; Global Interrupt Enable
IEN1    data    0E8h    ; Interrupt Enable Register 1
EI2     bit     IEN1.0  ; I2C Interrupt Enable
EKB     bit     IEN1.1  ; Keyboard Interrupt Enable
EC2     bit     IEN1.2  ; Comparator 2 Interrupt Enable
EC1     bit     IEN1.5  ; Comparator 1 Interrupt Enable
ETI     bit     IEN1.7  ; Timer I Interrupt Enable
IP0     data    0B8h    ; Interrupt Priority 0 Low Byte
PX0     bit     IP0.0   ; External Interrupt 0 Priority
PT0     bit     IP0.1   ; Timer 0 Interrupt Priority
PX1     bit     IP0.2   ; External Interrupt 1 Priority
PT1     bit     IP0.3   ; Timer 1 Interrupt Priority
PS      bit     IP0.4   ; Serial Port Interrupt Priority
PBO     bit     IP0.5   ; Brownout Interrupt Priority
PWD     bit     IP0.6   ; Watchdog Interrupt Priority
IP0H    data    0B7h    ; Interrupt Priority 0 High Byte
IP1     data    0F8h    ; Interrupt Priority 1 Low Byte
PI2     bit     IP1.0   ; I2C Interrupt Priority
PKB     bit     IP1.1   ; Keyboard Interrupt Priority
PC2     bit     IP1.2   ; Comparator 2 Interrupt Priority
PC1     bit     IP1.5   ; Comparator 1 Interrupt Priority
PTI     bit     IP1.7   ; Timer I Interrupt Priority
IP1H    data    0F7h    ; Interrupt Priority 1 High Byte
KBI     data    086h    ; Keyboard Interrupt
P0      data    080h    ; Port 0
CMP2O   bit     P0.0    ; P0, bit 0 is also the Comparator 2 Output
CIN2B   bit     P0.1    ; P0, bit 1 is also the Comparator Input B
CIN2A   bit     P0.2    ; P0, bit 2 is also the Comparator Input A
CIN1B   bit     P0.3    ; P0, bit 3 is also the Comparator Input B
CIN1A   bit     P0.4    ; P0, bit 4 is also the Comparator Input A
CMPREF  bit     P0.5    ; P0, bit 5 is also the Comparator Reference Input
CMP1O   bit     P0.6    ; P0, bit 6 is also the Comparator 1 Output
T1      bit     P0.7    ; P0, bit 7 is also the Timer 1 Count Input/Toggle Output
P0M1    data    084h    ; P0 Mode Register 1
P0M2    data    085h    ; P0 Mode Register 2
P1      data    090h    ; Port 1
TxD     bit     P1.0    ; P1, bit 0 is also the UART Transmitter Output
RxD     bit     P1.1    ; P1, bit 1 is also the UART Receiver Input
T0      bit     P1.2    ; P1, bit 2 is also the Timer 0 Input/Output
SCL     bit     P1.2    ; P1, bit 2 is also the I2C Bus Clock Line
SDA     bit     P1.3    ; P1, bit 3 is also the I2C Bus Data Line
INT0    bit     P1.3    ; P1, bit 3 is also External Interrupt 0
INT1    bit     P1.4    ; P1, bit 4 is also External Interrupt 1
RST     bit     P1.5    ; P1, bit 5 is also the Reset Pin
; P1.6 and P1.7 have no alternate function
P1M1    data    091h    ; P1 Mode Register 1
P1M2    data    092h    ; P1 Mode Register 2
P2      data    0A0h    ; Port 2
X2      bit     P2.0    ; P2, bit 0 is also the X2 Pin
CLKOUT  bit     P2.0    ; P2, bit 0 is also the CLKOUT Pin
X1      bit     P2.1    ; P2, bit 1 is also the X1 Pin
P2M1    data    0A4h    ; P2 Mode Register 1
P2M2    data    0A5h    ; P2 Mode Register 2
PCON    data    087h    ; Power Control
PSW     data    0D0h    ; Program Status Word
P       bit     PSW.0   ; Accumulator Parity Flag
F1      bit     PSW.1   ; Flag 1
OV      bit     PSW.2   ; Overflow Flag
RS0     bit     PSW.3   ; Register Bank Select 0
RS1     bit     PSW.4   ; Register Bank Select 1
F0      bit     PSW.5   ; Flag 0
AC      bit     PSW.6   ; Auxiliary Carry Flag
CY      bit     PSW.7   ; Carry Flag
PT0AD   data    0F6h    ; Port 0 digital Input Disable
SCON    data    098h    ; Serial Port Control
RI      bit     SCON.0  ; Receive Interrupt Flag
TI      bit     SCON.1  ; Transmit Interrupt Flag
RB8     bit     SCON.2  ; Receive Bit 8
TB8     bit     SCON.3  ; Transmit Bit 8
REN     bit     SCON.4  ; Receiver Enable
SM2     bit     SCON.5  ; Serial Mode Control Bit 2
SM1     bit     SCON.6  ; Serial Mode Control Bit 1
SM0     bit     SCON.7  ; Serial Mode Control Bit 0
SBUF    data    099h    ; Serial Port Buffer
SADDR   data    0A9h    ; Serial Port Address
SADEN   data    0B9h    ; Serial Port Address Enable
SP      data    081h    ; Stack Pointer
TCON    data    088h    ; Timer Control
IT0     bit     TCON.0  ; External Interrupt 0 Type
IE0     bit     TCON.1  ; External Interrupt 0 Edge Flag
IT1     bit     TCON.2  ; External Interrupt 1 Type
IE1     bit     TCON.3  ; External Interrupt 1 Edge Flag
TR0     bit     TCON.4  ; Timer 0 Run Control
TF0     bit     TCON.5  ; Timer 0 Overflow Flag
TR1     bit     TCON.6  ; Timer 1 Run Control
TF1     bit     TCON.7  ; Timer 1 Overflow Flag
TH0     data    08Ch    ; Timer 0 - High Byte
TH1     data    08Dh    ; Timer 1 - High Byte
TL0     data    08Ah    ; Timer 0 - Low Byte
TL1     data    08Bh    ; Timer 1 - Low Byte
TMOD    data    089h    ; Timer 0 and 1 Mode
WDCON   data    0A7h    ; Watchdog Control Register
WDRST   data    0A6h    ; Watchdog Reset (Feed) Register

;Instruction cycle = 1us

;Pinbelegung:
	;P1.7 = 	Codierswitch
	;P1.6 = 	Codierswitch
	;P2.1 = 	Quarz
	;P2.0 =	Quarz
	;P1.3 = 	LED(immer Open Drain)
	;P1.2 =	(immer Open Drain)
	;P1.1 = 	Taster 2
	;P1.0 = 	Taster 1
	;P0.0 = 	Codierswitch
	;P1.5 = 	Codierswitch(immer Schmitt Trigger Eingang)--> muss mit Pull up beschaltet werden
	;P0.3 = 	Poti 1
	;P0.1 = 	Ausgabe der Information für Sendemodul
	;P0.2 = 	Spannungsüberwachung (Komparatoreingang)
	;P0.4 = 	Poti 2
	;P0.5 =     Poti 3
	;P0.6 = 	Poti 4
	;P0.7 = 	Codierung für Infrarotausgabe
	;P1.4 =  	Ausgabe modulierte Trägerfrequenz für Infrarotdatenübertragung 

;Rambelegung
STATUS		DATA	020H	;
	TOGGLE	BIT	STATUS.0
	RESET		BIT	STATUS.1
	PARITYBIT	BIT	STATUS.2
	TASTER1	BIT	STATUS.3
	TASTER2	BIT	STATUS.4
	BATLEER	BIT	STATUS.5
	WANDLUNG1	BIT	STATUS.6
	INFRAROT	BIT	STATUS.7

POTI0			DATA	021H
POTI1			DATA	022H
POTI2			DATA	023H
POTI3			DATA	024H
POTI0SAVE		DATA	025H
POTI1SAVE		DATA	026H
POTI2SAVE		DATA	027H
POTI3SAVE		DATA	028H
KANAL			DATA	029H
ADWERT		DATA	02AH
TASTEN		DATA	02BH
REG1			DATA	02CH
REG2			DATA	02DH
ASICHER		DATA	02EH
HILFSREG		DATA	02FH
	SEKUNDE	BIT	HILFSREG.0
ACCUSAVE		DATA	030H
KANALCOUNT		DATA	031H
SERVOL		DATA	032H
SERVOH		DATA	033H

;SFR-Belegung:
;		R0	Allgemeine Verwendung in Resetroutine
;		R1	Im Wartemodul verwendet
;		R2
;		R3	Zähler in Timer0 Interrupt
;		R4	Zähler für Infrarotträgerfrequenz
;		R5	Batteriespannungsüberwachung
;		R6	1s Zähler in Timer0 Interrupt

;************************************************
;*		Initialisierung			*
;************************************************

		ORG	00H			;
		JMP	START			;
		ORG	0BH			;Timer 0 Interrupt
		JMP	TIMER0		;
		ORG	01BH			;Timer 1 Interrupt
;		JMP	TIMER1		;
		ORG	063H			;Komparator 1 Interrupt
;		JMP	KOMPINT		;
						;
   		ORG   100H			;
						;
START:	MOV	WDCON,#016H		;Watchdog konfigurieren
		MOV	R0,#128		;Alle 128 Bytes Ram loeschen
		CLR	A			;
LOOPCLR:	MOV	@R0,A			;
		DJNZ	R0,LOOPCLR		;
		MOV	PT0AD,#07EH		;Disable digital input on A/D input pins und bei Komparator 2
		ANL	P0M2,#081H		;Disable digital outputs on A/D input pins, P02 und P01 als Eingang
		ORL	P0M1,#07CH		;
		MOV	CMP2,#028H		;Komparator 2 konfigurieren
		MOV	TMOD,#011H		;Timer 0 16bit counter
						;Timer 1 16bit counter
		MOV	R5,#10		;Für Batteriespannungsüberwachung
		MOV	R6,#15		;Für 1s Marken
		CLR	P0.1			;Sendepin ausschalten
		CLR	P1.4			;Infrarotsignalpin auf low
		SETB	ADCON.7		;A/D Wandlung ermöglichen
		SETB	TR0			;Timer0 starten
		SETB	ET0			;Timer0 Interrupt zulassen
		ORL	P0M2,#02		;P0.1 als Push-Pull konfigurieren
		ORL	P1M2,#010H		;P1.4		#
		JB	P0.7,START3		;IF Pin P0.7 = Low
		SETB	INFRAROT		;THEN SBIT Infrarot
						;ENDIF
						;ENDIF
START3:	SETB	EA			;Generelle Interruptfreigabe
		CLR	P1.3			;Betriebs-LED einschalten

;************************************************
;*              Hauptprogramm                   *
;************************************************

LOOP:		MOV	WDRST,#01EH		;Watchdog füttern
		MOV	WDRST,#0E1H		;
		ACALL	BATTERIE?		;Batteriespannung OK?
		MOV	A,#0			;
		ACALL	ADWANDLER		;Alle Potis abfragen
		MOV	POTI0,A		;
		MOV	A,#1			;
		ACALL	ADWANDLER		;
		MOV	POTI1,A		;
		MOV	A,#2			;
		ACALL	ADWANDLER		;
		MOV	POTI2,A		;
		MOV	A,#3			;
		ACALL	ADWANDLER		;
		MOV	POTI3,A		;
		ACALL	SENDEN		;und Senden
		JMP	LOOP			;

;************************************************
;*		Timer 0 Interrupt		*
;************************************************
;Wird alle 65ms angesprungen

TIMER0:	PUSH	PSW			;
		DJNZ	R6,TIME2		;
		MOV	R6,#15		;
SEK:		SETB	SEKUNDE		;Generierung der Sekundenmarke
TIME2:	DJNZ	R3,TIMEE		;
		MOV	R3,#5			;
		JNB	BATLEER,TIMEE	;IF Bit Batleer
		JNB	TOGGLE,TIME1	;THEN IF Bit Toggle(0),Status
		CLR	TOGGLE		;THEN RBIT Toggle(0),Status
		CLR	P1.3			;     Pin P1.3 Low (LED an)
		SJMP	TIMEE			;
TIME1:	SETB	TOGGLE		;ELSE SBIT Toggle(0),Status
		SETB	P1.3			;     Pin P1.3 High (LED aus)
						;ENDIF
TIMEE:	POP	PSW			;
		RETI				;

;************************************************
;*		Spannungsüberwachung			*
;************************************************
;Unterspannung muß 10x hintereinander registriert werden

BATTERIE?:	MOV	A,CMP2		;
		JB	ACC.1,ACCUOK	;IF NOT Bit CO2 (Komparatorergebnis)
		DJNZ	R5,ACCUE		;
		SETB	BATLEER		;THEN IF 10x registriert, dann Bit Batleer setzen
						;     ENDIF
ACCUOK:	MOV	R5,#10		;ENDIF
ACCUE:	RET

;************************************************
;*		Sendemodul					*
;************************************************
;Wenn die 1s-Marke erreicht ist, werden generell alle Potizustände einmal gesendet

SENDEN:	MOV	A,POTI0		;Änderung an Poti 0?
		JB	SEKUNDE,SE1		;
		CJNE	A,POTI0SAVE,SE1	;
		JMP	SE2			;
SE1:		MOV	POTI0SAVE,A		;    Wenn ja, letzten Potizustand sichern
		MOV	KANAL,#0		;    Kanal = 0
		JB	P0.0,SE1A		;
		CPL	A			;    Servoreverse?
SE1A:		ACALL	AUSGABE		;    Bits ausgeben
SE2:		MOV	A,POTI1		;Änderung an Poti 1?
		JB	SEKUNDE,SE3		;
		CJNE	A,POTI1SAVE,SE3	;
		JMP	SE4			;
SE3:		MOV	POTI1SAVE,A		;    Wenn ja, letzten Potizustand sichern
		MOV	KANAL,#1		;    Kanal = 1
		JB	P1.7,SE3A		;
		CPL	A			;    Servoreverse?
SE3A:		ACALL	AUSGABE		;    Bits ausgeben
SE4:		MOV	A,POTI2		;Änderung an Poti 2?
		JB	SEKUNDE,SE5		;
		CJNE	A,POTI2SAVE,SE5	;
		JMP	SE6			;
SE5:		MOV	POTI2SAVE,A		;    Wenn ja, letzten Potizustand sichern
		MOV	KANAL,#2		;    Kanal = 2
		JB	P1.6,SE6A		;
		CPL	A			;    Servoreverse?
SE6A:		ACALL	AUSGABE		;    Bits ausgeben
SE6:		MOV	A,POTI3		;Änderung an Poti 3?
		JB	SEKUNDE,SE7		;
		CJNE	A,POTI3SAVE,SE7	;
		JMP	SE8			;
SE7:		MOV	POTI3SAVE,A		;    Wenn ja, letzten Potizustand sichern
		MOV	KANAL,#3		;    Kanal = 3
		JB	P1.5,SE8A		;
		CPL	A			;    Servoreverse?
SE8A:		ACALL	AUSGABE		;    Bits ausgeben					
SE8:		CLR	SEKUNDE		;
		RET

;************************************************
;*		Bits senden					*
;************************************************

AUSGABE:	MOV	ADWERT,A		;ADwert sichern
		ACALL	TASTEN?		;Tastenabfrage
		ACALL	PARITY		;Parity berechnen
		CLR	EA			;Timer -Interrupt verhindern
		SETB	P0.1			;
		MOV	R4,#72		;
		ACALL	XHIGHLOOP		;
;		MOV	R1,#2			;Startbit senden
;		ACALL	WARTE			;	#
;		CLR	P0.1			;	#
		MOV	R1,#1			;	#
		ACALL	WARTE			;	#
		JNB	KANAL.1,AU1		;Kanalbits senden
		ACALL	EINS			;	#
		JMP	AU2			;	#
AU1:		ACALL	NULL			;	#
AU2:		JNB	KANAL.0,AU3		;	#
		ACALL	EINS			;	#
		JMP	AU4			;	#
AU3:		ACALL	NULL			;	#
AU4:		JNB	ADWERT.0,AU5	;ADwertbits senden
		ACALL	EINS			;	#
		JMP	AU6			;	#
AU5:		ACALL	NULL			;	#
AU6:		JNB	ADWERT.1,AU7	;	#
		ACALL	EINS			;	#
		JMP	AU8			;	#
AU7:		ACALL	NULL			;	#
AU8:		JNB	ADWERT.2,AU9	;	#
		ACALL	EINS			;	#
		JMP	AU10			;	#
AU9:		ACALL	NULL			;	#
AU10:		JNB	ADWERT.3,AU11	;	#
		ACALL	EINS			;	#
		JMP	AU12			;	#
AU11:		ACALL	NULL			;	#
AU12:		JNB	ADWERT.4,AU13	;	#
		ACALL	EINS			;	#
		JMP	AU14			;	#
AU13:		ACALL	NULL			;	#
AU14:		JNB	ADWERT.5,AU15	;	#
		ACALL	EINS			;	#
		JMP	AU16			;	#
AU15:		ACALL	NULL			;	#
AU16:		JNB	ADWERT.6,AU17	;	#
		ACALL	EINS			;	#
		JMP	AU18			;	#
AU17:		ACALL	NULL			;	#
AU18:		JNB	ADWERT.7,AU19	;	#
		ACALL	EINS			;	#
		JMP	AU20			;	#
AU19:		ACALL	NULL			;	#
AU20:		JNB	TASTEN.1,AU21	;Tastenbits senden
		ACALL	EINS			;	#
		JMP	AU22			;	#
AU21:		ACALL	NULL			;	#
AU22:		JNB	TASTEN.0,AU23	;	#
		ACALL	EINS			;	#
		JMP	AU24			;	#
AU23:		ACALL	NULL			;	#
AU24:		JNB	PARITYBIT,AU25	;Paritybit senden
		ACALL	EINS			;	#
		JMP	AU26			;	#
AU25:		ACALL	NULL			;	#
AU26:		ACALL	NULL			;Stopbit senden
		SETB	EA			;Interrupts wieder freigeben
		JNB	INFRAROT,GOON	;IF Bit Infrarot
		ACALL	WARTEN10		;THEN 10ms warten
GOON:		RET				;ENDIF

;************************************************
;*		Ausgabe eines "1" Bits			*
;************************************************

EINS:		SETB	P0.1
		MOV	R4,#18
XHIGHLOOP:
HIGHLOOP:	JNB	INFRAROT,EINS1
		SETB	P1.4
EINS1:	NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		CLR	P1.4
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		DJNZ	R4,HIGHLOOP
;		MOV	A,#125
;		ACALL	WAIT
		CLR	P0.1
		MOV	R1,#1
		ACALL	WARTE
		RET
	
;************************************************
;*		Ausgabe eines "0" Bits			*
;************************************************

NULL:		SETB	P0.1
		MOV	R4,#18
HIGHLOOP1:	JNB	INFRAROT,NULL1
		SETB	P1.4
NULL1:	NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		CLR	P1.4
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		DJNZ	R4,HIGHLOOP1
;		MOV	A,#125
;		ACALL	WAIT
		CLR	P0.1
		MOV	A,#125
		ACALL	WAIT
		RET

;************************************************
;*			Parityberechnung			*
;************************************************
;Das Paritybit ergänzt die Anzahl der Bits zu einer geraden Summe

PARITY:	MOV	A,#0
		JNB	KANAL.1,PA1
		ADD	A,#1
PA1:		JNB	KANAL.0,PA2
		ADD	A,#1
PA2:		JNB	ADWERT.7,PA3
		ADD	A,#1
PA3:		JNB	ADWERT.6,PA4
		ADD	A,#1
PA4:		JNB	ADWERT.5,PA5
		ADD	A,#1
PA5:		JNB	ADWERT.4,PA6
		ADD	A,#1
PA6:		JNB	ADWERT.3,PA7
		ADD	A,#1
PA7:		JNB	ADWERT.2,PA8
		ADD	A,#1
PA8:		JNB	ADWERT.1,PA9
		ADD	A,#1
PA9:		JNB	ADWERT.0,PA10
		ADD	A,#1
PA10:		JNB	TASTEN.1,PA11
		ADD	A,#1
PA11:		JNB	TASTEN.0,PA12
		ADD	A,#1
PA12:		JB	ACC.0,PARI
		CLR	PARITYBIT
		RET
PARI:		SETB	PARITYBIT
		RET

;************************************************
;*			Tastenabfrage			*
;************************************************

TASTEN?:	JB	P1.0,TA1		;Taster 1 gedrückt?
		JB	TASTER1,TA2		;
		SETB	TASTER1		;
		MOV	A,TASTEN		;
		XRL	A,#1			;
		MOV	TASTEN,A		;
		JMP	TA2			;
TA1:		CLR	TASTER1		;
TA2:		JB	P1.1,TA3		;Taster 2 gedrückt?
		JB	TASTER2,TA4		;
		SETB	TASTER2		;
		MOV	A,TASTEN		;
		XRL	A,#2			;
		MOV	TASTEN,A		;
		JMP	TA4			;
TA3:		CLR	TASTER2		;
TA4:		RET

;************************************************
;*		A/D - Wandlerabfrage			*
;************************************************
;Die Nummer des Kanals (0..3) wird in A übergeben
;Die Wandlung wird 4x ausgeführt, aufaddiert und anschließend durch 4 geteilt
ADWANDLER:	MOV	R1,#4
		MOV	REG1,#0
		MOV	REG2,#0
AD2:		ORL	ADCON,A		;Wandler anwählen
		MOV	ASICHER,A
		SETB	ADCS			;Wandler starten
ADCHK:	JNB	ADCI,ADCHK		;Auf Ergebis warten
		MOV	A,DACO		;
		CLR	ADCI			;Completion Flag löschen
		ANL	ADCON,#0FCH		;
TEST:		ADD	A,REG1
		MOV	REG1,A
		MOV	A,REG2
		ADDC	A,#0	
		MOV	REG2,A
		MOV	A,ASICHER
		DJNZ	R1,AD2
		CLR	C
		MOV	A,REG2
		RRC	A
		MOV	REG2,A
		MOV	A,REG1
		RRC	A
		MOV	REG1,A
		CLR	C
		MOV	A,REG2
		RRC	A
		MOV	A,REG1
		RRC	A
	;	ANL	A,#0FEH		;Letztes Bit streichen
		RET

;************************************************
;*		10ms Warteschleife			*
;************************************************

WARTEN10:	MOV	R1,#10		;10ms warten
WARTE:					;
LOOP22:	MOV	A,#250		;
		ACALL	WAIT			;
		DJNZ	R1,LOOP22		;
		RET

;************************************************
;*		Warteschleife      			*
;************************************************
;Zeit = Accu * 4us
WAIT: 	 NOP
      	 NOP
      	 DJNZ    ACC,WAIT
      	 RET
;ENDIF


       END
