$TITLE (Analyser) 
$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
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
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 (12Mhz Quarz oder 6Mhz bei Teiler :6)
;Pinbelegung:
	;P1.7 = Taste
	;P1.6 = 
	;P1.3 =  
	;P1.2 = Display R/W
  	;P1.1 = Display E  
	;P1.0 = Display RS 
	;P0.0 = Display D0 
	;P1.5 = 
 	;P0.3 = Display D3 
	;P0.1 = Display D1 
	;P0.2 = Display D2 
	;P0.4 = Display D4
	;P0.5 = Display D5 
	;P0.6 = Display D6
	;P0.7 = Display D7
	;P1.4 = Eingang Infrarotsignal vom Empfänger IC

;Rambelegung
STATUS		DATA	020H	;
	SEKUNDE	BIT	STATUS.0
	GEDRUECKT	BIT	STATUS.1
	UNBEKANNT	BIT	STATUS.2
	AUSWERT	BIT	STATUS.3
;	NEU		BIT	STATUS.6

MILLICOUNT		DATA	021H
FORM			DATA	022H
DRUCKZAEHLER	DATA	023H
STOPCOUNT		DATA	024H
FEHLER		DATA	025H
	JAFEHLER	BIT	FEHLER.0
	SIRCSERROR	BIT	FEHLER.1

ADRESSE		DATA	026H
;KOMMANDO		DATA	027H
TIMERL		DATA	028H
TIMERH		DATA	029H
DATA1			DATA	02AH
DATA2			DATA	02BH
DATA3			DATA	02CH
DATA4			DATA	02DH
DATA5			DATA	02EH
DATA6			DATA	02FH
LC1			DATA	030H
LC9			DATA	039H

LC16			DATA	03FH
KOMMANDOL		DATA	040H
KOMMANDOH		DATA	041H
LOWWERT		DATA	042H


;SFR-Belegung:
;		R0 
;		R1	 
;		R2
;		R3
;		R4 
;		R5	 
;		R6 

;************************************************
;*		Initialisierung			*
;************************************************

	ORG	00H		;
	JMP	START		;
	ORG	0BH		;
	JMP	TIMER0INT	;
      ORG     100H	;
				;
START:MOV	R0,#128	;Alle 128 Bytes Ram loeschen
	CLR	A		;
LOOPCLR:			;
	MOV	@R0,A		;
	DJNZ	R0,LOOPCLR	;
	MOV	R3,#100	;100ms warten für Displayreset
RELOOP:			;
	MOV	A,#225	;
	ACALL	WAIT		;
	DJNZ	R3,RELOOP	;
	MOV	TMOD,#00000001B;Timer 0 als 16 Bit Counter
	MOV	P1M2,#01000000B;P1.6 als Push/Pull Stufe 
	SETB	ET0		;Timer 0 Interrupt Enable
	SETB	EA		;Globale Interruptfreigabe
	SETB	TR0		;Timer 0 anschalten
	LCALL	LCD_INIT	;CALL 'LCD_Init'
	LCALL	STARTMELDUNG;CALL 'Startmeldung'
WAR1:	JNB	SEKUNDE,WAR1;3 Sekunden warten
	CLR	SEKUNDE	;
WAR2:	JNB	SEKUNDE,WAR2;
	CLR	SEKUNDE	;
WAR3:	JNB	SEKUNDE,WAR3;
	CLR	SEKUNDE	;
	LCALL	WAITING	;Displayanzeige = WAITING...
	ACALL	DISPLAY	;

;************************************************
;*			Hauptprogramm			*
;************************************************

LOOP:					;DO FOREVER
	ACALL	ABTASTEN		;     CALL 'Abtasten'
	JNB	UNBEKANNT,LOOP1	;     IF Bit Unbekannt
	ACALL	UNKNOWN?		;     THEN CALL 'Unknown'
					;     ENDIF
LOOP1:ACALL	TASTE			;	CALL 'Taste'
	JNB	SEKUNDE,LOOP	;	IF Bit Sekunde
	CLR	SEKUNDE		;	THEN RBIT Sekunde
					;     ENDIF
	JMP	LOOP			;
					;END DO FOREVER


;************************************************
;*	Signal des Infrarotempfängers abtasten	*
;************************************************

ERROR1:
	CLR	TF1
	CLR	TR1
ABEE:	RET

ABTASTEN:
	JB	P1.4,ABEE		;IF Pin P1.4 = low (Infrarotempfänger aktiv)
	MOV	TL1,#0		;     Timer 1 starten
	MOV	TH1,#0		;
	MOV	TMOD,#00010001B	;     Timer 1 als 16 Bit Counter
	SETB	TR1			;
XABT:	JB	TF1,ERROR1		;     1. Lowphase ausmessen (Hier Überlauf des Timers als Fehler werten (65ms)
	JNB	P1.4,XABT		;     Auf Highphase warten
	CLR	TR1			;
TEST:	MOV	TIMERL,TL1		;
	MOV	TIMERH,TH1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	MOV	A,TIMERH		;
	CJNE	A,#0,ABT1		;
	MOV	A,TIMERL		;
	CJNE	A,#150,ABT2		;
ABT0:	LJMP	REC80?		;
ABT2:	JC	ERROR1		;RECS80 = 96H...121H = 150us...298us
	JMP	ABT0			;DENON = 130H...1F0H = 304us...496us
ABT1:	CJNE	A,#1,ABT3		;
	MOV	A,TIMERL		;
	CJNE	A,#0F0H,ABT4	;
	LJMP	DENON?		;
ABT4:	CJNE	A,#030H,ABT4A	;
	LJMP	DENON?		;
ABT4A:JC	ABT0			;
	LJMP	DENON?		;
ABT3:	CJNE	A,#2,ABT5		;
	LJMP	MOTOROLA?		;MOTOROLA = 200H...2FFH = 512us...767us
ABT5:	CJNE	A,#3,ABT7		;RC5 = 300H...400 = 768us...1024us
	LJMP	RC5?			;
ABT7:	CJNE	A,#9,ABT8		;SIRCS = 900H..AFFH = 2304us...2815us
	LJMP	SIRCS?		;
ABT8:	CJNE	A,#0AH,ABT8A	;
	LJMP	SIRCS?		;
ABT8A:CJNE	A,#0DH,ABT9		;JAPAN = C80H...E00H = 3200us...3840us
	LJMP	JAPAN?		;
ABT9:	CJNE	A,#0EH,ABT10A	;
	LJMP	JAPAN?		;
ABT10A:
	CJNE	A,#0CH,ABT10	;
	MOV	A,TIMERL		;
	CJNE	A,#080H,ABT11	;
ABT11A:
	SETB	UNBEKANNT
	RET				;
ABT11:JC	ABT11A		;
	LJMP	JAPAN?		;
ABT10:CJNE	A,#010H,ABT14	;SAMSUNG = 1000H...1300H = 4096us...4864us
SA:	LJMP	SAMSUNG?		;
ABT14:CJNE	A,#011H,ABT15	;
	JMP	SA			;
ABT15:CJNE	A,#012H,ABT16	;
	JMP	SA			;
ABT16:CJNE	A,#013H,ABT17	;
	JMP	SA			;
ABT17:CJNE	A,#01EH,ABT18	;Daewoo = 1E00H...2100H = 7680us...8448us
DAE:	LJMP	DAEWOO?		;
ABT18:CJNE	A,#01FH,ABT19	;
	JMP	DAE			;
ABT19:CJNE	A,#020H,ABT20	;
	JMP	DAE			;
ABT20:CJNE	A,#021H,ABT21	;
	JMP	DAE			;
ABT21:CJNE	A,#022H,ABT12	;NEC = 2200H...2400H = 8704us...9216us
	LJMP	NEC?			;
ABT12:CJNE	A,#023H,ABT13	;
	LJMP	NEC?			;
ABT13:CJNE	A,#24H,ABT11A	;
	LJMP	NEC?			;

MOTOROLA_1:
	LJMP	MOTOROLA?
DENON_1:
	LJMP	DENON?

;************************************
;*		Samsung Auswertung	*
;************************************

SAMERROR:
	CLR	TF1
	CLR	TR1
	SETB	UNBEKANNT
	RET
SAMSUNG?:
	JB	TF1,SAMERROR
	JB	P1.4,SAMSUNG?
	CLR	TR1			;
	MOV	STOPCOUNT,#0	;
	MOV	TIMERL,TL1		;
	MOV	TIMERH,TH1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	MOV	A,TIMERH		;Toleranzbereich für 1.Highphase = 1000H...1300H = 4096us...4864us
	CJNE	A,#010H,SA1		;
	JMP	SAMOK			;
SA1:	CJNE	A,#011H,SA2		;
	JMP	SAMOK			;
SA2:	CJNE	A,#012H,SA3		;
	JMP	SAMOK			;
SA3:	CJNE	A,#013H,SAMERROR	;

SAMOK:
	MOV	R3,#48		;Für Testzwecke!!!!!!!!!!!!!!!!!!
SA1LOOP:
	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,SA1LOOP	
	MOV	A,FORM
	CJNE	A,#9,SAME
	ACALL	ANZEIGEFORM
	JMP	SAMENDE	
SAME:	MOV	DRUCKZAEHLER,#0	;Bei 1.Empfang: Druckzaehler = 0
	MOV	FORM,#9		;               Form = 9
	LCALL	FORMAT		;
	LCALL	SAMSUNG		;               Anzeige von Samsung
SAMENDE:
	MOV	R3,#1			;Nach erfolgreichem Dekodieren 2ms warten
SALOOP:
	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,SALOOP
	ACALL	REGCLEAR
	RET

;************************************
;*		Japan Auswertung		*
;************************************

JAPERROR:				;Bei Telegrammfehler 60ms warten und dann 2.Versuch
	CLR	TF1
	CLR	TR1
	JNB	JAFEHLER,JAPPE
	CLR	JAFEHLER
	SETB	UNBEKANNT
	RET
JAPPE:SETB	JAFEHLER
	MOV	R3,#60
JARR:	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,JARR
	RET

JAPAN?:
	JB	TF1,JAPERROR
	JB	P1.4,JAPAN?
	CLR	TR1			;
	MOV	STOPCOUNT,#0	;
	MOV	TIMERL,TL1		;
	MOV	TIMERH,TH1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	MOV	A,TIMERH		;Toleranzbereich für Startbit = 600H...6FFH = 1536us...1791us
	CJNE	A,#6,JAPERROR	;
	MOV	R7,#48		;Bitzähler für 48 Bits
	MOV	R6,#0			;
	MOV	R5,#0			;Alle Einlesebytes löschen
	MOV	R4,#0			;
	MOV	R3,#0			;
	MOV	R2,#0			;
	MOV	R1,#0
					;Ausmessen der Lowphase
JAP1:	JNB	P1.4,JAP1		;
	CLR	TR1			;
	MOV	A,TH1			;
	MOV	TIMERL,TL1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	CJNE	A,#2,JAP8		;Wenn Wert = 17CH...2FFH = 380us...767us
	JMP	JAP2			;
JAP8:	CJNE	A,#1,JAPERROR	;
	MOV	A,TIMERL		;
	CJNE	A,#07CH,JAP7	;
	JMP	JAP2			;
JAP7:	JC	JAPERROR		;
JAP2:	JB	TF1,JAPERROR	;
	JB	P1.4,JAP2		;
	CLR	TR1			;
	MOV	A,TH1			;
	MOV	TIMERL,TL1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	CJNE	A,#2,JAP5		;
	JMP	JAPNULL		;
JAP5:	CJNE	A,#1,JAP3		;
	MOV	A,TIMERL		;
	CJNE	A,#040H,JAP6	;
	JMP	JAPNULL		;
JAP6:	JC	JAP7			;
JAPNULL:				;
	CLR	C			;
	JMP	JAP4			;
JAP3:	SETB	C			;
JAP4:	MOV	A,R6			;Bitwert in R1,R2,R3,R4,R5 und R6 durch Rotation einschreiben
	RRC	A			;		#
	MOV	R6,A			;		#
	MOV	A,R5			; 		#
	RRC	A			;		#
	MOV	R5,A			;		#
	MOV	A,R4			;		#
	RRC	A			;		#
	MOV	R4,A			;		#
	MOV	A,R3			;		#
	RRC	A			;		#
	MOV	R3,A			;		#
	MOV	A,R2			;		#
	RRC	A			;		#
	MOV	R2,A			;		#
	MOV	A,R1			;		#
	RRC	A			;		#
	MOV	R1,A			;		#
	DJNZ	R7,JAP1		;
	MOV	DATA1,R1		;Empfangenen Code in Data1...Data6 abspeichern
	MOV	DATA2,R2
	MOV	DATA3,R3
	MOV	DATA4,R4
	MOV	DATA5,R5
	MOV	DATA6,R6
	MOV	KOMMANDOL,R5
	MOV	KOMMANDOH,#0
	MOV	ADRESSE,R4
	MOV	A,FORM
	CJNE	A,#4,JAPE
	ACALL	ANZEIGEFORM
	JMP	JAPENDE	
JAPE:	MOV	DRUCKZAEHLER,#0	;Bei 1.Empfang: Druckzaehler = 0
	MOV	FORM,#4		;               Form = 4
	LCALL	FORMAT		;
	LCALL	JAPAN			;               Anzeige von Japan
JAPENDE:
	MOV	R3,#45		;Nach erfolgreichem Dekodieren 45ms warten
JALOOP:
	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,JALOOP
	ACALL	REGCLEAR
	RET

;************************************
;*	Register vorbereiten		*
;************************************

REGCLEAR:
	CLR	UNBEKANNT
XREGCLEAR:
	MOV	FEHLER,#0
	CLR	AUSWERT
	CLR	TR1
	CLR	TF1
	RET

;************************************
;*		NEC Auswertung		*
;************************************

NECERROR:
	CLR	TF1
	CLR	TR1
	SETB	UNBEKANNT
	RET
	
NEC?:	JB	TF1,NECERROR	;
	JB	P1.4,NEC?		;
	CLR	TR1			;
	MOV	STOPCOUNT,#0	;
	MOV	TIMERL,TL1		;
	MOV	TIMERH,TH1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	MOV	A,TIMERH		;Toleranzbereich für Startbit = 1100H...11FFH = 4352us...4607us
	CJNE	A,#010H,NEC7	;
	JMP	NECOK			;
NEC7:	CJNE	A,#011H,NEC8	;
	JMP	NECOK			;
NEC8:	CJNE	A,#012H,REPEAT	;
	JMP	NECOK			;
REPEAT:
	MOV	A,TIMERH		;Toleranzbereich für Repeatbit 700H...8FFH = 1792us...2303us
	CJNE	A,#7,REP1		;
	JMP	REPTEST		;
REP1:	CJNE	A,#8,NECERROR	;
REPTEST:				;
	MOV	A,FORM		;Repeatcode nur akzeptieren, wenn vorher NEC bereits decodiert worden ist
	CJNE	A,#3,NECERROR	;
	LJMP	NEWART		;
NECOK:MOV	R7,#32		;Bitzähler für 32 Bits
	MOV	R5,#0			;Alle Einlesebytes löschen
	MOV	R4,#0			;
	MOV	R3,#0			;
	MOV	R2,#0			;
					;Ausmessen der Lowphase
NEC1:	JNB	P1.4,NEC1		;
	CLR	TR1			;
	MOV	A,TH1			;Wenn Wert = 190H...2FFH = 400us...767us
	CJNE	A,#2,NECERROR	;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
NEC2:	JB	TF1,NECERROR	;
	JB	P1.4,NEC2		;
	CLR	TR1			;
	MOV	A,TH1			;
	MOV	TIMERL,TL1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	CJNE	A,#2,NEC5		;
	JMP	NECNULL		;
NEC9:	JMP	NECERROR
NEC5:	CJNE	A,#1,NEC3		;
	MOV	A,TIMERL		;
	CJNE	A,#090H,NEC6	;
	JMP	NECNULL		;
NEC6:	JC	NEC9			;
NECNULL:				;
	CLR	C			;
	JMP	NEC4			;
NEC3:	CJNE	A,#0,NEC3A		;
	JMP	NEC9			;
NEC3A:SETB	C			;
NEC4:	MOV	A,R5			;Bitwert in R2,R3,R4 und R5 durch Rotation einschreiben
	RRC	A			;		#
	MOV	R5,A			;		#
	MOV	A,R4			;		#
	RRC	A			;		#
	MOV	R4,A			;		#
	MOV	A,R3			;		#
	RRC	A			;		#
	MOV	R3,A			;		#
	MOV	A,R2			;		#
	RRC	A			;		#
	MOV	R2,A			;		#
	DJNZ	R7,NEC1		;
	MOV	DATA1,R2		;Empfangenen Code in Data1...Data4 abspeichern
	MOV	DATA2,R3
	MOV	DATA3,R4
	MOV	DATA4,R5
	MOV	ADRESSE,R2
	MOV	KOMMANDOL,R4
	MOV	KOMMANDOH,#0
	MOV	A,FORM
	CJNE	A,#3,NECE
	ACALL	ANZEIGEFORM
	JMP	NEENDE	
NECE:	MOV	FORM,#3
	MOV	DRUCKZAEHLER,#0
	LCALL	FORMAT
	LCALL	NEC
	ACALL	DISPLAY
NEENDE:
NEWART:
	MOV	R3,#30		;Nach erfolgreichem Dekodieren 30ms warten
NELOOP:
	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,NELOOP
	ACALL	REGCLEAR
	RET
	
;************************************
;*	Anzeige von UNKNOWN		*
;************************************

UNKNOWN?:
	CLR	TR1
	CLR	TF1
	CLR	UNBEKANNT
	MOV	FEHLER,#0		;
	MOV	DRUCKZAEHLER,#0
	MOV	FORM,#8
	LCALL	FORMAT
	LCALL	UNKNOWN
	MOV	R3,#250		;250ms warten
UN:	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,UN
	RET

ERROR:CLR	TR1
	CLR	TF1			;
	JNB	SEKUNDE,ERROR
	CLR	SEKUNDE
ERROR2:
	CLR	AUSWERT
	CLR	SIRCSERROR
	JNB	SEKUNDE,ERROR2
	RET				;

;************************************************
;*		SIRCS Auswertung				*
;************************************************

SIERROR:
	CLR	TF1
	JNB	SIRCSERROR,UNBE
	CLR	SIRCSERROR
	SETB	UNBEKANNT
	RET
UNBE:	SETB	SIRCSERROR
	CLR	TF1
	MOV	R3,#20
SIERR:MOV	A,#225		;Bei Fehler: 20ms warten und dann nochmals versuchen
	ACALL	WAIT
	DJNZ	R3,SIERR
	CLR	AUSWERT
	RET

SIRCS?:
	JB	TF1,SIERROR
	JB	P1.4,SIRCS?
	CLR	TR1			;
	MOV	STOPCOUNT,#0	;
	MOV	TIMERL,TL1		;
	MOV	TIMERH,TH1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	MOV	A,TIMERH		;Toleranzbereich für Startbit = 190H...2FFH = 400us...767us
	CJNE	A,#2,SIR8		;
	JMP	SIEROK		;
SIR8:	CJNE	A,#1,SIERROR	;
	MOV	A,TIMERL		;
	CJNE	A,#090H,SIR9	;
	JMP	SIEROK		;
SIR9:	JC	SIERROR		;
SIEROK:				;
	MOV	R7,#24		;Bitzähler (max. 20 Bits werden aber nur ausgewertet)
	MOV	R5,#0			;Alle Einlesebytes löschen
	MOV	R4,#0			;
	MOV	R3,#0			;
SIR0:	SETB	TR1			;Ausmessen der Lowphase
SIR1:	JNB	P1.4,SIR1		;
	CLR	TR1			;
	MOV	A,TH1			;Wenn Wert = 512us...767us
	CJNE	A,#2,SIR2		;
SIR5:	CLR	C			;Dann 0 - Bit
	JMP	SIR3			;
SIR2:	CJNE	A,#0,SIR4		;
	JMP	SIR5			;
SIR4:	SETB	C			;ELSE 1 - Bit
SIR3:	MOV	A,R5			;Bitwert in R4,R5 und R6 durch Rotation einschreiben
	RRC	A			;		#
	MOV	R5,A			;		#
	MOV	A,R4			;		#
	RRC	A			;		#
	MOV	R4,A			;		#
	MOV	A,R3			;		#
	RRC	A			;		#
	MOV	R3,A			;
	MOV	A, #140		;nochmal ~550us warten
	ACALL	WAIT			;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	DJNZ	R7,SIR0		;und das nächste Bit einlesen
	CLR	SIRCSERROR
	MOV	DATA1,R3		;
	MOV	DATA2,R4		;
	MOV	DATA3,R5		;
	MOV	A,R3			;Befehl extrahieren
	ANL	A,#7FH		;
	MOV	KOMMANDOL,A		;
	MOV	KOMMANDOH,#0	;
	MOV	A,R4			;Adresse extrahieren
	ANL	A,#0FH		;
	MOV	ADRESSE,A		;
	MOV	A,R3			;
	JB	ACC.7,SIR6
	CLR	C
	JMP	SIR7
SIR6:	SETB	C
SIR7:	MOV	A,ADRESSE
	RLC	A
	MOV	ADRESSE,A
	MOV	A,FORM
	CJNE	A,#5,SIRE
	MOV	LC1+11,#020H	;Stellen für ext. löschen
	MOV	LC1+12,#020H
	MOV	LC1+13,#020H
	ACALL	ANZEIGEFORM
	JMP	SIREE	
SIRE:	MOV	FORM,#5
	MOV	DRUCKZAEHLER,#0
	LCALL	FORMAT
	LCALL	SIRCS
SIREE:
	ACALL	REGCLEAR
	MOV	R3,#3		;Nach erfolgreichem Dekodieren 3ms warten
SIRLOOP:
	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,SIRLOOP
	RET

;************************************************
;*		MOTOROLA Auswertung			*
;************************************************

MOERROR:
	SETB	UNBEKANNT
MOERROR2:
	CLR	AUSWERT
	RET


MOTOROLA?:
MOTO:	JB	TF1,MOERROR		;Highphase des Pre-Bits ausmessen
	JB	P1.4,MOTO		;
	CLR	TR1			;
	MOV	STOPCOUNT,#0	;
	MOV	TIMERL,TL1		;
	MOV	TIMERH,TH1		;
	MOV	A,TIMERH		;Toleranzbereich = 900H...AFFH = 2304us...2815us
	CJNE	A,#9,MOT1		;
	JMP	MOT2			;
MOT1:	CJNE	A,#0AH,MOERROR	;
MOT2:	MOV	A,#60			;Startbit muß vorhanden sein
	ACALL	WAIT			;		#
	JB	P1.4,MOERROR	;		#
MOT4:	JNB	P1.4,MOT4
	MOV	A,#192
	ACALL	WAIT
MOT3:	 MOV     R6,#0
       MOV     R7,#9           ; Bitzähler
       MOV     R5,#0           ; Kommando und Adressbytes löschen
       MOV     R4,#0           ;
NXT:	 MOV     A,P1		;1. mal einlesen
       ANL     A,#010H		;
       MOV     R6,A		;
       MOV     A, #128		;~512us Wartezeit
       ACALL   WAIT		;
       MOV     A,P1		;2. mal einlesen
       ANL     A,#010H		;
       CLR     C			;
       SUBB    A,R6		;Beide eingelesene Werte dürfen nicht übereinstimmen!
       JZ      MOERROR		;
					;
       MOV     A,R5		;Bitwert in R4 und R5 durch Rotation einschreiben
       RRC     A			;		#
       MOV     R5,A		;		#
       MOV     A,R4		;		#
       RRC     A			;		#
       MOV     R4,A		;		#
       MOV     A, #128		;nochmal ~512us warten
       ACALL   WAIT		;
       DJNZ    R7, NXT		;und das nächste Bit einlesen
	JB	AUSWERT,CODEFREI
	MOV	A,R4			;Das erste Protokoll darf nur Nullen enthalten (Starttelegramm)
	CJNE	A,#0,MOERROR2
	MOV	A,R5
	CJNE	A,#0,MOERROR2
	SETB	AUSWERT
	MOV	R7,#15
WART:	MOV	A,#255
	ACALL	WAIT
	DJNZ	R7,WART
	RET
CODEFREI:
	CLR	AUSWERT
	MOV	A,R4			;Entgegengesetzt zum RC5 Code
	CPL	A
	ANL	A,#080H		;weil Code aus 9 Bits besteht, und in R5 nur ein Bit relevant ist
	MOV	R4,A
	MOV	KOMMANDOL,A
	MOV	A,R5
	CPL	A
	MOV	R5,A
	MOV	KOMMANDOH,A
	MOV	R7,#7
	CLR	C
EINREIH:
      MOV     A,R5
      RRC     A			
      MOV     R5,A		
      MOV     A,R4		
      RRC     A			
      MOV     R4,A				
	DJNZ	R7,EINREIH
 	MOV	DATA1,R4      
	MOV	DATA2,R5
	MOV	A,FORM
	CJNE	A,#7,MOTOR
	ACALL	ANZEIGEFORM
	JMP	MOTEE	
MOTOR:MOV	FORM,#7
	MOV	DRUCKZAEHLER,#0
	LCALL	FORMAT
	LCALL	MOTOROLA
MOTEE:
	ACALL	REGCLEAR
	MOV	R3,#200		;Nach erfolgreichem Dekodieren 200ms warten
MOTLOOP:
	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,MOTLOOP
	RET

;************************************************
;*		DENON Auswertung				*
;************************************************
;Nach der 1.Lowphase muß sich eine Highphase <1900us und >=512us anschließen
DEERROR:
	SETB	UNBEKANNT
	RET
DENON?:
	MOV     R7,#15          ;Bitzähler
      MOV     R5,#0           ;Kommando und Adressbytes löschen
      MOV     R4,#0           ;
DENO:	JB	TF1,DEERROR		;Highphase ausmessen (Hier Überlauf des Timers als Fehler werten (65ms)
	JB	P1.4,DENO		;
	MOV	STOPCOUNT,#0	;
DE1:	CLR	TR1			;
	MOV	TIMERL,TL1		;
	MOV	TIMERH,TH1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	MOV	A,TIMERH		;
	CJNE	A,#7,DE2		;
	MOV	A,TIMERL		;
	CJNE	A,#06CH,DE2A	;
	JMP	DEERROR		;
DE2A:	JC	DENONEINS		;
	JMP	DEERROR		;
DE2:	JC	DE3			;
	LJMP	XREC80		;Wenn Highphase zu lang, dann könnte es noch RECS80 Format sein
XDE2:	JMP	DEERROR		;
DE3:	CJNE	A,#2,DE4		;
	JMP	DENONNULL		;
DE4:	JC	XDE2			;
	JMP	DENONEINS		;
DENONNULL:
	CLR	C
	JMP	DEWEITER
DENONEINS:
	SETB	C
DEWEITER:
	CLR	TR1
	MOV	A,R4			;Bitwert in R4 und R5 durch Rotation einschreiben
	RLC	A			;		#
	MOV	R4,A			;		#
	MOV	A,R5			;		#
	RLC	A			;		#
 	MOV	R5,A			;		#
	MOV	A,#50			;
 	ACALL	WAIT			;
DE5:	JNB	P1.4,DE5		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
DE6:	JB	P1.4,DE6
	DJNZ	R7,DENO		;und das nächste Bit einlesen
	MOV	DATA1,R4
	MOV	DATA2,R5
	MOV	A,R5
	RR	A
	RR	A
	ANL	A,#00011111B
	MOV	ADRESSE,A
	MOV	KOMMANDOL,DATA1
	MOV	A,DATA2
	ANL	A,#00000011B
	MOV	KOMMANDOH,A
	MOV	A,FORM
	CJNE	A,#6,DE7
	ACALL	ANZEIGEFORM	
	JMP	DEENDE
DE7:	MOV	DRUCKZAEHLER,#0
	MOV	FORM,#6
	LCALL	FORMAT
	LCALL	DENON
DEENDE:
	ACALL	REGCLEAR
	MOV	R3,#37		;Nach erfolgreichem Dekodieren 37ms warten
DENLOOP:
	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,DENLOOP
	RET

;************************************************
;*	Welche Anzeige ist gerade aktuell?		*
;************************************************

ANZEIGEFORM:
	MOV	A,DRUCKZAEHLER
	CJNE	A,#1,DE8
	LCALL	ADRESSWERT		;
	RET
DE8:	CJNE	A,#2,DE9
	LCALL	COMMANDWERT		;
	RET
DE9:	CJNE	A,#3,DE10
	LCALL	CODWERT		;
DE10:	RET


;************************************************
;*			RC5 Auswertung			*
;************************************************

RC5ERROR:
	SETB	UNBEKANNT
	CLR	AUSWERT
	RET
YABT:	JMP	RC5ERROR
RC5?:
	 MOV     R6,#0
       MOV     R7,#12          ; Bitzähler
       MOV     R5,#0           ; RC5 Kommando und Adressbytes löschen
       MOV     R4,#0           ;
	MOV	STOPCOUNT,#0	;
HIGHBIT:
       JB      P1.4,HIGHBIT	;
       MOV     A, #110
       ACALL   WAIT
       MOV     A, #220
       ACALL   WAIT
NXTBIT:
	 MOV     A,P1		;1. mal einlesen
       ANL     A,#010H		;
       MOV     R6,A		;
       MOV     A, #220		;~900us Wartezeit
       ACALL   WAIT		;
       MOV     A,P1		;2. mal einlesen
       ANL     A,#010H		;
       CLR     C			;
       SUBB    A,R6		;Beide eingelesene Werte dürfen nicht übereinstimmen!
       JZ      YABT		;
					;
       MOV     A,R4		;Bitwert in R4 und R5 durch Rotation einschreiben
       RLC     A			;		#
       MOV     R4,A		;		#
       MOV     A,R5		;		#
       RLC     A			;		#
       MOV     R5,A		;		#
       MOV     A, #215		;nochmal ~900us warten
       ACALL   WAIT		;
       DJNZ    R7, NXTBIT	;und das nächste Bit einlesen
 	MOV	DATA1,R4      
	MOV	DATA2,R5
       MOV     R7,#2
SHIFT:             
       MOV     A,R4
       RLC     A
       MOV     R4,A
       MOV     A,R5
       RLC     A
       MOV     R5,A
       DJNZ    R7, SHIFT
       MOV     A,R4
       RR      A
       RR      A
       MOV     KOMMANDOL,A
	 MOV     A,R5            ;Adress- und Kontrollbits maskieren und abspeichern
	 ANL     A,#1FH          ;
	 MOV     ADRESSE,A	 ;
	MOV	A,FORM
	CJNE	A,#1,RC1
	ACALL	ANZEIGEFORM	
	JMP	R5ENDE
RC1:	MOV	FORM,#1		;Displayanzeige = FORMAT:   RC5
	MOV	DRUCKZAEHLER,#0	;
	LCALL	FORMAT
	LCALL	RC5
R5ENDE:
	ACALL	REGCLEAR
	MOV	R3,#10		;Nach erfolgreichem Dekodieren 10ms warten
RCLOOP:
	MOV	A,#225
	ACALL	WAIT
	DJNZ	R3,RCLOOP
	RET

;************************************************
;*		Warteschleife      		*
;************************************************
;Zeit = Accu * 4us
WAIT:  NOP
       NOP
       DJNZ    ACC,WAIT
       RET


;************************************************
;*		Tastenabfrage				*
;************************************************

TASTE:JNB	P1.7,TAS0		;IF NOT Taste gedrückt
	CLR	GEDRUECKT		;THEN RBIT Gedrueckt
TT:	RET				;
TAS0:	MOV	A,#100		;
	ACALL	WAIT			;
	JB	P1.7,TT		;
	JB	GEDRUECKT,TT	;ELSE IF NOT Bit Gedrueckt
	SETB	GEDRUECKT		;     THEN SBIT Gedrueckt
	MOV	A,FORM		;
	CJNE	A,#0,TAS1		; 	     IF Format = 0
	LCALL	NODATA		;	     THEN Displayanzeige = NO DATA
	ACALL	DISPLAY		;
TAS2:	JNB	SEKUNDE,TAS2	;               1s warten
	CLR	SEKUNDE		;
TAS2A:JNB	SEKUNDE,TAS2A	;
	CLR	SEKUNDE		;
	LCALL	WAITING		;               Displayanzeige = WAITING...
	ACALL	DISPLAY		;
	RET				;
TAS1:	MOV	A,DRUCKZAEHLER	;
	ADD	A,#1			;          ELSE Druckzaehler = Druckzaehler + 1
	MOV	DRUCKZAEHLER,A	;
	CJNE	A,#4,TAS3		;               IF Druckzaehler = 4
	MOV	DRUCKZAEHLER,#0	;               THEN Druckzaehler = 0
	MOV	A,#0			;
	LCALL	FORMAT		;
					;                    Displayanzeige = Format:               
	MOV	A,FORM		;                    IF Form = 1
	CJNE	A,#1,FOR1		;
	LCALL	RC5			;                    THEN Displayanzeige = RC5
	RET				;
FOR1:	CJNE	A,#2,FOR2		;                    ELSE IF Form = 2
	LCALL	RECS80		;                         THEN Displayanzeige = RECS80
	RET				;
FOR2:	CJNE	A,#3,FOR3		;                         ELSE IF Form = 3
	LCALL	NEC			;                              THEN Displayanzeige = NEC
	ACALL	DISPLAY		;
	RET				;
FOR3:	CJNE	A,#4,FOR4		;                              ELSE IF Form = 4
	LCALL	JAPAN			;                                   THEN Displayanzeige = Japan
	ACALL	DISPLAY		;
	RET				;
FOR4:	CJNE	A,#5,FOR5		;                                   ELSE IF Form = 5
	LCALL	SIRCS			;                                        THEN Displayanzeige = SIRCS
	RET				;
FOR5:	CJNE	A,#6,FOR6		;                                        ELSE IF Form = 6
	LCALL	DENON			;                                             THEN Displayanzeige = DENON
	RET				;
FOR6:	CJNE	A,#7,FOR7		;                                             ELSE IF Form = 7
	LCALL	MOTOROLA		;                                                  THEN Displayanzeige = Motorola
	RET				;
FOR7:	CJNE	A,#10,FOR8		;
	LCALL	DAEWOO		;                                                  ELSE IF Form = 10
	RET				;                                                       THEN Displayanzeige = Daewoo
FOR8:	CJNE	A,#9,FOR9		;                                                       ELSE IF Form = 9
	LCALL	SAMSUNG		;                                                            THEN Displayanzeige = Samsung
	RET				;			
FOR9:	LCALL	UNKNOWN		;                                                            ELSE Displayanzeige = UNKNOWN
	ACALL	DISPLAY		;                                                            ENDIF
					;                                                       ENDIF
	RET				;                                                  ENDIF
					;                                             ENDIF
					;                                        ENDIF
					;                                   ENDIF
					;                              ENDIF
					;                         ENDIF
					;                    ENDIF
					;               
TAS3:	CJNE	A,#1,TAS4		;               ELSE IF Druckzaehler = 1
	LCALL	ADRESS		;                    THEN Displayanzeige = ADRESS:
	LCALL	ADRESSWERT		;
	RET				;
TAS4:	CJNE	A,#2,TAS5		;                    ELSE IF Druckzaehler = 2
	LCALL	COMMAND		;                         THEN Displayanzeige = COMMAND:
	LCALL	COMMANDWERT		;
	RET				;
TAS5:	LCALL	COD		  	;                         ELSE Displayanzeige = COD:
	LCALL	CODWERT		;
	RET				;
					;                         ENDIF
					;                    ENDIF
					;               ENDIF
					;          ENDIF
					;     ENDIF
TASE:	RET				;ENDIF


;************************************************
;*      Modul: Ausgabe auf dem Display          *
;************************************************

DISPLAY:
	CLR	P1.0			;RS-Ausgang auf 0 fuer die folgende Programmierung
	MOV	P0,#00000010B	;Cursor auf Position 0 setzen
	LCALL	SCHREIBEN		;
	LCALL	BUSY			;
	MOV	R1,#LC1		;
DIS1:	MOV	P0,@R1		;LCxx --> P0
	SETB	P1.0			;RS-Ausgang auf 1 zum Schreiben von Daten
	LCALL	SCHREIBEN		;
	LCALL	BUSY			;
	INC	R1			;LCxx = LCxx + 1
	CJNE	R1,#LC1+8,DIS1	;
	CLR	P1.0			;
	MOV	P0,#11000000B	;Adresse 40 wählen
	LCALL	SCHREIBEN		;
	LCALL	BUSY			;
DIS2:	MOV	P0,@R1		;
	SETB	P1.0			;
	LCALL	SCHREIBEN		;
	LCALL	BUSY			;
	INC	R1			;
	CJNE	R1,#LC1+16,DIS2	;
	RET


;************************************************
;*		Codewert darstellen			*
;************************************************

CODWERT:
	MOV	A,FORM		;IF Format = Unknown
	CJNE	A,#8,CO9		;
	LJMP	ADS0			;THEN -- darstellen
	MOV	A,FORM		;
CO9:	CJNE	A,#4,CO1		;ELSE IF Format = Japan
	MOV	A,DATA6		;     THEN Data5/6 darstellen
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+5,A
	MOV	A,DATA6
	SWAP	A
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+4,A

	MOV	A,DATA5
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+7,A
	MOV	A,DATA5
	SWAP	A
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+6,A

CO1:	MOV	A,FORM		;IF Format = Japan oder Nec
	CJNE	A,#4,CO2
	JMP	CO3
CO2:	CJNE	A,#3,CO4
CO3:	MOV	A,DATA4		;THEN Data4 darstellen
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+9,A
	MOV	A,DATA4
	SWAP	A
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+8,A

CO4:	MOV	A,FORM		;IF Format = Japan, Nec oder Sircs
	CJNE	A,#4,CO5		;
	JMP	CO6
CO5:	CJNE	A,#3,CO7
	JMP	CO6
CO7:	CJNE	A,#5,CO8
	MOV	A,DATA3
	CJNE	A,#0,CO6
	JMP	CO8
CO6:	MOV	A,DATA3		;THEN Data3 darstellen (Bei Sircs nur 4 Nibbles, wenn Code kürzer als 17 Bit)
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+11,A
	MOV	A,FORM		;Bei Sircs nur 5 Nibbles (20 Bit) darstellen
	CJNE	A,#5,CO12
	JMP	CO8
CO12:	MOV	A,DATA3
	SWAP	A
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+10,A

CO8:	MOV	A,DATA1
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+15,A
	MOV	A,DATA1
	SWAP	A
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+14,A

	MOV	A,DATA2
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+13,A
	MOV	A,FORM
	CJNE	A,#1,CO11
	JMP	CO10
CO11:	MOV	A,FORM		;Wenn bei Sircs nur 12 Bits übertragen werden, auch nur 12 Bits anzeigen
	CJNE	A,#5,CO15
	MOV	A,DATA2
	SWAP	A
	ANL	A,#0FH
	CJNE	A,#0,CO15
	JMP	CO10
CO15:	MOV	A,FORM		;Bei RECS80 nur 12 Bits anzeigen
	CJNE	A,#2,CO16
	JMP	CO10
CO16:	MOV	A,DATA2
	SWAP	A
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+12,A
CO10:	LCALL	DISPLAY
	RET

;************************************************
;*		Adresswert darstellen			*
;************************************************

ADRESSWERT:
	MOV	A,FORM	;IF Format = Motorola
	CJNE	A,#7,ADS4	;
	JMP	ADS0		;
ADS4:	CJNE	A,#8,ADS1	;OR Format = Unknown
ADS0:	MOV	LC1+14,#02DH;THEN -- darstellen
	MOV	LC1+15,#02DH;
ADS3:	LCALL	DISPLAY	;
	RET			;
ADS1:	MOV	A,ADRESSE	;ELSE Adresswert darstellen
	ANL	A,#0FH	;
	LCALL	WANDELN	;
	MOV	LC1+15,A	;
	MOV	A,FORM	;     Bei RECS80 nur ein Nibble darstellen 
	CJNE	A,#2,ADS5	;
	MOV	A,#020H	;
	JMP	ADS6		;
ADS5:	MOV	A,ADRESSE	;
	SWAP	A		;
	ANL	A,#0FH	;
	LCALL	WANDELN	;
ADS6:	MOV	LC1+14,A	;
	JMP	ADS3		;ENDIF

;************************************************
;*		Kommandowert darstellen			*
;************************************************

COMMANDWERT:
	MOV	A,FORM		;IF Format = Unknown
	CJNE	A,#8,COMM		;
	LJMP	ADS0			;THEN -- darstellen
COMM:	MOV	A,KOMMANDOL
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+15,A
	MOV	A,KOMMANDOL
	SWAP	A
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+14,A
	MOV	A,FORM
	CJNE	A,#10,COM3
	JMP	COM2	
COM3:	CJNE	A,#6,COM1		;Bei RC5, DAEWOO, RECS80, NEC, SIRCS, JAPAN nur Kommandol (8 Bit Information) darstellen
	JMP	COM6
COM1:	JC	COM2
COM6:	MOV	A,KOMMANDOH
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+13,A
	MOV	A,FORM		;Bei Denon 12 Bits darstellen
	CJNE	A,#6,COM5
	JMP	COM2
COM5:	MOV	A,KOMMANDOH
	SWAP	A
	ANL	A,#0FH
	LCALL	WANDELN
	MOV	LC1+12,A
COM2:	LCALL	DISPLAY
	RET


;************************************************
;*		Timer 0 Interrupt				*
;************************************************

TIMER0INT:
	PUSH	PSW
	PUSH	ACC
	MOV	A,MILLICOUNT
	ADD	A,#1
	CJNE	A,#16,TIM1
	MOV	A,#0
	SETB	SEKUNDE
TIM1:	MOV	MILLICOUNT,A
	POP	ACC
	POP	PSW
	RETI

;************************************************
;*      Modul: Initialisierung LC-Display       *
;************************************************
; --> P0:	7    6    5    4    3    2    1    0
;  	     DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
;
; --> P1:   7    6    5    4    3    2    1    0
;          ---  ---  ---  ---  ---  R/W  ENA  RS
;
LCD_INIT:
	MOV	P0,#00110000B	;Funktion set
	MOV	P1,#0F8H		;
	ACALL	ENABLE		;
	MOV	P0,#00110000B	;Funktion set
	ACALL	ENABLE		;
	MOV	P0,#00110000B	;Funktion set
	ACALL	ENABLE		;
	MOV	P0,#00111100B	;1 Zeile, 5 x 10 Dots
	ACALL	ENABLE		;
	MOV	P0,#00001000B	;Display off
	ACALL	ENABLE		;
	MOV	P0,#00001100B	;Display on
	ACALL	ENABLE		;
	MOV	P0,#00000110B	;Entry Mode, Inkrement Cursor-Position
	ACALL	ENABLE		;
	RET				;

;************************************************
;*      Modul: Einschreiben von Daten           *
;************************************************

;Dieses Modul besitzt 2 Einsprungadressen: ENABLE wird waehrend der Ini-
;tialisierungsphase des Displays gebraucht, da hier noch nicht das 
;Busy-Flag abgefragt werden darf.
;
;SCHREIBEN: Durch den Wechsel des ENA-Bits werden Daten eingeschrieben

ENABLE:
	MOV	R7,#0FFH	;Sicherheitszeitschleife fuer das Ein-
ZEI1:	NOP			;schreiben von Daten waehrend der Initia-
	NOP			;lisierungsphase des Displays
	NOP			;
	NOP			;
	NOP			;
	NOP			;
	NOP			;
	NOP			;
	DJNZ	R7,ZEI1		;
SCHREIBEN:			;
	SETB	P1.1		;Enable-Ausgang setzen
	NOP			;
	NOP			;
	NOP			;
	CLR	P1.1		;Enable-Ausgang zuruecksetzen und damit die
	RET			;anliegenden Daten einschreiben

;*************************************************
;*		Abfrage des Busy-Flags		 *
;*************************************************
;
; --> P1:       7    6    5    4    3    2    1    0
;              ---  ---  ---  ---  ---  R/W  ENA  RS

BUSY:	PUSH	ACC
BUS1:	PUSH	B
	ORL	P0,#0FFH
	CLR	P1.0
	SETB	P1.2
	CLR	P1.1
	NOP
	SETB	P1.1
	NOP
	MOV	A,P0
	MOV	B,A
	CLR	P1.1
	NOP
	SETB	P1.1
	NOP
	MOV	A,P0
	ORL	A,B
	CLR	P1.1
	NOP
	CLR	P1.2
	POP	B
	JB	ACC.7,BUS1
	POP	ACC
	RET

;*************************************************
;*		Anzeige von RECS80			 *
;*************************************************

RECS80:
	MOV	R0,#LC9		;
	MOV	@R0,#052H		;R
	INC	R0			;
	MOV	@R0,#045H		;E
	INC	R0			;
	MOV	@R0,#043H		;C
	INC	R0			;
	MOV	@R0,#053H		;S
	INC	R0			;
	MOV	@R0,#038H		;8
	INC	R0			;
	MOV	@R0,#030H		;0
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von NEC				 *
;*************************************************

NEC:	MOV	R0,#LC9		;
	MOV	@R0,#04EH		;N
	INC	R0			;
	MOV	@R0,#045H		;E
	INC	R0			;
	MOV	@R0,#043H		;C
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von RC5				 *
;*************************************************

RC5:	MOV	R0,#LC9		;
	MOV	@R0,#052H		;R
	INC	R0			;
	MOV	@R0,#043H		;C
	INC	R0			;
	MOV	@R0,#035H		;5
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von COD:				 *
;*************************************************

COD:	MOV	R0,#LC1		;
	MOV	@R0,#043H		;C
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#044H		;D
	INC	R0
	MOV	@R0,#03AH		;:
	INC	R0			;
C1:	MOV	@R0,#020H		;
	INC	R0			;
	CJNE	R0,#LC1+16,C1	;
	RET

;*************************************************
;*		Anzeige von JAPAN				 *
;*************************************************

JAPAN:MOV	R0,#LC9		;
	MOV	@R0,#04AH		;J
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#050H		;P
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#04EH		;N
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von SIRCS				 *
;*************************************************

SIRCS:MOV	R0,#LC9		;
	MOV	@R0,#053H		;S
	INC	R0			;
	MOV	@R0,#049H		;I
	INC	R0			;
	MOV	@R0,#052H		;R
	INC	R0			;
	MOV	@R0,#043H		;C
	INC	R0			;
	MOV	@R0,#053H		;S
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von DENON				 *
;*************************************************

DENON:MOV	R0,#LC9		;
	MOV	@R0,#044H		;D
	INC	R0			;
	MOV	@R0,#045H		;E
	INC	R0			;
	MOV	@R0,#04EH		;N
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#04EH		;N
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von NO DATA			 *
;*************************************************

NODATA:
	MOV	R0,#LC1		;
	MOV	@R0,#04EH		;N
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#020H		;
	INC	R0			;
	MOV	@R0,#044H		;D
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#054H		;T
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
NO1:	MOV	@R0,#020H		;
	INC	R0			;
	CJNE	R0,#LC1+16,NO1	;
	RET

;*************************************************
;*		Anzeige von WAITING...			 *
;*************************************************

WAITING:
	MOV	R0,#LC1		;
	MOV	@R0,#057H		;W
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#049H		;I
	INC	R0			;
	MOV	@R0,#054H		;T
	INC	R0			;
	MOV	@R0,#049H		;I
	INC	R0			;
	MOV	@R0,#04EH		;N
	INC	R0			;
	MOV	@R0,#047H		;G
	INC	R0			;
	MOV	@R0,#02EH		;.
	INC	R0			;
	MOV	@R0,#02EH		;.
	INC	R0			;
	MOV	@R0,#02EH		;.
	INC	R0			;
WA1:	MOV	@R0,#020H		;
	INC	R0			;
	CJNE	R0,#LC1+16,WA1	;
	RET

 
;************************************************
;*	Umwandeln der Werte in Displayform		*
;************************************************
;Der zu wandelnde Wert wird in A übergeben
WANDELN:
	CJNE	A,#10,NOT10
	MOV	A,#041H
	RET
NOT10:JC	ZAHLEN
WERTE:CJNE	A,#0BH,WE1
	MOV	A,#042H
	RET
WE1:	CJNE	A,#0CH,WE2
	MOV	A,#043H
	RET
WE2:	CJNE	A,#0DH,WE3
	MOV	A,#044H
	RET
WE3:	CJNE	A,#0EH,WE4
	MOV	A,#045H
	RET
WE4:	MOV	A,#046H
	RET
ZAHLEN:
	ORL	A,#030H
	RET

;*************************************************
;*		Anzeige von SAMSUNG			 *
;*************************************************

SAMSUNG:
	MOV	R0,#LC1+8		;
	MOV	@R0,#053H		;S
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#04DH		;M
	INC	R0			;
	MOV	@R0,#053H		;S
	INC	R0			;
	MOV	@R0,#055H		;U
	INC	R0			;
	MOV	@R0,#04EH		;N
	INC	R0			;
	MOV	@R0,#047H		;G
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von MOTOROLA			 *
;*************************************************

MOTOROLA:
	MOV	R0,#LC1+8		;
	MOV	@R0,#04DH		;M
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#054H		;T
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#052H		;R
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#04CH		;L
	INC	R0			;
	MOV	@R0,#041H		;A
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von UNKNOWN			 *
;*************************************************

UNKNOWN:
	MOV	R0,#LC9		;
	MOV	@R0,#055H		;U
	INC	R0			;
	MOV	@R0,#04EH		;N
	INC	R0			;
	MOV	@R0,#04BH		;K
	INC	R0			;
	MOV	@R0,#04EH		;N
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#057H		;W
	INC	R0			;
	MOV	@R0,#04EH		;N
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von COMMAND:			 *
;*************************************************

COMMAND:
	MOV	R0,#LC1		;
	MOV	@R0,#043H		;C
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#04DH		;M
	INC	R0			;
	MOV	@R0,#04DH		;M
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#04EH		;N
	INC	R0			;
	MOV	@R0,#044H		;D
	INC	R0
	MOV	@R0,#03AH		;:
	INC	R0			;
COMM1:MOV	@R0,#020H		;
	INC	R0			;
	CJNE	R0,#LC1+14,COMM1	;
	RET

;*************************************************
;*		Anzeige von FORMAT:			 *
;*************************************************

FORMAT:
	MOV	R0,#LC1		;
	MOV	@R0,#046H		;F
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#052H		;R
	INC	R0			;
	MOV	@R0,#04DH		;M
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#054H		;T
	INC	R0			;
	MOV	@R0,#03AH		;:
	INC	R0			;
FO1:	MOV	@R0,#020H		;
	INC	R0			;
	CJNE	R0,#LC1+16,FO1	;
	LCALL	DISPLAY		;
	RET

;*************************************************
;*		Anzeige von ADRESS:			 *
;*************************************************

ADRESS:
	MOV	R0,#LC1		;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#044H		;D
	INC	R0			;
	MOV	@R0,#052H		;R
	INC	R0			;
	MOV	@R0,#045H		;E
	INC	R0			;
	MOV	@R0,#053H		;S
	INC	R0			;
	MOV	@R0,#053H		;S
	INC	R0			;
	MOV	@R0,#03AH		;:
	INC	R0			;
AD1:	MOV	@R0,#020H		;
	INC	R0			;
	CJNE	R0,#LC1+14,AD1	;
	RET

;*************************************************
;*	Modul: Startmeldung auf dem Display		 *
;*************************************************
;Es erscheint folgender Schriftzug nach der Initialisierung:
;CODE ANALYSER V1

STARTMELDUNG:
	MOV	R0,#LC1		;
	MOV	@R0,#043H		;C
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#044H		;D
	INC	R0			;
	MOV	@R0,#045H		;E
	INC	R0			;
	MOV	@R0,#020H		;
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#04EH		;N
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#04CH		;L
	INC	R0			;
	MOV	@R0,#059H		;Y
	INC	R0			;
	MOV	@R0,#053H		;S
	INC	R0			;
	MOV	@R0,#045H		;E
	INC	R0			;
	MOV	@R0,#052H		;R
	INC	R0			;
	MOV	@R0,#020H		;
	INC	R0			;
	MOV	@R0,#056H		;V
	INC	R0			;
	MOV	@R0,#031H		;1
	LCALL	DISPLAY		;
	RET

;************************************
;*		DAEWOO Auswertung		*
;************************************

DAEERROR:
	CLR	P1.6
	SETB	UNBEKANNT
	LCALL	XREGCLEAR
	LJMP	REWART

DAEWOO?:
	JB	TF1,DAEERROR
	JB	P1.4,DAEWOO?
	CLR	TR1
	MOV	STOPCOUNT,#0	;
	MOV	TIMERL,TL1		;
	MOV	TIMERH,TH1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	MOV	A,TIMERH		;Toleranzbereich für Startbit = F00H...1100H = 3840us...4352us
	CJNE	A,#0FH,DAE1		;
	JMP	DAEOK			;
DAE1:	CJNE	A,#010H,DAE2	;
	JMP	DAEOK			;
DAE2:	CJNE	A,#011H,DAEERROR	;
DAEOK:MOV	R7,#8			;Bitzähler für 8 Bits
	MOV	R5,#0			;Einlesebyte löschen
	MOV	R2,#2			;Bytezähler
					;Ausmessen der Lowphase
DA1:	JB	TF1,DAEERROR	;
	JNB	P1.4,DA1		;
	CLR	TR1			;
	MOV	A,TH1			;Wenn Wert = 130H...2FFH = 304us...767us
	MOV	TIMERL,TL1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	CJNE	A,#2,DA12		;
	JMP	DA2			;
DA12:	CJNE	A,#1,DAEERROR	;
	MOV	A,TIMERL		;
	CJNE	A,#090H,DA13	;
	JMP	DA2			;
DA13:	JC	DA9			;
DA2:	JB	TF1,DAEERROR	;
	JB	P1.4,DA2		;
	CLR	TR1			;
	MOV	A,TH1			;
	MOV	TIMERL,TL1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	CJNE	A,#2,DA5		;
	JMP	DAENULL		;
DA9:	JMP	DAEERROR
DA5:	CJNE	A,#1,DA3		;
	MOV	A,TIMERL		;
	CJNE	A,#030H,DA6		;
	JMP	DAENULL		;
DA6:	JC	DA9			;
DAENULL:				;
	CLR	C			;
	JMP	DA4			;
DA3:	SETB	C			;
DA4:	MOV	A,R5			;Bitwert in R5 durch Rotation einschreiben
	RRC	A			;		#
	MOV	R5,A			;		#
	DJNZ	R7,DA1		;
	DJNZ	R2,DA11		;
	SJMP	DAEAUSWERT		;
DA11:	MOV	ADRESSE,R5		;
	MOV	DATA2,R5		;
	MOV	R5,#0			;
	MOV	R7,#8			;
	MOV	R3,#4			;Nach 1.Byte 4ms warten
DALOOP:
	MOV	A,#225
	LCALL	WAIT
	DJNZ	R3,DALOOP


DA10:	JB	TF1,DA9
	JB	P1.4,DA10
	CLR	TR1
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	LJMP	DA1			;
DAEAUSWERT:				;
	MOV	KOMMANDOL,R5	;
	MOV	DATA1,R5		;
	MOV	A,FORM
	CJNE	A,#10,DECE
	LCALL	ANZEIGEFORM
	JMP	DAENDE	
DECE:	MOV	FORM,#10
	MOV	DRUCKZAEHLER,#0
	LCALL	FORMAT
	LCALL	DAEWOO
DAENDE:
	LCALL	REGCLEAR
	MOV	R3,#10			;Nach erfolgreichem Dekodieren 10ms warten
DECLOOP:
	MOV	A,#225
	LCALL	WAIT
	DJNZ	R3,DECLOOP	
	RET

;************************************
;*		RECS80 Auswertung		*
;************************************

REC1ERROR:				;Unterdrückung kurzer Spikes
	LCALL	XREGCLEAR
	RET

RECERROR:
	SETB	UNBEKANNT
	LCALL	XREGCLEAR
	LJMP	REWART

REC80?:
	JB	TF1,REC1ERROR
	JB	P1.4,REC80?
	CLR	TR1			;
	MOV	STOPCOUNT,#0	;
	MOV	TIMERL,TL1		;
	MOV	TIMERH,TH1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
XREC80:
	MOV	A,TIMERH		;Toleranzbereich für Startbit = 1B00H...21FFH = 6912us...8703us
	CJNE	A,#021H,REC1	;
	JMP	RECOK			;
REC1:	JC	REC1A			;
	JMP	RECERROR		;
REC1A:CJNE	A,#01BH,REC2	;
	JMP	RECOK			;
REC2:	JC	RECERROR		;
RECOK:MOV	R1,#10		;Bitzähler für 10 Bits
	MOV	R5,#0			;Alle Einlesebytes löschen
	MOV	R4,#0			;
REC3:	JB	TF1,RECERROR
	JNB	P1.4,REC3		;
	CLR	TR1			;
	MOV	A,TH1			;Wenn Wert = 96H...118H = 150us...280us
	MOV	TIMERL,TL1		;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	CJNE	A,#1,REC4		;
	MOV	A,TIMERL		;
	CJNE	A,#18H,REC5		;
	JMP	BIWERT		;
REC5:	JC	BIWERT		;
	JMP	RECERROR		;
REC4:	MOV	A,TIMERL		;
	CJNE	A,#096H,REC6	;
	JMP	BIWERT		;
REC6:	JC	RECERROR		;
BIWERT:				;
	JB	TF1,RECERROR	;
	JB	P1.4,BIWERT		;
	CLR	TR1			;
	MOV	A,TH1			;
	MOV	TL1,#0		;
	MOV	TH1,#0		;
	SETB	TR1			;
	CJNE	A,#018H,REC7	;
	JMP	RECNULL		;
REC7:	JC	RECNULL		;
	JMP	RECEINS		;
RECNULL:				;
	CLR	C			;
	JMP	REC8			;
RECEINS:
	SETB	C			;
REC8:	MOV	A,R4			;Bitwert in R4 und R5 durch Rotation einschreiben
	RLC	A			;		#
	MOV	R4,A			;		#
	MOV	A,R5			;		#
	RLC	A			;		#
	MOV	R5,A			;		#
	DJNZ	R1,REC3		;
	CLR	TR1			;
FRANK:
	MOV	DATA1,R4		;Empfangenen Code in Data1...Data2 abspeichern
	MOV	DATA2,R5		;
	MOV	A,R4			;
	ANL	A,#03FH		;Kommandobits extrahieren
	MOV	KOMMANDOL,A		;
	MOV	R7,#6			;Adressbits extrahieren
RECROT:				;
	MOV	A,R5			;
	RRC	A			;
	MOV	R5,A			;
	MOV	A,R4			;
	RRC	A			;
	MOV	R4,A			;
	DJNZ	R7,RECROT		;
	ANL	A,#07H		;
	MOV	ADRESSE,A		;
RECTEST:
	MOV	A,FORM
	CJNE	A,#2,RECE
	LCALL	ANZEIGEFORM
	JMP	RECENDE	
RECE:	MOV	FORM,#2
	MOV	DRUCKZAEHLER,#0
	LCALL	FORMAT
	LCALL	RECS80
RECENDE:
	LCALL	REGCLEAR
REWART:
	MOV	R3,#30			;Nach erfolgreichem Dekodieren 50ms warten
RECLOOP:
	MOV	A,#225
	LCALL	WAIT
	DJNZ	R3,RECLOOP
	RET

;*************************************************
;*		Anzeige von DAEWOO			 *
;*************************************************

DAEWOO:
	MOV	R0,#LC1+8		;
	MOV	@R0,#044H		;D
	INC	R0			;
	MOV	@R0,#041H		;A
	INC	R0			;
	MOV	@R0,#045H		;E
	INC	R0			;
	MOV	@R0,#057H		;W
	INC	R0			;
	MOV	@R0,#04FH		;O
	INC	R0			;
	MOV	@R0,#04FH		;O
	LCALL	DISPLAY		;
	RET



	
	END