; Source created with Parsic Version 3.x

; at              : 2015.03.15. 15:20:26


; Project File    : C:\PROGRA~1\Parsic\Examples\ORA_NAPT\N_ora_1.PIC

; Project Version : 1.0.17

; Created         : 2009.02.04. 22:11:00

; Last change     : 2015.03.15. 15:17:35

	PROCESSOR 16F874A

	INCLUDE P16F874A.INC

	RADIX DEC


	__IDLOCS H'0100'

	__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _BODEN_OFF & _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_TMP1	= 33	; located in Bank 0, 2
SYS_TMP2	= 34	; located in Bank 0, 2
SYS_TMP3	= 35	; located in Bank 0, 2
SYS_TMP4	= 36	; located in Bank 0, 2
SYS_TMP5	= 37	; located in Bank 0, 2
SYS_TMP6	= 38	; located in Bank 0, 2
SYS_TMP9	= 39	; located in Bank 0, 2
SYS_TMP10	= 40	; located in Bank 0, 2
SYS_SSAV	= 41	; located in Bank 0, 2
SYS_PSAV	= 42	; located in Bank 0, 2
LT1_FD	= 45	; located in Bank 0, 2
TR1	= 46	; located in Bank 0, 2
TR1_HI	= 47	; located in Bank 0, 2
S4	= 48	; located in Bank 0, 2
LT2_FD	= 49	; located in Bank 0, 2
LT3_FD	= 50	; located in Bank 0, 2
LT4_FD	= 51	; located in Bank 0, 2
LT5_FD	= 52	; located in Bank 0, 2
ZV1	= 53	; located in Bank 0, 2
ZV1_FD	= 54	; located in Bank 0, 2
S3	= 55	; located in Bank 0, 2
ZV2	= 56	; located in Bank 0, 2
ZV2_FD	= 57	; located in Bank 0, 2
ZV3	= 58	; located in Bank 0, 2
ZV3_FD	= 59	; located in Bank 0, 2
TR2	= 60	; located in Bank 0, 2
TR2_HI	= 61	; located in Bank 0, 2
S5	= 62	; located in Bank 0, 2
OS1_FD	= 63	; located in Bank 0, 2
OS2_FD	= 64	; located in Bank 0, 2
S0	= 65	; located in Bank 0, 2
ZV4	= 66	; located in Bank 0, 2
ZV4_FD	= 67	; located in Bank 0, 2
ZV5	= 68	; located in Bank 0, 2
ZV5_FD	= 69	; located in Bank 0, 2
S1	= 70	; located in Bank 0, 2
S2	= 71	; located in Bank 0, 2
LT6_FD	= 72	; located in Bank 0, 2
LT7_FD	= 73	; located in Bank 0, 2
LT8_FD	= 74	; located in Bank 0, 2
LT9_FD	= 75	; located in Bank 0, 2
LT10_FD	= 76	; located in Bank 0, 2
LT11_FD	= 77	; located in Bank 0, 2
ZV6	= 78	; located in Bank 0, 2
ZV6_FD	= 79	; located in Bank 0, 2
LT12_FD	= 80	; located in Bank 0, 2
LT13_FD	= 81	; located in Bank 0, 2
MF1	= 82	; located in Bank 0, 2
MF1_HI	= 83	; located in Bank 0, 2
MF1_FD	= 84	; located in Bank 0, 2
MF2	= 85	; located in Bank 0, 2
MF2_HI	= 86	; located in Bank 0, 2
MF2_FD	= 87	; located in Bank 0, 2
MF3	= 88	; located in Bank 0, 2
MF3_HI	= 89	; located in Bank 0, 2
MF3_FD	= 90	; located in Bank 0, 2
MF4	= 91	; located in Bank 0, 2
MF4_HI	= 92	; located in Bank 0, 2
MF4_FD	= 93	; located in Bank 0, 2
MF5	= 94	; located in Bank 0, 2
MF5_HI	= 95	; located in Bank 0, 2
MF5_FD	= 96	; located in Bank 0, 2
OS3_FD	= 97	; located in Bank 0, 2
OS4_FD	= 98	; located in Bank 0, 2
S6	= 99	; located in Bank 0, 2
OS5_FD	= 100	; located in Bank 0, 2
RAM	= 101	; 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 PCLATH
	MOVWF SYS_PSAV
	CLRF PCLATH

	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
	INCFSZ TR2,F
	GOTO SYS_INT_LABEL_1
	INCF TR2_HI,F

SYS_INT_LABEL_1
	INCFSZ MF1,F
	GOTO SYS_INT_LABEL_2
	INCF MF1_HI,F

SYS_INT_LABEL_2
	INCFSZ MF2,F
	GOTO SYS_INT_LABEL_3
	INCF MF2_HI,F

SYS_INT_LABEL_3
	INCFSZ MF3,F
	GOTO SYS_INT_LABEL_4
	INCF MF3_HI,F

SYS_INT_LABEL_4
	INCFSZ MF4,F
	GOTO SYS_INT_LABEL_5
	INCF MF4_HI,F

SYS_INT_LABEL_5
	INCFSZ MF5,F
	GOTO SYS_INT_LABEL_6
	INCF MF5_HI,F

SYS_INT_LABEL_6

EXITINT
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVFW SYS_PSAV
	MOVWF PCLATH

	SWAPF SYS_SSAV,W	; Register zurück
	MOVWF STATUS
	SWAPF SYS_WSAV,F
	SWAPF SYS_WSAV,W

	RETFIE


;****************************************
; Subroutines
;****************************************

;****************************************
; Direct jump into a table
;****************************************

SYSTABJMP
	BCF INTCON,GIE
	BTFSC INTCON,GIE
	GOTO SYSTABJMP
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVFW SYS_TMP2
	MOVWF PCLATH
	MOVFW SYS_TMP1
	MOVWF PCL
;***************************************************
; 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
	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
; 00EF

;****************************************
;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 B'00000000'
	MOVWF PORTD

	MOVLW B'00000000'
	MOVWF PORTE

	MOVLW 15
	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'11111111'
	MOVWF TRISC

	MOVLW B'11111111'
	MOVWF TRISD

	MOVLW B'00000111'
	MOVWF TRISE

	MOVLW 7	; Comparators off
	MOVWF CMCON
; 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

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	CLRF TMR0
	BCF INTCON,T0IF
	BSF INTCON,GIE	; Interrupt freigeben

;**********************************
;******* Haupt-Programm ***********
;**********************************

MAIN

;***************************************************
; LCD -> LT1
;***************************************************

; test of positiv edge

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSC LT1_FD,0
	GOTO LABEL_LT1_SETFD
	BTFSS S4,4
	GOTO LABEL_LT1_SETFD


	MOVLW 7
	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 ZV3
	MOVWF SYS_TMP4
	CLRF SYS_TMP5

	BSF 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_LT1_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	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

;***************************************************
; Timer -> TR1
;***************************************************

	MOVLW 1	; Test auf >=
	SUBWF TR1_HI,W	;F-W -> W
	BTFSS STATUS,ZERO
	GOTO LABEL_TR1_CHECK
	MOVLW 135
	SUBWF TR1,W	;F-W -> W
LABEL_TR1_CHECK
	BTFSS STATUS,CARRY
	GOTO LABEL_TR1_ENDE

LABEL_TR1_RESET
	MOVLW 1	; Test auf >=
	SUBWF TR1_HI,F	;F-W -> F
	MOVLW 135
	SUBWF TR1,F	;F-W -> F
	BTFSS STATUS,CARRY
	DECF TR1_HI,F

LABEL_TR1_SET	; toggel output
	BTFSC S4,4
	GOTO LABEL_TR1_CLR
	BSF S4,4
	GOTO LABEL_TR1_ENDE
LABEL_TR1_CLR
	BCF S4,4
LABEL_TR1_ENDE

;***************************************************
; LCD -> LT2
;***************************************************

; test of positiv edge

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSC LT2_FD,0
	GOTO LABEL_LT2_SETFD
	BTFSS S4,4
	GOTO LABEL_LT2_SETFD


	MOVLW 10
	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 ZV2
	MOVWF SYS_TMP4
	CLRF SYS_TMP5

	BSF 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_LT2_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	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 S4,4
	GOTO LABEL_LT3_SETFD


	MOVLW 13
	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 ZV1
	MOVWF SYS_TMP4
	CLRF SYS_TMP5

	BSF 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_LT3_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	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

;***************************************************
; LCD -> LT4
;***************************************************

; test of positiv edge

	BTFSC LT4_FD,0
	GOTO LABEL_LT4_SETFD
	BTFSS S4,4
	GOTO LABEL_LT4_SETFD


	MOVLW 9
	MOVWF SYS_TMP1
	MOVLW 0
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	MOVLW LOW TAB_LT4
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF SYS_TMP4
	MOVLW HIGH TAB_LT4
	MOVWF SYS_TMP5

	MOVLW HIGH LCD_LB1_WRITESTR	; set page
	MOVWF PCLATH

	CALL LCD_LB1_WRITESTR

	BCF PCLATH,3	; Page 0
LABEL_LT4_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	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 S4,4
	GOTO LABEL_LT5_SETFD


	MOVLW 12
	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 S4,4
	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

;***************************************************
; Zähler -> ZV1
;***************************************************

	BTFSS S3,0	; Reset ?
	GOTO LABEL_ZV1_COUNT
	CLRF ZV1
	GOTO LABEL_ZV1_SETOUT

LABEL_ZV1_COUNT

; Test auf positive Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S3,3
	GOTO LABEL_ZV1_SETFD
	BTFSC ZV1_FD,0
	GOTO LABEL_ZV1_SETFD

	BSF ZV1_FD,0


	BTFSC S3,4	; Vorwärts oder Rückwärts ?
	GOTO LABEL_ZV1_BACKWARD

	INCF ZV1,F
	GOTO LABEL_ZV1_SETOUT

LABEL_ZV1_BACKWARD
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	DECF ZV1,F

LABEL_ZV1_SETOUT


LABEL_ZV1_SETFD

; Test auf negative Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSC S3,3
	GOTO LABEL_ZV1_EXIT
	BCF ZV1_FD,0

LABEL_ZV1_EXIT

;***************************************************
; Vergleich -> IF1
;***************************************************

	MOVLW 60
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF ZV1,W	; F - W -> W

LABEL_IF1_CHECK
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS STATUS,CARRY	; Test auf -> >=
	GOTO LABEL_IF1_FALSE

LABEL_IF1_TRUE
	BSF S3,0
	GOTO LABEL_IF1_EXIT

LABEL_IF1_FALSE
	BCF S3,0

LABEL_IF1_EXIT
;***************************************************
; Zähler -> ZV2
;***************************************************

	BTFSS S3,1	; Reset ?
	GOTO LABEL_ZV2_COUNT
	CLRF ZV2
	GOTO LABEL_ZV2_SETOUT

LABEL_ZV2_COUNT

; Test auf positive Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S3,5
	GOTO LABEL_ZV2_SETFD
	BTFSC ZV2_FD,0
	GOTO LABEL_ZV2_SETFD

	BSF ZV2_FD,0


	BTFSC S3,4	; Vorwärts oder Rückwärts ?
	GOTO LABEL_ZV2_BACKWARD

	INCF ZV2,F
	GOTO LABEL_ZV2_SETOUT

LABEL_ZV2_BACKWARD
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	DECF ZV2,F

LABEL_ZV2_SETOUT


LABEL_ZV2_SETFD

; Test auf negative Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSC S3,5
	GOTO LABEL_ZV2_EXIT
	BCF ZV2_FD,0

LABEL_ZV2_EXIT

;***************************************************
; Vergleich -> IF2
;***************************************************

	MOVLW 60
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF ZV2,W	; F - W -> W

LABEL_IF2_CHECK
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS STATUS,CARRY	; Test auf -> >=
	GOTO LABEL_IF2_FALSE

LABEL_IF2_TRUE
	BSF S3,1
	GOTO LABEL_IF2_EXIT

LABEL_IF2_FALSE
	BCF S3,1

LABEL_IF2_EXIT
;***************************************************
; Zähler -> ZV3
;***************************************************

	BTFSS S3,2	; Reset ?
	GOTO LABEL_ZV3_COUNT
	CLRF ZV3
	GOTO LABEL_ZV3_SETOUT

LABEL_ZV3_COUNT

; Test auf positive Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S3,6
	GOTO LABEL_ZV3_SETFD
	BTFSC ZV3_FD,0
	GOTO LABEL_ZV3_SETFD

	BSF ZV3_FD,0


	BTFSC S3,4	; Vorwärts oder Rückwärts ?
	GOTO LABEL_ZV3_BACKWARD

	INCF ZV3,F
	GOTO LABEL_ZV3_SETOUT

LABEL_ZV3_BACKWARD
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	DECF ZV3,F

LABEL_ZV3_SETOUT


LABEL_ZV3_SETFD

; Test auf negative Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSC S3,6
	GOTO LABEL_ZV3_EXIT
	BCF ZV3_FD,0

LABEL_ZV3_EXIT

;***************************************************
; Vergleich -> IF3
;***************************************************

	MOVLW 24
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF ZV3,W	; F - W -> W

LABEL_IF3_CHECK
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS STATUS,CARRY	; Test auf -> >=
	GOTO LABEL_IF3_FALSE

LABEL_IF3_TRUE
	BSF S3,2
	GOTO LABEL_IF3_EXIT

LABEL_IF3_FALSE
	BCF S3,2

LABEL_IF3_EXIT
;***************************************************
; Timer -> TR2
;***************************************************

	MOVLW 7	; Test auf >=
	SUBWF TR2_HI,W	;F-W -> W
	BTFSS STATUS,ZERO
	GOTO LABEL_TR2_CHECK
	MOVLW 161
	SUBWF TR2,W	;F-W -> W
LABEL_TR2_CHECK
	BTFSS STATUS,CARRY
	GOTO LABEL_TR2_ENDE

LABEL_TR2_RESET
	MOVLW 7	; Test auf >=
	SUBWF TR2_HI,F	;F-W -> F
	MOVLW 161
	SUBWF TR2,F	;F-W -> F
	BTFSS STATUS,CARRY
	DECF TR2_HI,F

LABEL_TR2_SET	; toggel output
	BTFSC S3,3
	GOTO LABEL_TR2_CLR
	BSF S3,3
	GOTO LABEL_TR2_ENDE
LABEL_TR2_CLR
	BCF S3,3
LABEL_TR2_ENDE

;***************************************************
; GND
;***************************************************

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF S3,4	; immer Low

;***************************************************
; ODER - Gatter -> LG1
;***************************************************

LABEL_LG1_1
	BTFSC S3,0
	GOTO LABEL_LG1_TRUE
LABEL_LG1_2
	BTFSC S5,1
	GOTO LABEL_LG1_TRUE

LABEL_LG1_FALSE
	BCF S3,5
	GOTO LABEL_LG1_ENDE
LABEL_LG1_TRUE
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BSF S3,5
LABEL_LG1_ENDE
;***************************************************
; ODER - Gatter -> LG2
;***************************************************

LABEL_LG2_1
	BTFSC S3,1
	GOTO LABEL_LG2_TRUE
LABEL_LG2_2
	BTFSC S5,3
	GOTO LABEL_LG2_TRUE

LABEL_LG2_FALSE
	BCF S3,6
	GOTO LABEL_LG2_ENDE
LABEL_LG2_TRUE
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BSF S3,6
LABEL_LG2_ENDE
;***************************************************
; One Shot -> OS1
;***************************************************


	BTFSS PORTA,0
	GOTO LABEL_OS1_1
	BTFSC OS1_FD,0
	GOTO LABEL_OS1_1
	BSF OS1_FD,0
	BSF S5,0
	GOTO LABEL_OS1_2
LABEL_OS1_1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF S5,0
	BTFSC PORTA,0
	GOTO LABEL_OS1_2
	BCF OS1_FD,0
LABEL_OS1_2
;***************************************************
; One Shot -> OS2
;***************************************************


	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS PORTA,1
	GOTO LABEL_OS2_1
	BTFSC OS2_FD,0
	GOTO LABEL_OS2_1
	BSF OS2_FD,0
	BSF S5,2
	GOTO LABEL_OS2_2
LABEL_OS2_1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF S5,2
	BTFSC PORTA,1
	GOTO LABEL_OS2_2
	BCF OS2_FD,0
LABEL_OS2_2
;***************************************************
; Call subroutine TAB
;***************************************************

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0

	MOVLW LOW TAB
	MOVWF SYS_TMP1
	MOVLW HIGH TAB
	MOVWF SYS_TMP2

	MOVFW ZV4
	ADDWF SYS_TMP1,F
	BTFSC STATUS,CARRY
	INCF SYS_TMP2,F

	MOVLW HIGH SYSTABJMP	; set page
	MOVWF PCLATH
	CALL SYSTABJMP

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF S0

	BSF INTCON,GIE
	BCF PCLATH,3	; Page 0
;***************************************************
; Zähler -> ZV4
;***************************************************

	BTFSS S4,0	; Reset ?
	GOTO LABEL_ZV4_COUNT
	CLRF ZV4
	GOTO LABEL_ZV4_SETOUT

LABEL_ZV4_COUNT

; Test auf positive Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,2
	GOTO LABEL_ZV4_SETFD
	BTFSC ZV4_FD,0
	GOTO LABEL_ZV4_SETFD

	BSF ZV4_FD,0


	BTFSC S3,7	; Vorwärts oder Rückwärts ?
	GOTO LABEL_ZV4_BACKWARD

	INCF ZV4,F
	GOTO LABEL_ZV4_SETOUT

LABEL_ZV4_BACKWARD
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	DECF ZV4,F

LABEL_ZV4_SETOUT


LABEL_ZV4_SETFD

; Test auf negative Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSC S4,2
	GOTO LABEL_ZV4_EXIT
	BCF ZV4_FD,0

LABEL_ZV4_EXIT

;***************************************************
; GND
;***************************************************

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF S3,7	; immer Low

;***************************************************
; Vergleich -> IF4
;***************************************************

	MOVLW 13
	SUBWF ZV4,W	; F - W -> W

LABEL_IF4_CHECK
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS STATUS,CARRY	; Test auf -> >=
	GOTO LABEL_IF4_FALSE

LABEL_IF4_TRUE
	BSF S4,0
	GOTO LABEL_IF4_EXIT

LABEL_IF4_FALSE
	BCF S4,0

LABEL_IF4_EXIT
;***************************************************
; Vergleich -> IF5
;***************************************************

	MOVFW ZV5
	SUBWF S0,W	; F - W -> W

LABEL_IF5_CHECK
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS STATUS,ZERO	; Test auf -> =
	GOTO LABEL_IF5_FALSE

LABEL_IF5_TRUE
	BSF S4,1
	GOTO LABEL_IF5_EXIT

LABEL_IF5_FALSE
	BCF S4,1

LABEL_IF5_EXIT
;***************************************************
; Zähler -> ZV5
;***************************************************

	BTFSS S4,1	; Reset ?
	GOTO LABEL_ZV5_COUNT
	CLRF ZV5
	GOTO LABEL_ZV5_SETOUT

LABEL_ZV5_COUNT

; Test auf positive Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,3
	GOTO LABEL_ZV5_SETFD
	BTFSC ZV5_FD,0
	GOTO LABEL_ZV5_SETFD

	BSF ZV5_FD,0


	BTFSC S3,7	; Vorwärts oder Rückwärts ?
	GOTO LABEL_ZV5_BACKWARD

	INCF ZV5,F
	GOTO LABEL_ZV5_SETOUT

LABEL_ZV5_BACKWARD
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	DECF ZV5,F

LABEL_ZV5_SETOUT


LABEL_ZV5_SETFD

; Test auf negative Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSC S4,3
	GOTO LABEL_ZV5_EXIT
	BCF ZV5_FD,0

LABEL_ZV5_EXIT

;***************************************************
;AF1
;***************************************************

	MOVLW 1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	ADDWF ZV4,W
	MOVWF S1

LABEL_AF1_EXIT
;***************************************************
;AF2
;***************************************************

	MOVLW 1
	ADDWF ZV5,W
	MOVWF S2

LABEL_AF2_EXIT
;***************************************************
; ODER - Gatter -> LG3
;***************************************************

LABEL_LG3_1
	BTFSC S5,5
	GOTO LABEL_LG3_TRUE
LABEL_LG3_2
	BTFSC S4,1
	GOTO LABEL_LG3_TRUE

LABEL_LG3_FALSE
	BCF S4,2
	GOTO LABEL_LG3_ENDE
LABEL_LG3_TRUE
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BSF S4,2
LABEL_LG3_ENDE
;***************************************************
; ODER - Gatter -> LG4
;***************************************************

LABEL_LG4_1
	BTFSC S3,2
	GOTO LABEL_LG4_TRUE
LABEL_LG4_2
	BTFSC S5,4
	GOTO LABEL_LG4_TRUE

LABEL_LG4_FALSE
	BCF S4,3
	GOTO LABEL_LG4_ENDE
LABEL_LG4_TRUE
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BSF S4,3
LABEL_LG4_ENDE
;***************************************************
; LCD -> LT6
;***************************************************

; test of positiv edge

	BTFSC LT6_FD,0
	GOTO LABEL_LT6_SETFD
	BTFSS S4,4
	GOTO LABEL_LT6_SETFD


	MOVLW 8
	MOVWF SYS_TMP1
	MOVLW 1
	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 ZV6
	MOVWF SYS_TMP4
	CLRF SYS_TMP5

	BSF 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_LT6_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	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

;***************************************************
; LCD -> LT7
;***************************************************

; test of positiv edge

	BTFSC LT7_FD,0
	GOTO LABEL_LT7_SETFD
	BTFSS S4,4
	GOTO LABEL_LT7_SETFD


	MOVLW 11
	MOVWF SYS_TMP1
	MOVLW 1
	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 2
	MOVWF SYS_TMP9
	MOVLW HIGH LCD_LB1_DEZO100	; set page
	MOVWF PCLATH
	CALL LCD_LB1_DEZO100
	BCF PCLATH,3	; Page 0
LABEL_LT7_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	GOTO LABEL_LT7_SETFD2
	BSF LT7_FD,0
	GOTO LABEL_LT7_END
LABEL_LT7_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT7_FD,0
LABEL_LT7_END

;***************************************************
; LCD -> LT8
;***************************************************

; test of positiv edge

	BTFSC LT8_FD,0
	GOTO LABEL_LT8_SETFD
	BTFSS S4,4
	GOTO LABEL_LT8_SETFD


	MOVLW 14
	MOVWF SYS_TMP1
	MOVLW 1
	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 S2
	MOVWF SYS_TMP4
	CLRF SYS_TMP5

	BSF 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_LT8_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	GOTO LABEL_LT8_SETFD2
	BSF LT8_FD,0
	GOTO LABEL_LT8_END
LABEL_LT8_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT8_FD,0
LABEL_LT8_END

;***************************************************
; LCD -> LT9
;***************************************************

; test of positiv edge

	BTFSC LT9_FD,0
	GOTO LABEL_LT9_SETFD
	BTFSS S4,4
	GOTO LABEL_LT9_SETFD


	MOVLW 10
	MOVWF SYS_TMP1
	MOVLW 1
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	MOVLW LOW TAB_LT9
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF SYS_TMP4
	MOVLW HIGH TAB_LT9
	MOVWF SYS_TMP5

	MOVLW HIGH LCD_LB1_WRITESTR	; set page
	MOVWF PCLATH

	CALL LCD_LB1_WRITESTR

	BCF PCLATH,3	; Page 0
LABEL_LT9_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	GOTO LABEL_LT9_SETFD2
	BSF LT9_FD,0
	GOTO LABEL_LT9_END
LABEL_LT9_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT9_FD,0
LABEL_LT9_END

;***************************************************
; LCD -> LT10
;***************************************************

; test of positiv edge

	BTFSC LT10_FD,0
	GOTO LABEL_LT10_SETFD
	BTFSS S4,4
	GOTO LABEL_LT10_SETFD


	MOVLW 13
	MOVWF SYS_TMP1
	MOVLW 1
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	MOVLW LOW TAB_LT10
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF SYS_TMP4
	MOVLW HIGH TAB_LT10
	MOVWF SYS_TMP5

	MOVLW HIGH LCD_LB1_WRITESTR	; set page
	MOVWF PCLATH

	CALL LCD_LB1_WRITESTR

	BCF PCLATH,3	; Page 0
LABEL_LT10_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	GOTO LABEL_LT10_SETFD2
	BSF LT10_FD,0
	GOTO LABEL_LT10_END
LABEL_LT10_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT10_FD,0
LABEL_LT10_END

;***************************************************
; LCD -> LT11
;***************************************************

; test of positiv edge

	BTFSC LT11_FD,0
	GOTO LABEL_LT11_SETFD
	BTFSS S4,4
	GOTO LABEL_LT11_SETFD


	MOVLW 6
	MOVWF SYS_TMP1
	MOVLW 1
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	MOVLW LOW TAB_LT11
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF SYS_TMP4
	MOVLW HIGH TAB_LT11
	MOVWF SYS_TMP5

	MOVLW HIGH LCD_LB1_WRITESTR	; set page
	MOVWF PCLATH

	CALL LCD_LB1_WRITESTR

	BCF PCLATH,3	; Page 0
LABEL_LT11_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	GOTO LABEL_LT11_SETFD2
	BSF LT11_FD,0
	GOTO LABEL_LT11_END
LABEL_LT11_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT11_FD,0
LABEL_LT11_END

;***************************************************
; Zähler -> ZV6
;***************************************************

	BTFSS S4,5	; Reset ?
	GOTO LABEL_ZV6_COUNT
	CLRF ZV6
	GOTO LABEL_ZV6_SETOUT

LABEL_ZV6_COUNT

; Test auf positive Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,6
	GOTO LABEL_ZV6_SETFD
	BTFSC ZV6_FD,0
	GOTO LABEL_ZV6_SETFD

	BSF ZV6_FD,0


	BTFSC S3,7	; Vorwärts oder Rückwärts ?
	GOTO LABEL_ZV6_BACKWARD

	INCF ZV6,F
	GOTO LABEL_ZV6_SETOUT

LABEL_ZV6_BACKWARD
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	DECF ZV6,F

LABEL_ZV6_SETOUT


LABEL_ZV6_SETFD

; Test auf negative Flanke

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSC S4,6
	GOTO LABEL_ZV6_EXIT
	BCF ZV6_FD,0

LABEL_ZV6_EXIT

;***************************************************
; Vergleich -> IF6
;***************************************************

	MOVLW 99
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF ZV6,W	; F - W -> W

LABEL_IF6_CHECK
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS STATUS,ZERO	; Test auf -> =
	GOTO LABEL_IF6_FALSE

LABEL_IF6_TRUE
	BSF S4,5
	GOTO LABEL_IF6_EXIT

LABEL_IF6_FALSE
	BCF S4,5

LABEL_IF6_EXIT
;***************************************************
; ODER - Gatter -> LG5
;***************************************************

LABEL_LG5_1
	BTFSC S4,0
	GOTO LABEL_LG5_TRUE
LABEL_LG5_2
	BTFSC S4,7
	GOTO LABEL_LG5_TRUE

LABEL_LG5_FALSE
	BCF S4,6
	GOTO LABEL_LG5_ENDE
LABEL_LG5_TRUE
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BSF S4,6
LABEL_LG5_ENDE
;***************************************************
; LCD -> LT12
;***************************************************

; test of positiv edge

	BTFSC LT12_FD,0
	GOTO LABEL_LT12_SETFD
	BTFSS S4,4
	GOTO LABEL_LT12_SETFD


	MOVLW 0
	MOVWF SYS_TMP1
	MOVLW 0
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	MOVLW LOW TAB_LT12
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF SYS_TMP4
	MOVLW HIGH TAB_LT12
	MOVWF SYS_TMP5

	MOVLW HIGH LCD_LB1_WRITESTR	; set page
	MOVWF PCLATH

	CALL LCD_LB1_WRITESTR

	BCF PCLATH,3	; Page 0
LABEL_LT12_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	GOTO LABEL_LT12_SETFD2
	BSF LT12_FD,0
	GOTO LABEL_LT12_END
LABEL_LT12_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT12_FD,0
LABEL_LT12_END

;***************************************************
; LCD -> LT13
;***************************************************

; test of positiv edge

	BTFSC LT13_FD,0
	GOTO LABEL_LT13_SETFD
	BTFSS S4,4
	GOTO LABEL_LT13_SETFD


	MOVLW 0
	MOVWF SYS_TMP1
	MOVLW 1
	MOVWF SYS_TMP2

	MOVLW HIGH LCD_LB1_GOTOXY	; set page
	MOVWF PCLATH
	CALL LCD_LB1_GOTOXY

	MOVLW LOW TAB_LT13
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	MOVWF SYS_TMP4
	MOVLW HIGH TAB_LT13
	MOVWF SYS_TMP5

	MOVLW HIGH LCD_LB1_WRITESTR	; set page
	MOVWF PCLATH

	CALL LCD_LB1_WRITESTR

	BCF PCLATH,3	; Page 0
LABEL_LT13_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S4,4
	GOTO LABEL_LT13_SETFD2
	BSF LT13_FD,0
	GOTO LABEL_LT13_END
LABEL_LT13_SETFD2
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF LT13_FD,0
LABEL_LT13_END

;***************************************************
; Mono-Flop -> MF1
;***************************************************

; Läuft der Impuls ?

	BTFSC MF1_FD,1
	GOTO LABEL_MF1_CHKTIME

; Test auf positive Flanke

	BTFSC MF1_FD,0
	GOTO LABEL_MF1_SETFD
	BTFSS S5,0
	GOTO LABEL_MF1_SETFD


LABEL_MF1_RESET

	CLRF MF1
	CLRF MF1_HI
	BSF MF1_FD,1
	BSF S5,1

LABEL_MF1_CHKTIME

	MOVLW 3
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF MF1_HI,W
	BTFSS STATUS,ZERO
	GOTO LABEL_MF1_CHECK
	MOVLW 13
	SUBWF MF1,W
LABEL_MF1_CHECK
	BTFSS STATUS,CARRY
	GOTO LABEL_MF1_SETFD
LABEL_MF1_TO

	BCF MF1_FD,1
	BCF S5,1

LABEL_MF1_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S5,0
	GOTO LABEL_MF1_CLR
	BSF MF1_FD,0
	GOTO LABEL_MF1_ENDE
LABEL_MF1_CLR
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF MF1_FD,0

LABEL_MF1_ENDE

;***************************************************
; Mono-Flop -> MF2
;***************************************************

; Läuft der Impuls ?

	BTFSC MF2_FD,1
	GOTO LABEL_MF2_CHKTIME

; Test auf positive Flanke

	BTFSC MF2_FD,0
	GOTO LABEL_MF2_SETFD
	BTFSS S5,2
	GOTO LABEL_MF2_SETFD


LABEL_MF2_RESET

	CLRF MF2
	CLRF MF2_HI
	BSF MF2_FD,1
	BSF S5,3

LABEL_MF2_CHKTIME

	MOVLW 3
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF MF2_HI,W
	BTFSS STATUS,ZERO
	GOTO LABEL_MF2_CHECK
	MOVLW 13
	SUBWF MF2,W
LABEL_MF2_CHECK
	BTFSS STATUS,CARRY
	GOTO LABEL_MF2_SETFD
LABEL_MF2_TO

	BCF MF2_FD,1
	BCF S5,3

LABEL_MF2_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S5,2
	GOTO LABEL_MF2_CLR
	BSF MF2_FD,0
	GOTO LABEL_MF2_ENDE
LABEL_MF2_CLR
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF MF2_FD,0

LABEL_MF2_ENDE

;***************************************************
; Mono-Flop -> MF3
;***************************************************

; Läuft der Impuls ?

	BTFSC MF3_FD,1
	GOTO LABEL_MF3_CHKTIME

; Test auf positive Flanke

	BTFSC MF3_FD,0
	GOTO LABEL_MF3_SETFD
	BTFSS S5,6
	GOTO LABEL_MF3_SETFD


LABEL_MF3_RESET

	CLRF MF3
	CLRF MF3_HI
	BSF MF3_FD,1
	BSF S4,7

LABEL_MF3_CHKTIME

	MOVLW 3
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF MF3_HI,W
	BTFSS STATUS,ZERO
	GOTO LABEL_MF3_CHECK
	MOVLW 13
	SUBWF MF3,W
LABEL_MF3_CHECK
	BTFSS STATUS,CARRY
	GOTO LABEL_MF3_SETFD
LABEL_MF3_TO

	BCF MF3_FD,1
	BCF S4,7

LABEL_MF3_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S5,6
	GOTO LABEL_MF3_CLR
	BSF MF3_FD,0
	GOTO LABEL_MF3_ENDE
LABEL_MF3_CLR
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF MF3_FD,0

LABEL_MF3_ENDE

;***************************************************
; Mono-Flop -> MF4
;***************************************************

; Läuft der Impuls ?

	BTFSC MF4_FD,1
	GOTO LABEL_MF4_CHKTIME

; Test auf positive Flanke

	BTFSC MF4_FD,0
	GOTO LABEL_MF4_SETFD
	BTFSS S5,7
	GOTO LABEL_MF4_SETFD


LABEL_MF4_RESET

	CLRF MF4
	CLRF MF4_HI
	BSF MF4_FD,1
	BSF S5,5

LABEL_MF4_CHKTIME

	MOVLW 3
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF MF4_HI,W
	BTFSS STATUS,ZERO
	GOTO LABEL_MF4_CHECK
	MOVLW 13
	SUBWF MF4,W
LABEL_MF4_CHECK
	BTFSS STATUS,CARRY
	GOTO LABEL_MF4_SETFD
LABEL_MF4_TO

	BCF MF4_FD,1
	BCF S5,5

LABEL_MF4_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S5,7
	GOTO LABEL_MF4_CLR
	BSF MF4_FD,0
	GOTO LABEL_MF4_ENDE
LABEL_MF4_CLR
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF MF4_FD,0

LABEL_MF4_ENDE

;***************************************************
; Mono-Flop -> MF5
;***************************************************

; Läuft der Impuls ?

	BTFSC MF5_FD,1
	GOTO LABEL_MF5_CHKTIME

; Test auf positive Flanke

	BTFSC MF5_FD,0
	GOTO LABEL_MF5_SETFD
	BTFSS S6,0
	GOTO LABEL_MF5_SETFD


LABEL_MF5_RESET

	CLRF MF5
	CLRF MF5_HI
	BSF MF5_FD,1
	BSF S5,4

LABEL_MF5_CHKTIME

	MOVLW 3
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	SUBWF MF5_HI,W
	BTFSS STATUS,ZERO
	GOTO LABEL_MF5_CHECK
	MOVLW 13
	SUBWF MF5,W
LABEL_MF5_CHECK
	BTFSS STATUS,CARRY
	GOTO LABEL_MF5_SETFD
LABEL_MF5_TO

	BCF MF5_FD,1
	BCF S5,4

LABEL_MF5_SETFD

	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS S6,0
	GOTO LABEL_MF5_CLR
	BSF MF5_FD,0
	GOTO LABEL_MF5_ENDE
LABEL_MF5_CLR
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF MF5_FD,0

LABEL_MF5_ENDE

;***************************************************
; One Shot -> OS3
;***************************************************


	BTFSS PORTA,2
	GOTO LABEL_OS3_1
	BTFSC OS3_FD,0
	GOTO LABEL_OS3_1
	BSF OS3_FD,0
	BSF S5,6
	GOTO LABEL_OS3_2
LABEL_OS3_1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF S5,6
	BTFSC PORTA,2
	GOTO LABEL_OS3_2
	BCF OS3_FD,0
LABEL_OS3_2
;***************************************************
; One Shot -> OS4
;***************************************************


	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS PORTA,3
	GOTO LABEL_OS4_1
	BTFSC OS4_FD,0
	GOTO LABEL_OS4_1
	BSF OS4_FD,0
	BSF S5,7
	GOTO LABEL_OS4_2
LABEL_OS4_1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF S5,7
	BTFSC PORTA,3
	GOTO LABEL_OS4_2
	BCF OS4_FD,0
LABEL_OS4_2
;***************************************************
; One Shot -> OS5
;***************************************************


	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BTFSS PORTA,5
	GOTO LABEL_OS5_1
	BTFSC OS5_FD,0
	GOTO LABEL_OS5_1
	BSF OS5_FD,0
	BSF S6,0
	GOTO LABEL_OS5_2
LABEL_OS5_1
	BCF STATUS,RP0	; Bank 0
	BCF STATUS,RP1	; Bank 0
	BCF S6,0
	BTFSC PORTA,5
	GOTO LABEL_OS5_2
	BCF OS5_FD,0
LABEL_OS5_2
;****************************************

	GOTO MAIN








TAB_LT4
	RETLW 58	; :
	RETLW 0	; end


TAB_LT5
	RETLW 58	; :
	RETLW 0	; end

;***************************************************
; Table -> TAB
;***************************************************

TAB

	RETLW 31	; // INDEX 0
	RETLW 28	; // INDEX 1
	RETLW 31	; // INDEX 2
	RETLW 30	; // INDEX 3
	RETLW 31	; // INDEX 4
	RETLW 30	; // INDEX 5
	RETLW 31	; // INDEX 6
	RETLW 31	; // INDEX 7
	RETLW 30	; // INDEX 8
	RETLW 31	; // INDEX 9
	RETLW 30	; // INDEX 10
	RETLW 31	; // INDEX 11
	RETLW 0	; // INDEX 12
	RETLW 0	; // INDEX 13








TAB_LT9
	RETLW 58	; :
	RETLW 0	; end


TAB_LT10
	RETLW 58	; :
	RETLW 0	; end


TAB_LT11
	RETLW 50	; 2
	RETLW 48	; 0
	RETLW 0	; end


TAB_LT12
	RETLW 84	; T
	RETLW 105	; i
	RETLW 109	; m
	RETLW 101	; e
	RETLW 58	; :
	RETLW 0	; end


TAB_LT13
	RETLW 68	; D
	RETLW 97	; a
	RETLW 116	; t
	RETLW 101	; e
	RETLW 58	; :
	RETLW 0	; end


	END

