; Source created with Parsic Version 3.x

; at              : 2011.01.05. 22:27:17


; Project File    : C:\PROGRA~1\Parsic\PROJEK~1\HE\RIC_LM1.PIC

; Project Version : 1.0.209

; Created         : 2009.07.12. 9:43:00

; Last change     : 2011.01.05. 22:27:14

	PROCESSOR 16F873

	INCLUDE P16F873.INC

	RADIX DEC


	__IDLOCS H'0100'

	__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_ON & _XT_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF

; Diverses

ZERO	EQU Z	; ZERO-Flag
CARRY	 EQU C	; CARRY-Flag


; Variable

SYS_WSAV	= 32	; located in Bank 0, 2
SYS_SSAV	= 33	; located in Bank 0, 2
SYS_PSAV	= 34	; located in Bank 0, 2
SYS_TMP1	= 35	; located in Bank 0, 2
SYS_TMP2	= 36	; located in Bank 0, 2
SYS_TMP3	= 37	; located in Bank 0, 2
SYS_TMP4	= 38	; located in Bank 0, 2
SYS_TMP5	= 39	; located in Bank 0, 2
SYS_TMP6	= 40	; located in Bank 0, 2
SYS_TMP9	= 41	; located in Bank 0, 2
SYS_TMP10	= 42	; located in Bank 0, 2
SYS_FSAV	= 43	; located in Bank 0, 2
IISLAVEADR	= 46	; located in Bank 0, 2
IIADR	= 47	; located in Bank 0, 2
IIDATA	= 48	; located in Bank 0, 2
IICOUNT	= 49	; located in Bank 0, 2
IITEMP	= 50	; located in Bank 0, 2
M0	= 51	; located in Bank 0, 2
TR1	= 52	; located in Bank 0, 2
TR1_HI	= 53	; located in Bank 0, 2
S2	= 54	; located in Bank 0, 2
CELSIUS	= 55	; located in Bank 0, 2
CELSIUS_HI	= 56	; located in Bank 0, 2
LT1_FD	= 57	; located in Bank 0, 2
LT2_FD	= 58	; located in Bank 0, 2
LT3_FD	= 59	; located in Bank 0, 2
IIDATA1	= 60	; located in Bank 0, 2
OS1_FD	= 61	; located in Bank 0, 2
S0	= 62	; located in Bank 0, 2
S1	= 63	; located in Bank 0, 2
LT4_FD	= 64	; located in Bank 0, 2
LT5_FD	= 65	; located in Bank 0, 2
LT6_FD	= 66	; located in Bank 0, 2
RAM	= 67	; located in Bank 0, 2
SYS_WSAV2	= 160	; located in Bank 1, 3

	ERRORLEVEL -302	; disable warning (Bankswitching)
	ERRORLEVEL -306	; disable warning (Pageswitching)

;****************************************
;Programmanfang
;****************************************

	ORG 0

	CLRF STATUS	; switch to RAM-Bank 0
	MOVLW HIGH SYS_INIT	; set page
	MOVWF PCLATH
	GOTO SYS_INIT

;****************************************
;Interrupt-Adress
;****************************************

	MOVWF SYS_WSAV	; save register
	SWAPF STATUS,W
	CLRF STATUS	; bank 0
	MOVWF SYS_SSAV
	MOVFW FSR
	MOVWF SYS_FSAV
	MOVFW PCLATH
	MOVWF SYS_PSAV
	CLRF PCLATH


	BTFSS INTCON,T0IF	; TMR0 ?
	GOTO NOTMR0INT
	BCF INTCON,T0IF	; Interrupt quitieren

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	INCFSZ TR1,F
	GOTO SYS_INT_LABEL_0
	INCF TR1_HI,F

SYS_INT_LABEL_0
NOTMR0INT


EXITINT
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVFW SYS_PSAV
	MOVWF PCLATH

	MOVFW SYS_FSAV
	MOVWF FSR
	SWAPF SYS_SSAV,W	; Register zurück
	MOVWF STATUS
	SWAPF SYS_WSAV,F
	SWAPF SYS_WSAV,W

	RETFIE


;****************************************
; Multiplication 8 - Bit
;****************************************

SYSMUL8
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	CLRF SYS_TMP3
	MOVLW 8
	MOVWF SYS_TMP4

SYSMUL8_1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVFW SYS_TMP1
	RRF SYS_TMP2,F

	BTFSC STATUS,CARRY
	ADDWF SYS_TMP3,F

	RLF SYS_TMP1,F
	DECFSZ SYS_TMP4,F

	GOTO SYSMUL8_1

	RETURN

;****************************************
; Division 8 - Bit
;****************************************

SYSDIV8
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVF SYS_TMP2,F
	BTFSC STATUS,ZERO
	GOTO SYSDIV8_ERROR
	CLRF SYS_TMP3	; Ergebnis löschen
	MOVLW 1
	MOVWF SYS_TMP4

SYSDIV8_0
	BTFSC SYS_TMP2,7	; OP2 linksbündig
	GOTO SYSDIV8_1
	INCF SYS_TMP4,F
	BCF STATUS,CARRY
	RLF SYS_TMP2,F
	GOTO SYSDIV8_0

SYSDIV8_1
	MOVFW SYS_TMP2	; vergleichen
	SUBWF SYS_TMP1,F	; F-W -> W

	BTFSC STATUS,CARRY
	GOTO SYSDIV8_2
	ADDWF SYS_TMP1,F	; F+W -> F
	BCF STATUS,CARRY

SYSDIV8_2
	RLF SYS_TMP3,F
	RRF SYS_TMP2,F
	DECFSZ SYS_TMP4,F
	GOTO SYSDIV8_1

	RETURN

SYSDIV8_ERROR
	MOVLW 255
	MOVWF SYS_TMP3
	RETURN

;****************************************
; Subroutines
;****************************************

;***************************************************
; Subroutines for LB1
;***************************************************

LCD_LB1_INIT
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF PORTB,4	; ir-register
LCD_LB1_L1
	CALL LCD_LB1_OUT4
	DECFSZ SYS_TMP1,F
	GOTO LCD_LB1_L1

	MOVFW PORTB
	ANDLW H'F0'
	IORLW B'0011'	; Function Set
	MOVWF PORTB

	BSF PORTB,5	; write
	GOTO $+1
	BCF PORTB,5

	BSF SYS_TMP1,5	; wait
LCD_LB1_L2
	CALL LCD_LB1_OUT4
	DECFSZ SYS_TMP1,F
	GOTO LCD_LB1_L2

	BSF PORTB,5	; write
	GOTO $+1
	BCF PORTB,5

	CALL LCD_LB1_OUT4

	BSF PORTB,5	; write
	GOTO $+1
	BCF PORTB,5

	CALL LCD_LB1_OUT4

	BCF PORTB,0	; 4-Bit Interface

	BSF PORTB,5	; write
	GOTO $+1
	BCF PORTB,5

	CALL LCD_LB1_OUT4

	MOVLW B'00101000'	; Function Set 4-Bit,2-Lines
	CALL LCD_LB1_OUT

	MOVLW B'00001100'	; Display on, Cursor off, Blink off
	CALL LCD_LB1_OUT

	MOVLW B'00000110'	; Entrymode set
	CALL LCD_LB1_OUT

LCD_LB1_CLR
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF PORTB,4	; ir-register
	MOVLW B'00000001'	; Display clear
	CALL LCD_LB1_OUT

	BSF SYS_TMP1,5	; wait
LCD_LB1_L3
	CALL LCD_LB1_OUT4
	DECFSZ SYS_TMP1,F
	GOTO LCD_LB1_L3
	GOTO LCD_LB1_OUT4

;***************************************************

LCD_LB1_GOTOXY
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF PORTB,4	; ir-register
	MOVLW H'40'
	BTFSC SYS_TMP2,0	; Ypos
	ADDWF SYS_TMP1,F
	MOVLW D'20'
	BTFSC SYS_TMP2,1	; Ypos
	ADDWF SYS_TMP1,F
	BSF SYS_TMP1,7	; select dd-ram
	GOTO LCD_LB1_OUT1

;***************************************************

LCD_LB1_WRITESTR
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BSF PORTB,4	; dd-ram
LCD_LB1_WRITESTR1
	CALL LCD_LB1_CHAROUT
	BSF INTCON,GIE
	ANDLW H'FF'	; last is zero
	BTFSC STATUS,ZERO
	RETURN

	MOVWF SYS_TMP1
	MOVLW HIGH LCD_LB1_OUT1	; set page
	MOVWF PCLATH
	CALL LCD_LB1_OUT1
	INCFSZ SYS_TMP4,F	; next char
	GOTO LCD_LB1_WRITESTR1
	INCF SYS_TMP5,F	; next page
	GOTO LCD_LB1_WRITESTR1

LCD_LB1_CHAROUT
	BCF INTCON,GIE
	MOVFW SYS_TMP5
	MOVWF PCLATH
	MOVFW SYS_TMP4
	MOVWF PCL

;***************************************************

LCD_LB1_DEZO10000

	MOVLW LOW 10000
	MOVWF SYS_TMP1
	MOVLW HIGH 10000
	MOVWF SYS_TMP2

	CALL LCD_LB1_CONVERTDEZ
	MOVF SYS_TMP9,F
	BTFSS STATUS,ZERO
	GOTO LCD_LB1_DEZO1000
	CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO1000

	MOVLW LOW 1000
	MOVWF SYS_TMP1
	MOVLW HIGH 1000
	MOVWF SYS_TMP2

	CALL LCD_LB1_CONVERTDEZ
	MOVF SYS_TMP9,F
	BTFSS STATUS,ZERO
	GOTO LCD_LB1_DEZO100
	CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO100

	MOVLW LOW 100
	MOVWF SYS_TMP1
	CLRF SYS_TMP2

	CALL LCD_LB1_CONVERTDEZ
	MOVF SYS_TMP9,F
	BTFSS STATUS,ZERO
	GOTO LCD_LB1_DEZO10
	CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO10

	MOVLW LOW 10
	MOVWF SYS_TMP1
	CLRF SYS_TMP2

	CALL LCD_LB1_CONVERTDEZ
	MOVF SYS_TMP9,F
	BTFSS STATUS,ZERO
	GOTO LCD_LB1_DEZO1
	CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO1
	MOVLW 48
	ADDWF SYS_TMP4,W
	GOTO LCD_LB1_WRITECHAR

;***************************************************

LCD_LB1_CONVERTDEZ
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVF SYS_TMP9,F
	BTFSS STATUS,ZERO
	DECF SYS_TMP9,F
	CLRF SYS_TMP6
LCD_LB1_CONVERTDEZ2
	INCF SYS_TMP6,F

	MOVFW SYS_TMP1
	SUBWF SYS_TMP4,F

	MOVFW SYS_TMP2
	BTFSS STATUS,CARRY
	INCFSZ SYS_TMP2,W
	SUBWF SYS_TMP5,F
	BTFSC STATUS,CARRY
	GOTO LCD_LB1_CONVERTDEZ2

	MOVFW SYS_TMP2
	ADDWF SYS_TMP5,F
	MOVFW SYS_TMP1
	ADDWF SYS_TMP4,F
	BTFSC STATUS,CARRY
	INCF SYS_TMP5,F

	DECF SYS_TMP6,W
	BTFSS STATUS,ZERO
	BSF SYS_TMP10,0
	RETURN

;***************************************************

LCD_LB1_CONVERTHEX
	ANDLW 15
	MOVWF SYS_TMP1
	MOVLW 48
	ADDWF SYS_TMP1,F
	MOVLW 58
	SUBWF SYS_TMP1,W
	BTFSS STATUS,CARRY
	GOTO $+3
	MOVLW 7
	ADDWF SYS_TMP1,F
	MOVFW SYS_TMP1

;***************************************************

LCD_LB1_WRITECHAR
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BSF PORTB,4	; dd-ram

;***************************************************

LCD_LB1_OUT
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF SYS_TMP1	; store
LCD_LB1_OUT1
	CLRF SYS_TMP3	; LCDWriteStr (first nibble)
LCD_LB1_OUT2
	SWAPF SYS_TMP1,W	;high nibble
LCD_LB1_OUT3
	ANDLW H'0F'	; mask
	MOVWF SYS_TMP2	; store
	MOVFW PORTB	; load port
	ANDLW H'F0'	; mask
	IORWF SYS_TMP2,W	; add cmd
	MOVWF PORTB	; out

	BSF PORTB,5	; E high
	GOTO $+1
	BCF PORTB,5	; E low

	BTFSC SYS_TMP3,3	; ready ?
	GOTO LCD_LB1_OUT4	; yes
	BSF SYS_TMP3,3	; second nibble
	MOVFW SYS_TMP1
	GOTO LCD_LB1_OUT3	; next nibble

LCD_LB1_OUT4
LCD_LB1_OUTV
	DECFSZ SYS_TMP3,F
	GOTO LCD_LB1_OUTV
	RETURN

;***************************************************

LCD_LB1_CHECKNULL
	BTFSS STATUS,ZERO
	DECF SYS_TMP9,F
	MOVWF SYS_TMP1
	BTFSS STATUS,ZERO
	BSF SYS_TMP10,0
	MOVLW 48
	BTFSC SYS_TMP10,0
	ADDWF SYS_TMP1,f
	MOVLW 32
	BTFSS SYS_TMP10,0
	ADDWF SYS_TMP1,F
	MOVFW SYS_TMP1
	GOTO LCD_LB1_WRITECHAR
; 0108
BEGININC86
	ERRORLEVEL +306	; enable warning (Pageswitching)
	ERRORLEVEL +302	; enable warning (Bankswitching)

	INCLUDE LM75_I2C.INC

	ERRORLEVEL -302	; disable warning (Bankswitching)
	ERRORLEVEL -306	; disable warning (Pageswitching)
ENDINC86


;****************************************
;Initialisierung
;****************************************


SYS_INIT

	MOVLW B'00100000'
	MOVWF INTCON

; Set output before direction

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVLW B'00000000'
	MOVWF PORTA

	MOVLW B'00000000'
	MOVWF PORTB

	MOVLW B'00000000'
	MOVWF PORTC

	MOVLW 143
	BSF STATUS,RP0	; Bank 1
	MOVWF OPTION_REG

	MOVLW 6	; all Digital
	MOVWF ADCON1

; Richtung setzen

	MOVLW B'11111111'
	MOVWF TRISA

	MOVLW B'11000000'
	MOVWF TRISB

	MOVLW B'11111110'
	MOVWF TRISC

; init vars


; Clear RAM

	BCF STATUS,IRP
	MOVLW 32
	MOVWF FSR
CR1
	CLRF INDF
	INCF FSR,F
	
	BTFSS FSR,7
	GOTO CR1
	BSF FSR,5
CR2
	CLRF INDF
	INCF FSR,F
	BTFSC FSR,7
	GOTO CR2


;***************************************************
; Init LCD -> LB1
;***************************************************

	CALL LCD_LB1_INIT

BEGININC145
	ERRORLEVEL +306	; enable warning (Pageswitching)
	ERRORLEVEL +302	; enable warning (Bankswitching)

	INCLUDE LM75_AV.INC

	ERRORLEVEL -302	; disable warning (Bankswitching)
	ERRORLEVEL -306	; disable warning (Pageswitching)
ENDINC145

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	CLRF TMR0
	BCF INTCON,T0IF
	BSF INTCON,GIE	; Interrupt freigeben

;**********************************
;******* Haupt-Programm ***********
;**********************************

MAIN

BEGININC144
	ERRORLEVEL +306	; enable warning (Pageswitching)
	ERRORLEVEL +302	; enable warning (Bankswitching)

	INCLUDE LM75AV.INC

	ERRORLEVEL -302	; disable warning (Bankswitching)
	ERRORLEVEL -306	; disable warning (Pageswitching)
ENDINC144

;***************************************************
; UND - Gatter -> LG1
;***************************************************

LABEL_LG1_1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S2,1
	GOTO LABEL_LG1_FALSE

LABEL_LG1_TRUE
	BSF M0,0
	GOTO LABEL_LG1_ENDE
LABEL_LG1_FALSE
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF M0,0
LABEL_LG1_ENDE
;***************************************************
; UND - Gatter -> LG2
;***************************************************

LABEL_LG2_1
	BTFSS S2,2
	GOTO LABEL_LG2_FALSE

LABEL_LG2_TRUE
	BSF M0,1
	GOTO LABEL_LG2_ENDE
LABEL_LG2_FALSE
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF M0,1
LABEL_LG2_ENDE
;***************************************************
; Timer -> TR1
;***************************************************

	MOVLW 7	; Test auf >=
	SUBWF TR1_HI,W	;F-W -> W
	BTFSS STATUS,ZERO
	GOTO LABEL_TR1_CHECK
	MOVLW 161
	SUBWF TR1,W	;F-W -> W
LABEL_TR1_CHECK
	BTFSS STATUS,CARRY
	GOTO LABEL_TR1_ENDE

LABEL_TR1_RESET
	MOVLW 7	; Test auf >=
	SUBWF TR1_HI,F	;F-W -> F
	MOVLW 161
	SUBWF TR1,F	;F-W -> F
	BTFSS STATUS,CARRY
	DECF TR1_HI,F

LABEL_TR1_SET	; toggel output
	BTFSC S2,0
	GOTO LABEL_TR1_CLR
	BSF S2,0
	GOTO LABEL_TR1_ENDE
LABEL_TR1_CLR
	BCF S2,0
LABEL_TR1_ENDE

;***************************************************
; UND - Gatter -> LG3
;***************************************************

LABEL_LG3_1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S2,0
	GOTO LABEL_LG3_FALSE

LABEL_LG3_TRUE
	BSF PORTC,0
	GOTO LABEL_LG3_ENDE
LABEL_LG3_FALSE
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF PORTC,0
LABEL_LG3_ENDE
;***************************************************
; LCD -> LT1
;***************************************************

; test of positiv edge

	BTFSC LT1_FD,0
	GOTO LABEL_LT1_SETFD
	BTFSS S2,0
	GOTO LABEL_LT1_SETFD


	MOVLW 10
	MOVWF SYS_TMP1
	MOVLW 2
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVFW IIDATA
	MOVWF SYS_TMP4

	MOVLW 8
	MOVWF SYS_TMP6

LCD_LT1_BIN1
	MOVLW HIGH LCD_LB1_WRITECHAR	; set page
	MOVWF PCLATH
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	RLF SYS_TMP4,F
	MOVLW 48
	BTFSC STATUS,CARRY
	MOVLW 49
	CALL LCD_LB1_WRITECHAR

	MOVLW HIGH LCD_LT1_BIN1	; set page
	MOVWF PCLATH
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	DECFSZ SYS_TMP6,F
	GOTO LCD_LT1_BIN1
	BCF PCLATH,3	; Page 0
LABEL_LT1_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S2,0
	GOTO LABEL_LT1_SETFD2
	BSF LT1_FD,0
	GOTO LABEL_LT1_END
LABEL_LT1_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT1_FD,0
LABEL_LT1_END

;***************************************************
; LCD -> LT2
;***************************************************

; test of positiv edge

	BTFSC LT2_FD,0
	GOTO LABEL_LT2_SETFD
	BTFSS S2,0
	GOTO LABEL_LT2_SETFD


	MOVLW 0
	MOVWF SYS_TMP1
	MOVLW 2
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVFW IIDATA1
	MOVWF SYS_TMP4

	MOVLW 8
	MOVWF SYS_TMP6

LCD_LT2_BIN1
	MOVLW HIGH LCD_LB1_WRITECHAR	; set page
	MOVWF PCLATH
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	RLF SYS_TMP4,F
	MOVLW 48
	BTFSC STATUS,CARRY
	MOVLW 49
	CALL LCD_LB1_WRITECHAR

	MOVLW HIGH LCD_LT2_BIN1	; set page
	MOVWF PCLATH
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	DECFSZ SYS_TMP6,F
	GOTO LCD_LT2_BIN1
	BCF PCLATH,3	; Page 0
LABEL_LT2_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S2,0
	GOTO LABEL_LT2_SETFD2
	BSF LT2_FD,0
	GOTO LABEL_LT2_END
LABEL_LT2_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT2_FD,0
LABEL_LT2_END

;***************************************************
; LCD -> LT3
;***************************************************

; test of positiv edge

	BTFSC LT3_FD,0
	GOTO LABEL_LT3_SETFD
	BTFSS S2,0
	GOTO LABEL_LT3_SETFD


	MOVLW 11
	MOVWF SYS_TMP1
	MOVLW 0
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVFW S1
	MOVWF SYS_TMP4
	CLRF SYS_TMP5

	BSF SYS_TMP10,0
	MOVLW 3
	MOVWF SYS_TMP9
	MOVLW HIGH LCD_LB1_DEZO100	; set page
	MOVWF PCLATH
	CALL LCD_LB1_DEZO100
	BCF PCLATH,3	; Page 0
LABEL_LT3_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S2,0
	GOTO LABEL_LT3_SETFD2
	BSF LT3_FD,0
	GOTO LABEL_LT3_END
LABEL_LT3_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT3_FD,0
LABEL_LT3_END

;***************************************************
; One Shot -> OS1
;***************************************************


	BTFSS S2,0
	GOTO LABEL_OS1_1
	BTFSC OS1_FD,0
	GOTO LABEL_OS1_1
	BSF OS1_FD,0
	BSF S2,2
	GOTO LABEL_OS1_2
LABEL_OS1_1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF S2,2
	BTFSC S2,0
	GOTO LABEL_OS1_2
	BCF OS1_FD,0
LABEL_OS1_2
;***************************************************
;AF1
;***************************************************

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVFW IIDATA
	MOVWF SYS_TMP1
	MOVLW 128
	MOVWF SYS_TMP2
	MOVLW HIGH SYSDIV8
	MOVWF PCLATH
	CALL SYSDIV8
	MOVLW HIGH LABEL_AF1
	MOVWF PCLATH
LABEL_AF1
	MOVFW SYS_TMP3
	MOVWF S0

LABEL_AF1_EXIT
;***************************************************
;AF2
;***************************************************

	MOVFW S0
	MOVWF SYS_TMP1
	MOVLW 5
	MOVWF SYS_TMP2
	MOVLW HIGH SYSMUL8
	MOVWF PCLATH
	CALL SYSMUL8
	MOVLW HIGH LABEL_AF2
	MOVWF PCLATH
LABEL_AF2
	MOVFW SYS_TMP3
	MOVWF S1

LABEL_AF2_EXIT
;***************************************************
; LCD -> LT4
;***************************************************

; test of positiv edge

	BTFSC LT4_FD,0
	GOTO LABEL_LT4_SETFD
	BTFSS S2,0
	GOTO LABEL_LT4_SETFD


	MOVLW 8
	MOVWF SYS_TMP1
	MOVLW 0
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVFW IIDATA1
	MOVWF SYS_TMP4
	CLRF SYS_TMP5

	BCF SYS_TMP10,0
	MOVLW 2
	MOVWF SYS_TMP9
	MOVLW HIGH LCD_LB1_DEZO100	; set page
	MOVWF PCLATH
	CALL LCD_LB1_DEZO100
	BCF PCLATH,3	; Page 0
LABEL_LT4_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S2,0
	GOTO LABEL_LT4_SETFD2
	BSF LT4_FD,0
	GOTO LABEL_LT4_END
LABEL_LT4_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT4_FD,0
LABEL_LT4_END

;***************************************************
; LCD -> LT5
;***************************************************

; test of positiv edge

	BTFSC LT5_FD,0
	GOTO LABEL_LT5_SETFD
	BTFSS S2,0
	GOTO LABEL_LT5_SETFD


	MOVLW 10
	MOVWF SYS_TMP1
	MOVLW 0
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	MOVLW LOW TAB_LT5
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF SYS_TMP4
	MOVLW HIGH TAB_LT5
	MOVWF SYS_TMP5

	MOVLW HIGH LCD_LB1_WRITESTR	; set page
	MOVWF PCLATH

	CALL LCD_LB1_WRITESTR

	BCF PCLATH,3	; Page 0
LABEL_LT5_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S2,0
	GOTO LABEL_LT5_SETFD2
	BSF LT5_FD,0
	GOTO LABEL_LT5_END
LABEL_LT5_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT5_FD,0
LABEL_LT5_END

;***************************************************
; LCD -> LT6
;***************************************************

; test of positiv edge

	BTFSC LT6_FD,0
	GOTO LABEL_LT6_SETFD
	BTFSS S2,0
	GOTO LABEL_LT6_SETFD


	MOVLW 13
	MOVWF SYS_TMP1
	MOVLW 0
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	MOVLW LOW TAB_LT6
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF SYS_TMP4
	MOVLW HIGH TAB_LT6
	MOVWF SYS_TMP5

	MOVLW HIGH LCD_LB1_WRITESTR	; set page
	MOVWF PCLATH

	CALL LCD_LB1_WRITESTR

	BCF PCLATH,3	; Page 0
LABEL_LT6_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S2,0
	GOTO LABEL_LT6_SETFD2
	BSF LT6_FD,0
	GOTO LABEL_LT6_END
LABEL_LT6_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT6_FD,0
LABEL_LT6_END

;***************************************************
; GND
;***************************************************

	BCF S2,1	; immer Low

;****************************************

	GOTO MAIN










TAB_LT5
	RETLW 46	; .
	RETLW 0	; end


TAB_LT6
	RETLW 67	; C
	RETLW 0	; end


	END

