; Source created with Parsic Version 4.0.14.2

; at              : 2014.12.28. 12:50:00


; Project File    : C:\Program Files\Parsic 4\Munka\HLX\1Wire\1WB20s_8722X2.pic

; Project Version : 1.0.185

; Created         : 2013.11.17. 9:52:36

; Last change     : 2014.12.28. 12:49:49

	PROCESSOR 18F8722
	INCLUDE P18F8722.INC
	RADIX DEC
	__IDLOCS _IDLOC0,H'01'
	__IDLOCS _IDLOC1,H'00'
	__IDLOCS _IDLOC2,H'B9'
	ERRORLEVEL -230
	__CONFIG _CONFIG1H,H'32';50
	__CONFIG _CONFIG2L,H'E6';230
	__CONFIG _CONFIG2H,H'E6';230
	__CONFIG _CONFIG3L,H'8F';143
	__CONFIG _CONFIG3H,H'7B';123
	__CONFIG _CONFIG4L,H'8B';139
	__CONFIG _CONFIG5L,H'FF';255
	__CONFIG _CONFIG5H,H'FF';255
	__CONFIG _CONFIG6L,H'FF';255
	__CONFIG _CONFIG6H,H'FF';255
	__CONFIG _CONFIG7L,H'FF';255
	__CONFIG _CONFIG7H,H'FF';255
	ERRORLEVEL +230
; missing constants

ZERO	EQU Z	; ZERO-Flag
CARRY	EQU C	; CARRY-Flag
SYS_TICKS	EQU	5000

; variable

SYS_FSAV	EQU 0	; located in Bank ACCESS BANK
SYS_FSAV_1	EQU 1	; located in Bank ACCESS BANK
R4H	EQU 2	; located in Bank ACCESS BANK
R3L	EQU 3	; located in Bank ACCESS BANK
R4L	EQU 4	; located in Bank ACCESS BANK
TEMP	EQU 5	; located in Bank ACCESS BANK
TEMP_1	EQU 6	; located in Bank ACCESS BANK
TEMP_2	EQU 7	; located in Bank ACCESS BANK
TEMP_3	EQU 8	; located in Bank ACCESS BANK
R3H	EQU 9	; located in Bank ACCESS BANK
_FD1	EQU 10	; located in Bank ACCESS BANK
UA87RSFLAG	EQU 11	; located in Bank ACCESS BANK
UA87OUTBUF	EQU 12	; located in Bank ACCESS BANK
UA87OUTBUF_1	EQU 13	; located in Bank ACCESS BANK
UA87OUTBUF_2	EQU 14	; located in Bank ACCESS BANK
UA87OUTBUF_3	EQU 15	; located in Bank ACCESS BANK
UA87OUTBUF_4	EQU 16	; located in Bank ACCESS BANK
UA87OUTBUF_5	EQU 17	; located in Bank ACCESS BANK
_FD2	EQU 18	; located in Bank ACCESS BANK
PWR	EQU 19	; located in Bank ACCESS BANK
NEG	EQU 20	; located in Bank ACCESS BANK
SYS_TMP0	EQU 21	; located in Bank ACCESS BANK
SYS_TMP1	EQU 22	; located in Bank ACCESS BANK
SYS_TMP2	EQU 23	; located in Bank ACCESS BANK
SYS_TMP3	EQU 24	; located in Bank ACCESS BANK
SYS_TMP4	EQU 25	; located in Bank ACCESS BANK
SYS_TMP5	EQU 26	; located in Bank ACCESS BANK
SYS_TMP6	EQU 27	; located in Bank ACCESS BANK
SYS_TMP7	EQU 28	; located in Bank ACCESS BANK
SYS_TMP8	EQU 29	; located in Bank ACCESS BANK
SYS_TMP9	EQU 30	; located in Bank ACCESS BANK
SYS_TMP10	EQU 31	; located in Bank ACCESS BANK
SYS_TMP11	EQU 32	; located in Bank ACCESS BANK
SYS_TMP12	EQU 33	; located in Bank ACCESS BANK
SYS_TMP13	EQU 34	; located in Bank ACCESS BANK
SYS_TMP14	EQU 35	; located in Bank ACCESS BANK
SYS_TMP15	EQU 36	; located in Bank ACCESS BANK
SYS_TMP16	EQU 37	; located in Bank ACCESS BANK
SYS_TMP17	EQU 38	; located in Bank ACCESS BANK
M0	EQU 39	; located in Bank ACCESS BANK
TEMPX	EQU 40	; located in Bank ACCESS BANK
TEMPX_1	EQU 41	; located in Bank ACCESS BANK
TEMPX_2	EQU 42	; located in Bank ACCESS BANK
TEMPX_3	EQU 43	; located in Bank ACCESS BANK
TEMP2	EQU 44	; located in Bank ACCESS BANK
TEMP2_1	EQU 45	; located in Bank ACCESS BANK
TEMP2_2	EQU 46	; located in Bank ACCESS BANK
TEMP2_3	EQU 47	; located in Bank ACCESS BANK
TEMPX2	EQU 48	; located in Bank ACCESS BANK
TEMPX2_1	EQU 49	; located in Bank ACCESS BANK
TEMPX2_2	EQU 50	; located in Bank ACCESS BANK
TEMPX2_3	EQU 51	; located in Bank ACCESS BANK
TEMPX3	EQU 52	; located in Bank ACCESS BANK
TEMPX3_1	EQU 53	; located in Bank ACCESS BANK
TEMPX3_2	EQU 54	; located in Bank ACCESS BANK
TEMPX3_3	EQU 55	; located in Bank ACCESS BANK
TEMPX4	EQU 56	; located in Bank ACCESS BANK
TEMPX4_1	EQU 57	; located in Bank ACCESS BANK
TEMPX4_2	EQU 58	; located in Bank ACCESS BANK
TEMPX4_3	EQU 59	; located in Bank ACCESS BANK
S0	EQU 60	; located in Bank ACCESS BANK
TR50	EQU 61	; located in Bank ACCESS BANK
TR50_1	EQU 62	; located in Bank ACCESS BANK
TEMP_TIZES	EQU 63	; located in Bank ACCESS BANK
TEMP_TIZES_1	EQU 64	; located in Bank ACCESS BANK
TEMP_TIZES_2	EQU 65	; located in Bank ACCESS BANK
TEMP_TIZES_3	EQU 66	; located in Bank ACCESS BANK
ZV103	EQU 67	; located in Bank ACCESS BANK
S1	EQU 68	; located in Bank ACCESS BANK
NEG_U	EQU 69	; located in Bank ACCESS BANK


BEGININC_86_

;-------------------------------------------------------
;---> DS18B20_DEF.INC
;-------------------------------------------------------

	ERRORLEVEL +306

; Port beállítás



; the corresponding tris-pin



	ERRORLEVEL -306

ENDINC_86_


; disable warning (Bankswitching)
	ERRORLEVEL -302
; disable warning (Pageswitching)
	ERRORLEVEL -306

;-------------------------------------------------------
; Program start
;-------------------------------------------------------
	ORG 0
	NOP
	BRA SYS_INIT
	NOP
	NOP

;-------------------------------------------------------
; Interrupt-address
;-------------------------------------------------------

	MOVFF FSR0L,SYS_FSAV
	MOVFF FSR0H,SYS_FSAV_1

	BTFSS INTCON,T0IF,A
	BRA NOTIMERINTERRUPT

	BCF INTCON,T0IF,A
; add 9 to timer0, so the interrupt occures after 250 ticks, instead 256
	MOVLW 9
	ADDWF TMR0,F,A	; W + f -> f

	INCFSZ TR50,F,A	; f + 1 -> f
	BRA TR50_NEXT

	INCF TR50_1,F,A	; f + 1 -> f

TR50_NEXT



NOTIMERINTERRUPT

;-------------------------------------------------------
; all transmitted ?
	BTFSC UA87RSFLAG,5,A
	BRA UA87_TXINT1

; send byte ?
	BTFSS PIE1,TX1IE,A
	BRA UA87_ENDTX

	BTFSS PIR1,TX1IF,A
	BRA UA87_ENDTX

; all transmitted ?
	MOVF UA87OUTBUF_1,W,A
	BTFSC STATUS,ZERO,A
	BRA UA87_TXINT1

; length-1
	DECF UA87OUTBUF_1,F,A	; f - 1 -> f
; setup indirect address
	MOVF UA87OUTBUF,W,A
	MOVWF FSR0L,A
	MOVLW HIGH UA87OUTBUF
	MOVWF FSR0H,A
; increment pointer
	INCF UA87OUTBUF,F,A	; f + 1 -> f
; get byte from buffer
	MOVF INDF0,W,A
	MOVWF TXREG1,A
	BRA UA87_ENDTX


UA87_TXINT1

; set check TRMT
	BSF UA87RSFLAG,5,A
	BCF PIE1,TX1IE,A
; last byte transmitted ?
	BTFSS TXSTA1,TRMT,A
	BRA UA87_ENDTX

; transmitter off
	BCF TXSTA1,TXEN,A
; set ready
	BSF UA87RSFLAG,4,A
; TRMT is empty
	BCF UA87RSFLAG,5,A

UA87_ENDTX


EXITINT

	MOVFF SYS_FSAV_1,FSR0H
	MOVFF SYS_FSAV,FSR0L

	RETFIE FAST	; FAST = restore STATUS,BSR,W-register, enable GIE/GIEH, PEIE/GIEL

;-------------------------------------------------------
; Multiplication 24-Bit
; SYS_TMP1,2,3          = OP1, lower byte first - Multiplicant
; SYS_TMP4,5,6          = OP2, lower byte first - Multiplier
; SYS_TMP7,8,9,10,11,12 = Result 48-Bit, lower byte first
; SYS_TMP13 = counter
;-------------------------------------------------------


SYSMUL24

; clear result
	CLRF SYS_TMP7,A	; 0 -> f
	CLRF SYS_TMP8,A	; 0 -> f
	CLRF SYS_TMP9,A	; 0 -> f
	CLRF SYS_TMP10,A	; 0 -> f
	CLRF SYS_TMP11,A	; 0 -> f
	CLRF SYS_TMP12,A	; 0 -> f

; set loopcounter
	MOVLW 24
	MOVWF SYS_TMP13,A


SYSMUL24_1

; shift right OP2
	RRCF SYS_TMP6,F,A
	RRCF SYS_TMP5,F,A
	RRCF SYS_TMP4,F,A

; if carry then add OP1 to result
	BTFSS STATUS,CARRY,A
	BRA SYSMUL24_2

	MOVF SYS_TMP1,W,A
	ADDWF SYS_TMP10,F,A	; W + f -> f

	MOVF SYS_TMP2,W,A
	ADDWFC SYS_TMP11,F,A	; W + f -> f

	MOVF SYS_TMP3,W,A
	ADDWFC SYS_TMP12,F,A	; W + f -> f


SYSMUL24_2

; shift right result
	RRCF SYS_TMP12,F,A
	RRCF SYS_TMP11,F,A
	RRCF SYS_TMP10,F,A
	RRCF SYS_TMP9,F,A
	RRCF SYS_TMP8,F,A
	RRCF SYS_TMP7,F,A
	DECFSZ SYS_TMP13,F,A	; f - 1 -> f
	BRA SYSMUL24_1

	RETURN

;-------------------------------------------------------

;-------------------------------------------------------
; Multiplication 32-Bit
; SYS_TMP1,2,3,4                = OP1, lower byte first - Multiplicant
; SYS_TMP5,6,7,8                = OP2, lower byte first - Multiplier
; SYS_TMP9,10,11,12,13,14,15,16 = Result 64-Bit, lower byte first
; SYS_TMP17 = counter
;-------------------------------------------------------


SYSMUL32

; clear result
	CLRF SYS_TMP9,A	; 0 -> f
	CLRF SYS_TMP10,A	; 0 -> f
	CLRF SYS_TMP11,A	; 0 -> f
	CLRF SYS_TMP12,A	; 0 -> f
	CLRF SYS_TMP13,A	; 0 -> f
	CLRF SYS_TMP14,A	; 0 -> f
	CLRF SYS_TMP15,A	; 0 -> f
	CLRF SYS_TMP16,A	; 0 -> f

; set loopcounter
	MOVLW 32
	MOVWF SYS_TMP17,A


SYSMUL32_1

; shift right OP2
	RRCF SYS_TMP8,F,A
	RRCF SYS_TMP7,F,A
	RRCF SYS_TMP6,F,A
	RRCF SYS_TMP5,F,A

; if carry then add OP1 to result
	BTFSS STATUS,CARRY,A
	BRA SYSMUL32_2

	MOVF SYS_TMP1,W,A
	ADDWF SYS_TMP13,F,A	; W + f -> f

	MOVF SYS_TMP2,W,A
	ADDWFC SYS_TMP14,F,A	; W + f -> f

	MOVF SYS_TMP3,W,A
	ADDWFC SYS_TMP15,F,A	; W + f -> f

	MOVF SYS_TMP4,W,A
	ADDWFC SYS_TMP16,F,A	; W + f -> f


SYSMUL32_2

; shift right result
	RRCF SYS_TMP16,F,A
	RRCF SYS_TMP15,F,A
	RRCF SYS_TMP14,F,A
	RRCF SYS_TMP13,F,A
	RRCF SYS_TMP12,F,A
	RRCF SYS_TMP11,F,A
	RRCF SYS_TMP10,F,A
	RRCF SYS_TMP9,F,A
	DECFSZ SYS_TMP17,F,A	; f - 1 -> f
	BRA SYSMUL32_1

	RETURN

;-------------------------------------------------------

;-------------------------------------------------------
; Division 32-Bit
; SYS_TMP1,2,3,4    = OP1, lower byte first
; SYS_TMP5,6,7,8    = OP2, lower byte first
; SYS_TMP9,10,11,12 = Result 24-Bit
; SYS_TMP13         = counter
;-------------------------------------------------------


SYSDIV32

; clear result
	CLRF SYS_TMP9,A	; 0 -> f
	CLRF SYS_TMP10,A	; 0 -> f
	CLRF SYS_TMP11,A	; 0 -> f
	CLRF SYS_TMP12,A	; 0 -> f

; check division by zero 
	MOVF SYS_TMP5,W,A
	IORWF SYS_TMP6,W,A
	IORWF SYS_TMP7,W,A
	IORWF SYS_TMP8,W,A
	BTFSC STATUS,ZERO,A
	BRA SYSDIV32_ERROR

; set counter
	MOVLW 1
	MOVWF SYS_TMP13,A

; align left OP2
	BCF STATUS,CARRY,A

SYSDIV32_1

	BTFSC SYS_TMP8,7,A
	BRA SYSDIV32_2
	INCF SYS_TMP13,F,A	; f + 1 -> f
	RLCF SYS_TMP5,F,A
	RLCF SYS_TMP6,F,A
	RLCF SYS_TMP7,F,A
	RLCF SYS_TMP8,F,A
	BRA SYSDIV32_1


SYSDIV32_2

; OP1-OP2
	MOVF SYS_TMP5,W,A
	SUBWF SYS_TMP1,F,A	; f - W -> f

	MOVF SYS_TMP6,W,A
	SUBWFB SYS_TMP2,F,A	; f - W -> f

	MOVF SYS_TMP7,W,A
	SUBWFB SYS_TMP3,F,A	; f - W -> f

	MOVF SYS_TMP8,W,A
	SUBWFB SYS_TMP4,F,A	; f - W -> f

; negative ? then rollback
	BTFSC STATUS,CARRY,A
	BRA SYSDIV32_3
; OP1+OP2
	MOVF SYS_TMP5,W,A
	ADDWF SYS_TMP1,F,A	; W + f -> f

	MOVF SYS_TMP6,W,A
	ADDWFC SYS_TMP2,F,A	; W + f -> f

	MOVF SYS_TMP7,W,A
	ADDWFC SYS_TMP3,F,A	; W + f -> f

	MOVF SYS_TMP8,W,A
	ADDWFC SYS_TMP4,F,A	; W + f -> f

	BCF STATUS,CARRY,A


SYSDIV32_3

; result left
	RLCF SYS_TMP9,F,A
	RLCF SYS_TMP10,F,A
	RLCF SYS_TMP11,F,A
	RLCF SYS_TMP12,F,A
; OP2 right
	RRCF SYS_TMP8,F,A
	RRCF SYS_TMP7,F,A
	RRCF SYS_TMP6,F,A
	RRCF SYS_TMP5,F,A
; dec counter
	DECFSZ SYS_TMP13,F,A	; f - 1 -> f
	BRA SYSDIV32_2

	RETURN


SYSDIV32_ERROR

	DECF SYS_TMP9,F	; f - 1 -> f
	DECF SYS_TMP10,F	; f - 1 -> f
	DECF SYS_TMP11,F	; f - 1 -> f
	DECF SYS_TMP12,F	; f - 1 -> f
	RETURN

;-------------------------------------------------------
; Subroutines
;-------------------------------------------------------

;-------------------------------------------------------
; System Delay
;-------------------------------------------------------

SYS_DELAY

	MOVWF SYS_TMP0,A

SYS_DELAY_1

	DECFSZ SYS_TMP0,F,A	; f - 1 -> f
	BRA SYS_DELAY_1

SYS_DELAY_4

	RETURN

;-------------------------------------------------------
; Subroutines for LCD1
;-------------------------------------------------------


LCD1_INIT

; wait long
	CLRF SYS_TMP1,A	; 0 -> f

LCD1_INIT1

	RCALL LCD1_OUT4
	DECFSZ SYS_TMP1,F,A	; f - 1 -> f
	BRA LCD1_INIT1

; Maybe the worst case. The display is already in 4-Bit mode and waits for the second nibble !!
; So we have to reset it back to the 8-Bit mode - three times

; IR-Register
	BCF PORTD,4,A
	NOP
	MOVF PORTD,W,A
	ANDLW 240
	IORLW 3
	MOVWF PORTD,A
	NOP

; 1st
	BSF PORTD,5,A
	RCALL SYS_DELAY_4
	BCF PORTD,5,A

; wait long

LCD1_INIT2

	RCALL LCD1_OUT4
	DECFSZ SYS_TMP1,F,A	; f - 1 -> f
	BRA LCD1_INIT2

; 2nd
	BSF PORTD,5,A
	RCALL SYS_DELAY_4
	BCF PORTD,5,A

; wait long

LCD1_INIT3

	RCALL LCD1_OUT4
	DECFSZ SYS_TMP1,F,A	; f - 1 -> f
	BRA LCD1_INIT3

; 3rd
	BSF PORTD,5,A
	RCALL SYS_DELAY_4
	BCF PORTD,5,A

; wait long

LCD1_INIT4

	RCALL LCD1_OUT4
	DECFSZ SYS_TMP1,F,A	; f - 1 -> f
	BRA LCD1_INIT4

; function set 4-bit, this is the last 8-Bit command
	BCF PORTD,0,A
	NOP
	BSF PORTD,5,A
	RCALL SYS_DELAY_4
	BCF PORTD,5,A

; wait long

LCD1_INIT5

	RCALL LCD1_OUT4
	DECFSZ SYS_TMP1,F,A	; f - 1 -> f
	BRA LCD1_INIT5

; function set 4-bit,2-lines = 00101000
	MOVLW 40
	RCALL LCD1_OUT
; display on, cursor off, blink off = 00001100
	MOVLW 12
	RCALL LCD1_OUT
; entrymode set = 00000110"
	MOVLW 6
	RCALL LCD1_OUT
; entrypoint display clear = 00000001

LCD1_CLR

	MOVLW 1
	RCALL LCD1_WRITE_IR
; wait long
	CLRF SYS_TMP1,A	; 0 -> f

LCD1_INIT6

	RCALL LCD1_OUT4
	DECFSZ SYS_TMP1,F,A	; f - 1 -> f
	BRA LCD1_INIT6

	BRA LCD1_OUT4

;-------------------------------------------------------
; LCD Write DDRAM or CGRAM
;-------------------------------------------------------

LCD1_WRITE_DDRAM

; DDRAM or CGRAM
	BSF PORTD,4,A
	BRA LCD1_OUT


;-------------------------------------------------------
; LCD Set CGRAM
;-------------------------------------------------------

LCD1_SET_CGRAM

	IORLW 64
	BRA LCD1_WRITE_IR

;-------------------------------------------------------
; LCD Set DDRAM
;-------------------------------------------------------

LCD1_SET_DDRAM

	IORLW 128
;-------------------------------------------------------
; LCD Write IR
;-------------------------------------------------------

LCD1_WRITE_IR

; IR-Register
	BCF PORTD,4,A
;-------------------------------------------------------
; LCD Out Bit-7...4 first
; W-Register contains the byte to be written
;-------------------------------------------------------


LCD1_OUT

	MOVWF SYS_TMP1,A

LCD1_OUT1

	CLRF SYS_TMP3,A	; 0 -> f

LCD1_OUT2

	SWAPF SYS_TMP1,W,A

LCD1_OUT3

	ANDLW 15
	MOVWF SYS_TMP2,A
	MOVF PORTD,W,A
	ANDLW 240
	IORWF SYS_TMP2,W,A
	MOVWF PORTD,A
	NOP

	BSF PORTD,5,A
	RCALL SYS_DELAY_4
	BCF PORTD,5,A

	BTFSC SYS_TMP3,0,A
	BRA LCD1_OUT4

	BSF SYS_TMP3,0,A
	MOVF SYS_TMP1,W,A
	BRA LCD1_OUT3



LCD1_OUT4

	MOVLW 83
	MOVWF SYS_TMP3,A

LCD1_OUT5

	DECFSZ SYS_TMP3,F,A	; f - 1 -> f
	BRA LCD1_OUT5

	RETURN

;-------------------------------------------------------
; GOTOXY - Set Cursor Position
; SYS_TMP1  = X
; SYS_TMP2  = Y
; SYS_TMP12 = copy of X (only if a 1 Line-Display is used)
;-------------------------------------------------------

LCD1_GOTOXY

; Ypos bit-0
	MOVLW 64
	BTFSC SYS_TMP2,0,A
	ADDWF SYS_TMP1,F,A	; W + f -> f
	MOVLW 20
; Ypos bit-1
	BTFSC SYS_TMP2,1,A
	ADDWF SYS_TMP1,F,A	; W + f -> f
	MOVF SYS_TMP1,W,A
	BRA LCD1_SET_DDRAM


;-------------------------------------------------------


LCD1_CONVERTHEX

; only lower nibble
	ANDLW 15
	MOVWF SYS_TMP1,A
; add asc'0', if greater or equal 10 add asc'7'
	MOVLW 10
	SUBWF SYS_TMP1,W,A	; f - W -> W
	MOVLW 55
	BTFSS STATUS,CARRY,A
	MOVLW 48
	ADDWF SYS_TMP1,F,A	; W + f -> f
	MOVF SYS_TMP1,W,A
	BRA LCD1_WRITE_DDRAM

;-------------------------------------------------------
; Write String
;-------------------------------------------------------


LCD1_WRITESTR

	RCALL LCD1_GETROMCHAR
; last is zero
	ANDLW 255
	BTFSC STATUS,ZERO,A
	RETURN

	RCALL LCD1_WRITE_DDRAM
; next char
	INCF SYS_TMP5,F,A	; f + 1 -> f
	INCFSZ SYS_TMP5,F,A	; f + 1 -> f
	BRA LCD1_WRITESTR

; next page
	INCF SYS_TMP6,F,A	; f + 1 -> f
	BRA LCD1_WRITESTR

; direct jump into the table

LCD1_GETROMCHAR

	MOVF SYS_TMP6,W,A
	MOVWF PCLATH,A
	MOVF SYS_TMP5,W,A
	MOVWF PCL,A

;-------------------------------------------------------


LCD1_WRITE_DEZ

; test zero
	ANDLW 255
	BTFSS STATUS,ZERO,A
	BCF SYS_TMP9,0,A
	BTFSS SYS_TMP9,0,A
	ADDLW 48	; k + W -> W
	BTFSC SYS_TMP9,0,A
	ADDLW 32	; k + W -> W
	BRA LCD1_WRITE_DDRAM

;-------------------------------------------------------


LCD1_CONVERTDEZ

	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	DECF SYS_TMP10,F	; f - 1 -> f
	CLRF SYS_TMP11,A	; 0 -> f

LCD1_CONVERTDEZ2

	INCF SYS_TMP11,F,A	; f + 1 -> f

	MOVF SYS_TMP1,W,A
	SUBWF SYS_TMP5,F,A	; f - W -> f

	MOVF SYS_TMP2,W,A
	BTFSS STATUS,CARRY,A
	INCFSZ SYS_TMP2,W,A	; f + 1 -> w
	SUBWF SYS_TMP6,F,A	; f - W -> f

	MOVF SYS_TMP3,W,A
	BTFSS STATUS,CARRY,A
	INCFSZ SYS_TMP3,W,A	; f + 1 -> w
	SUBWF SYS_TMP7,F,A	; f - W -> f

	MOVF SYS_TMP4,W,A
	BTFSS STATUS,CARRY,A
	INCFSZ SYS_TMP4,W,A	; f + 1 -> w
	SUBWF SYS_TMP8,F,A	; f - W -> f

	BTFSC STATUS,CARRY,A
	BRA LCD1_CONVERTDEZ2

	MOVF SYS_TMP1,W,A
	ADDWF SYS_TMP5,F,A	; W + f -> f

	MOVF SYS_TMP2,W,A
	BTFSC STATUS,CARRY,A
	INCFSZ SYS_TMP2,W,A	; f + 1 -> w
	ADDWF SYS_TMP6,F,A	; W + f -> f

	MOVF SYS_TMP3,W,A
	BTFSC STATUS,CARRY,A
	INCFSZ SYS_TMP3,W,A	; f + 1 -> w
	ADDWF SYS_TMP7,F,A	; W + f -> f

	MOVF SYS_TMP4,W,A
	BTFSC STATUS,CARRY,A
	INCFSZ SYS_TMP4,W,A	; f + 1 -> w
	ADDWF SYS_TMP8,F,A	; W + f -> f

	DECF SYS_TMP11,W	; f + 1 -> w
	RETURN

;-------------------------------------------------------

LCD1_1000000000


	MOVLW 0
	MOVWF SYS_TMP1,A
	MOVLW 202
	MOVWF SYS_TMP2,A
	MOVLW 154
	MOVWF SYS_TMP3,A
	MOVLW 59
	MOVWF SYS_TMP4,A

	RCALL LCD1_CONVERTDEZ
	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	BRA LCD1_100000000

	RCALL LCD1_WRITE_DEZ

LCD1_100000000


	MOVLW 0
	MOVWF SYS_TMP1,A
	MOVLW 225
	MOVWF SYS_TMP2,A
	MOVLW 245
	MOVWF SYS_TMP3,A
	MOVLW 5
	MOVWF SYS_TMP4,A

	RCALL LCD1_CONVERTDEZ
	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	BRA LCD1_10000000

	RCALL LCD1_WRITE_DEZ

LCD1_10000000


	MOVLW 128
	MOVWF SYS_TMP1,A
	MOVLW 150
	MOVWF SYS_TMP2,A
	MOVLW 152
	MOVWF SYS_TMP3,A
	MOVLW 0
	MOVWF SYS_TMP4,A

	RCALL LCD1_CONVERTDEZ
	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	BRA LCD1_1000000

	RCALL LCD1_WRITE_DEZ

LCD1_1000000


	MOVLW 64
	MOVWF SYS_TMP1,A
	MOVLW 66
	MOVWF SYS_TMP2,A
	MOVLW 15
	MOVWF SYS_TMP3,A
	MOVLW 0
	MOVWF SYS_TMP4,A

	RCALL LCD1_CONVERTDEZ
	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	BRA LCD1_100000

	RCALL LCD1_WRITE_DEZ

LCD1_100000


	MOVLW 160
	MOVWF SYS_TMP1,A
	MOVLW 134
	MOVWF SYS_TMP2,A
	MOVLW 1
	MOVWF SYS_TMP3,A
	MOVLW 0
	MOVWF SYS_TMP4,A

	RCALL LCD1_CONVERTDEZ
	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	BRA LCD1_10000

	RCALL LCD1_WRITE_DEZ

LCD1_10000


	MOVLW 16
	MOVWF SYS_TMP1,A
	MOVLW 39
	MOVWF SYS_TMP2,A
	MOVLW 0
	MOVWF SYS_TMP3,A
	MOVLW 0
	MOVWF SYS_TMP4,A

	RCALL LCD1_CONVERTDEZ
	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	BRA LCD1_1000

	RCALL LCD1_WRITE_DEZ

LCD1_1000


	MOVLW 232
	MOVWF SYS_TMP1,A
	MOVLW 3
	MOVWF SYS_TMP2,A
	MOVLW 0
	MOVWF SYS_TMP3,A
	MOVLW 0
	MOVWF SYS_TMP4,A

	RCALL LCD1_CONVERTDEZ
	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	BRA LCD1_100

	RCALL LCD1_WRITE_DEZ

LCD1_100


	MOVLW 100
	MOVWF SYS_TMP1,A
	MOVLW 0
	MOVWF SYS_TMP2,A
	MOVLW 0
	MOVWF SYS_TMP3,A
	MOVLW 0
	MOVWF SYS_TMP4,A

	RCALL LCD1_CONVERTDEZ
	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	BRA LCD1_10

	RCALL LCD1_WRITE_DEZ

LCD1_10


	MOVLW 10
	MOVWF SYS_TMP1,A
	MOVLW 0
	MOVWF SYS_TMP2,A
	MOVLW 0
	MOVWF SYS_TMP3,A
	MOVLW 0
	MOVWF SYS_TMP4,A

	RCALL LCD1_CONVERTDEZ
	MOVF SYS_TMP10,F,A
	BTFSS STATUS,ZERO,A
	BRA LCD1_1

	RCALL LCD1_WRITE_DEZ

LCD1_1

	BCF SYS_TMP9,0,A
	MOVF SYS_TMP5,W,A
	BRA LCD1_WRITE_DEZ


BEGININC_54_

;-------------------------------------------------------
;---> 1W_SIM.INC
;-------------------------------------------------------

	ERRORLEVEL +306


;nop

DL01

	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ R4L,F,A
	BRA DL01
	RETURN



DL02

	MOVLW 0X04
	SUBWF R4L,F,A
	CLRF WREG,A
	BTFSS STATUS,C,A
	ADDLW 0X04
	SUBWF R4H,F,A
	BTFSS STATUS,C,A
	RETURN
	BRA DL02


; 1-wire Routine


WW01

	BCF INTCON,GIE,A
	BCF LATB,0,A
	BCF TRISB,0,A
	MOVLW 0XFF
	MOVWF R4L,A
	RCALL DL01
	BSF TRISB,0,A
	MOVLW 0XF6
	MOVWF R4L,A
	RCALL DL01
	BTFSC PORTB,0,A
	BSF STATUS,C,A
	BTFSS PORTB,0,A
	BCF STATUS,C,A
	MOVLW 0XFF
	MOVWF R4L,A
	RCALL DL01
	BSF INTCON,GIE,A
	RETURN



WW02

	BCF LATB,0,A
	BCF TRISB,0,A
;NOP
	NOP
	BSF TRISB,0,A
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	BTFSC PORTB,0,A
	BSF STATUS,C,A
	BTFSS PORTB,0,A
	BCF STATUS,C,A
	MOVLW 0X85  ;15
	MOVWF R4L,A
	RCALL DL01
	RETURN



WW03

	BCF LATB,0,A
	BCF TRISB,0,A
	NOP
	NOP
	BSF LATB,0,A
	MOVLW 0X37  ;17
	MOVWF R4L,A
	RCALL DL01
	BSF TRISB,0,A
	NOP
;NOP
;NOP
	NOP
	RETURN



WW04

	BCF LATB,0,A
	BCF TRISB,0,A
	MOVLW 0X32  ;18
	MOVWF R4L,A
	RCALL DL01
	BSF TRISB,0,A
	NOP
;NOP
;NOP
	NOP
	RETURN


WW05

	MOVWF R3H,A
	MOVLW 0X08
	MOVWF R3L,A


WW06

	BTFSC R3H,0,A
	RCALL WW03
	BTFSS R3H,0,A
	RCALL WW04
	RRCF R3H,F,A
	DECFSZ R3L,F,A
	BRA WW06
	RETURN



WW07

	BCF INTCON,GIE,A
	MOVLW 0X08
	MOVWF R3L,A


WW08

	RCALL WW02
	RRCF R3H,F,A
	DECFSZ R3L,F,A
	BRA WW08
	MOVF R3H,W,A
	BSF INTCON,GIE,A
	RETURN
	ERRORLEVEL -306

ENDINC_54_


;-------------------------------------------------------
; Initialisation
;-------------------------------------------------------

SYS_INIT

	MOVLB 0	; bank 0
	CLRF INTCON,A	; 0 -> f

; Set output before direction

	MOVLW B'00000000'
	MOVWF PORTA,A

	MOVLW B'00000000'
	MOVWF PORTB,A

	MOVLW B'00000000'
	MOVWF PORTC,A

	MOVLW B'00000000'
	MOVWF PORTD,A

	MOVLW B'00000000'
	MOVWF PORTE,A

	MOVLW B'00000000'
	MOVWF PORTF,A

	MOVLW B'00000000'
	MOVWF PORTG,A

	MOVLW B'00000000'
	MOVWF PORTH,A

	MOVLW B'00000000'
	MOVWF PORTJ,A

; set direction

	MOVLW B'11111111'
	MOVWF TRISA,A

	MOVLW B'11111111'
	MOVWF TRISB,A

	MOVLW B'11111111'
	MOVWF TRISC,A

	MOVLW B'11000000'
	MOVWF TRISD,A

	MOVLW B'11111111'
	MOVWF TRISE,A

	MOVLW B'11111111'
	MOVWF TRISF,A

	MOVLW B'11111111'
	MOVWF TRISG,A

	MOVLW B'11111111'
	MOVWF TRISH,A

	MOVLW B'11111111'
	MOVWF TRISJ,A


; init some registers

; Timer 0
	MOVLW 223
	MOVWF T0CON,A
	BSF INTCON,T0IE,A

; A/D off
	MOVLW 15
	MOVWF ADCON1,A
	CLRF ADCON2,A	; 0 -> f

	MOVLW 7
	MOVWF CMCON,A

;-------------------------------------------------------
; Clear RAM
;-------------------------------------------------------

; Clear from $000 to $F5F

	LFSR 0,0

SYSClearRAM1

	CLRF POSTINC0,A	; 0 -> f
	MOVLW 15
	SUBWF FSR0H,W,A	; f - W -> W
	BTFSS STATUS,ZERO,A
	BRA SYSClearRAM1
	MOVLW 96
	SUBWF FSR0L,W,A	; f - W -> W
	BTFSS STATUS,ZERO,A
	BRA SYSClearRAM1

;-------------------------------------------------------

; init vars


;-------------------------------------------------------
; Init LCD-module -> LCD1
;-------------------------------------------------------
	RCALL LCD1_INIT

; SERIAL ENABLED, 8-bit
	MOVLW 128
	MOVWF RCSTA1,A

; set baudrate
	MOVLW 129
	MOVWF SPBRG1,A
; 8-Bit,TRANSMIT DISABLED,ASYNCHRON,BRGH=1=HIGH SPEED
	MOVLW 4
	MOVWF TXSTA1,A

; PERIPHERIE INT ENABLE
	BSF INTCON,PEIE,A

	CLRF TMR0,A	; 0 -> f
; enable interrupts
	BCF INTCON,T0IF,A
	BSF INTCON,GIE,A

;-------------------------------------------------------
; Main program
;-------------------------------------------------------


MAIN


BEGININC_53_

;-------------------------------------------------------
;---> 1W_OLVAS.INC
;-------------------------------------------------------

	ERRORLEVEL +306


; If M0.0 Is High, call the subroutine

;banksel M0
	BTFSS M0,0,A
	BRA NOREADTEMPERATURE


;9; DS18S20Start
	RCALL WW01

	MOVLW 204
	RCALL WW05

	MOVLW 68
	RCALL WW05


;  DS18S20ReadT temp, neg
	RCALL WW01

	MOVLW 204
	RCALL WW05

	MOVLW 190
	RCALL WW05

	RCALL WW07

	MOVWF TEMP,A
	RCALL WW07

	MOVWF TEMP_1,A
	MOVWF NEG,A
	BTFSS TEMP_1,7,A
	BRA POZITIV

	BSF NEG,1,A
	COMF TEMP,F,A
	COMF TEMP_1,F,A
	BCF STATUS,Z,A
	INCF TEMP,F,A
	BTFSC STATUS,Z,A
	INCF TEMP_1,F,A



POZITIV

	RCALL WW01




NOREADTEMPERATURE


	ERRORLEVEL -306

ENDINC_53_



;-------------------------------------------------------
; LG9
;-------------------------------------------------------


LG9_1

	BTFSS S0,1,A
	BRA LG9_FALSE


LG9_TRUE

	BSF M0,0,A
	BRA LG9_END


LG9_FALSE

	BCF M0,0,A

LG9_END


;-------------------------------------------------------
; AF29
;-------------------------------------------------------

	MOVF TEMP,W,A
	MOVWF SYS_TMP1,A
	MOVF TEMP_1,W,A
	MOVWF SYS_TMP2,A
	MOVF TEMP_2,W,A
	MOVWF SYS_TMP3,A
	MOVLW 16
	MOVWF SYS_TMP4,A
	MOVLW 39
	MOVWF SYS_TMP5,A
	MOVLW 0
	MOVWF SYS_TMP6,A

	RCALL SYSMUL24

	MOVF SYS_TMP7,W,A
	MOVWF TEMPX,A
	MOVF SYS_TMP8,W,A
	MOVWF TEMPX_1,A
	MOVF SYS_TMP9,W,A
	MOVWF TEMPX_2,A
	MOVF SYS_TMP10,W,A
	MOVWF TEMPX_3,A


;-------------------------------------------------------
; AF33
;-------------------------------------------------------

	MOVF TEMPX,W,A
	MOVWF SYS_TMP1,A
	MOVF TEMPX_1,W,A
	MOVWF SYS_TMP2,A
	MOVF TEMPX_2,W,A
	MOVWF SYS_TMP3,A
	MOVF TEMPX_3,W,A
	MOVWF SYS_TMP4,A
	MOVLW 0
	MOVWF SYS_TMP5,A
	MOVLW 113
	MOVWF SYS_TMP6,A
	MOVLW 2
	MOVWF SYS_TMP7,A
	MOVLW 0
	MOVWF SYS_TMP8,A

	RCALL SYSDIV32

	MOVF SYS_TMP9,W,A
	MOVWF TEMP2,A
	MOVF SYS_TMP10,W,A
	MOVWF TEMP2_1,A
	MOVF SYS_TMP11,W,A
	MOVWF TEMP2_2,A
	MOVF SYS_TMP12,W,A
	MOVWF TEMP2_3,A


;-------------------------------------------------------
; AF37
;-------------------------------------------------------

	MOVF TEMPX,W,A
	MOVWF SYS_TMP1,A
	MOVF TEMPX_1,W,A
	MOVWF SYS_TMP2,A
	MOVF TEMPX_2,W,A
	MOVWF SYS_TMP3,A
	MOVF TEMPX_3,W,A
	MOVWF SYS_TMP4,A
	MOVLW 16
	MOVWF SYS_TMP5,A
	MOVLW 0
	MOVWF SYS_TMP6,A
	MOVLW 0
	MOVWF SYS_TMP7,A
	MOVLW 0
	MOVWF SYS_TMP8,A

	RCALL SYSDIV32

	MOVF SYS_TMP9,W,A
	MOVWF TEMPX2,A
	MOVF SYS_TMP10,W,A
	MOVWF TEMPX2_1,A
	MOVF SYS_TMP11,W,A
	MOVWF TEMPX2_2,A
	MOVF SYS_TMP12,W,A
	MOVWF TEMPX2_3,A


;-------------------------------------------------------
; AF41
;-------------------------------------------------------

	MOVF TEMP2,W,A
	MOVWF SYS_TMP1,A
	MOVF TEMP2_1,W,A
	MOVWF SYS_TMP2,A
	MOVF TEMP2_2,W,A
	MOVWF SYS_TMP3,A
	MOVF TEMP2_3,W,A
	MOVWF SYS_TMP4,A
	MOVLW 16
	MOVWF SYS_TMP5,A
	MOVLW 39
	MOVWF SYS_TMP6,A
	MOVLW 0
	MOVWF SYS_TMP7,A
	MOVLW 0
	MOVWF SYS_TMP8,A

	RCALL SYSMUL32

	MOVF SYS_TMP9,W,A
	MOVWF TEMPX3,A
	MOVF SYS_TMP10,W,A
	MOVWF TEMPX3_1,A
	MOVF SYS_TMP11,W,A
	MOVWF TEMPX3_2,A
	MOVF SYS_TMP12,W,A
	MOVWF TEMPX3_3,A


;-------------------------------------------------------
; AF45
;-------------------------------------------------------

	MOVF TEMPX3,W,A
	SUBWF TEMPX2,W,A	; f - W -> W
	MOVWF TEMPX4,A

	MOVF TEMPX2_1,W,A
	MOVWF TEMPX4_1,A
	MOVF TEMPX3_1,W,A
	SUBWFB TEMPX4_1,F,A	; f - W -> f

	MOVF TEMPX2_2,W,A
	MOVWF TEMPX4_2,A
	MOVF TEMPX3_2,W,A
	SUBWFB TEMPX4_2,F,A	; f - W -> f

	MOVF TEMPX2_3,W,A
	MOVWF TEMPX4_3,A
	MOVF TEMPX3_3,W,A
	SUBWFB TEMPX4_3,F,A	; f - W -> f


;-------------------------------------------------------
; LCD1
;-------------------------------------------------------


;-------------------------------------------------------
; TR50
;-------------------------------------------------------

	BCF INTCON,GIE,A
	MOVLW 3
	SUBWF TR50_1,W,A	; f - W -> W
	BTFSS STATUS,ZERO,A
	BRA TR50_CHECK


	MOVLW 232
	SUBWF TR50,W,A	; f - W -> W

TR50_CHECK

	BTFSS STATUS,CARRY,A
	BRA TR50_END


TR50_RESET

	MOVLW 3
	SUBWF TR50_1,F,A	; f - W -> f
	MOVLW 232
	SUBWF TR50,F,A	; f - W -> f
	BTFSS STATUS,CARRY,A
	DECF TR50_1,F,A	; f - 1 -> f

TR50_SET

	BTFSC S0,0,A
	BRA TR50_CLR

	BSF S0,0,A
	BRA TR50_END


TR50_CLR

	BCF S0,0,A


TR50_END

	BSF INTCON,GIE,A

;-------------------------------------------------------
; LT56
;-------------------------------------------------------

; check positive edge

	BTFSC _FD1,0,A
	BRA LT56_SETFD
	BTFSS S0,0,A
	BRA LT56_SETFD
	BSF _FD1,0,A


	MOVLW 5
	MOVWF SYS_TMP1,A
	MOVLW 3
	MOVWF SYS_TMP2,A
	RCALL LCD1_GOTOXY
	MOVF TEMP2,W,A
	MOVWF SYS_TMP5,A
	MOVF TEMP2_1,W,A
	MOVWF SYS_TMP6,A
	MOVF TEMP2_2,W,A
	MOVWF SYS_TMP7,A
	MOVF TEMP2_3,W,A
	MOVWF SYS_TMP8,A

	BSF SYS_TMP9,0,A
	MOVLW 8
	MOVWF SYS_TMP10,A
	RCALL LCD1_1000000000

LT56_SETFD

; check negative

	BTFSC S0,0,A
	BRA LT56_EXIT
	BCF _FD1,0,A

LT56_EXIT



;-------------------------------------------------------
; LT59
;-------------------------------------------------------

; check positive edge

	BTFSC _FD1,1,A
	BRA LT59_SETFD
	BTFSS S0,0,A
	BRA LT59_SETFD
	BSF _FD1,1,A


	MOVLW 8
	MOVWF SYS_TMP1,A
	MOVLW 3
	MOVWF SYS_TMP2,A
	RCALL LCD1_GOTOXY
	MOVLW LOW LT59_TEXT1
	MOVWF SYS_TMP5,A
	MOVLW HIGH LT59_TEXT1
	MOVWF SYS_TMP6,A
	RCALL LCD1_WRITESTR

LT59_SETFD

; check negative

	BTFSC S0,0,A
	BRA LT59_EXIT
	BCF _FD1,1,A

LT59_EXIT



;-------------------------------------------------------
; LT62
;-------------------------------------------------------

; check positive edge

	BTFSC _FD1,2,A
	BRA LT62_SETFD
	BTFSS S0,0,A
	BRA LT62_SETFD
	BSF _FD1,2,A


	MOVLW 9
	MOVWF SYS_TMP1,A
	MOVLW 3
	MOVWF SYS_TMP2,A
	RCALL LCD1_GOTOXY
	MOVF TEMPX4,W,A
	MOVWF SYS_TMP5,A
	MOVF TEMPX4_1,W,A
	MOVWF SYS_TMP6,A
	MOVF TEMPX4_2,W,A
	MOVWF SYS_TMP7,A
	MOVF TEMPX4_3,W,A
	MOVWF SYS_TMP8,A

	BCF SYS_TMP9,0,A
	MOVLW 7
	MOVWF SYS_TMP10,A
	RCALL LCD1_1000000000

LT62_SETFD

; check negative

	BTFSC S0,0,A
	BRA LT62_EXIT
	BCF _FD1,2,A

LT62_EXIT



;-------------------------------------------------------
; LT69
;-------------------------------------------------------

; check positive edge

	BTFSC _FD1,3,A
	BRA LT69_SETFD
	BTFSS S0,0,A
	BRA LT69_SETFD
	BSF _FD1,3,A


	MOVLW 14
	MOVWF SYS_TMP1,A
	MOVLW 3
	MOVWF SYS_TMP2,A
	RCALL LCD1_GOTOXY
	MOVLW LOW LT69_TEXT1
	MOVWF SYS_TMP5,A
	MOVLW HIGH LT69_TEXT1
	MOVWF SYS_TMP6,A
	RCALL LCD1_WRITESTR

LT69_SETFD

; check negative

	BTFSC S0,0,A
	BRA LT69_EXIT
	BCF _FD1,3,A

LT69_EXIT



;-------------------------------------------------------
; LT75
;-------------------------------------------------------

; check positive edge

	BTFSC _FD1,4,A
	BRA LT75_SETFD
	BTFSS S0,0,A
	BRA LT75_SETFD
	BSF _FD1,4,A


	MOVLW 0
	MOVWF SYS_TMP1,A
	MOVLW 0
	MOVWF SYS_TMP2,A
	RCALL LCD1_GOTOXY
	MOVF TEMP,W,A
	MOVWF SYS_TMP5,A
	MOVF TEMP_1,W,A
	MOVWF SYS_TMP6,A
	MOVF TEMP_2,W,A
	MOVWF SYS_TMP7,A
	MOVF TEMP_3,W,A
	MOVWF SYS_TMP8,A
	MOVLW 16
	MOVWF SYS_TMP10,A


LT75_FIXED

	RLCF SYS_TMP5,F,A
	RLCF SYS_TMP6,F,A
	RLCF SYS_TMP7,F,A
	RLCF SYS_TMP8,F,A
	DECFSZ SYS_TMP10,F,A	; f - 1 -> f
	BRA LT75_FIXED

	BCF SYS_TMP9,0,A
	MOVLW 16
	MOVWF SYS_TMP10,A


LT75_BIN

	RLCF SYS_TMP5,F,A
	RLCF SYS_TMP6,F,A
	RLCF SYS_TMP7,F,A
	RLCF SYS_TMP8,F,A
	MOVLW 0
	BTFSC STATUS,CARRY,A
	MOVLW 1
	RCALL LCD1_WRITE_DEZ
	DECFSZ SYS_TMP10,F,A	; f - 1 -> f
	BRA LT75_BIN

LT75_SETFD

; check negative

	BTFSC S0,0,A
	BRA LT75_EXIT
	BCF _FD1,4,A

LT75_EXIT



;-------------------------------------------------------
; OS78
;-------------------------------------------------------

	BTFSC _FD1,5,A
	BRA OS78_2

	BTFSC S0,7,A
	BRA OS78_SETFD

	BSF _FD1,5,A
	BRA OS78_EXIT


OS78_2

	BTFSC _FD1,6,A
	BRA OS78_SETFD

	BSF _FD1,6,A
	BSF S0,1,A
	BRA OS78_EXIT


OS78_SETFD

	BCF S0,1,A
	BTFSS S0,7,A
	BRA OS78_EXIT


	BCF _FD1,5,A
	BCF _FD1,6,A

OS78_EXIT


;-------------------------------------------------------
; UA87
;-------------------------------------------------------


;-------------------------------------------------------
; UD88
;-------------------------------------------------------

; active ?
	BTFSC S0,2,A
	BRA UD88_1


; check positive edge

	BTFSC _FD1,7,A
	BRA UD88_SETFD
	BTFSS S0,4,A
	BRA UD88_SETFD
	BSF _FD1,7,A


; OUTBUF+0 = address
; OUTBUF+1 = length
; OUTBUF+2...4 = data
; OUTBUF+5 = checksum

; set pointer (address)
	MOVLW LOW UA87OUTBUF+2
	MOVWF UA87OUTBUF,A
; init checksum
	MOVLW 170
	MOVWF UA87OUTBUF_5,A
; length = 4 bytes
	MOVLW 4
	MOVWF UA87OUTBUF_1,A
; copy data to OUTBUF
	MOVF NEG_U,W,A
	MOVWF UA87OUTBUF_2,A
	ADDWF UA87OUTBUF_5,F,A	; W + f -> f
	MOVF TEMP2,W,A
	MOVWF UA87OUTBUF_3,A
	ADDWF UA87OUTBUF_5,F,A	; W + f -> f
	MOVF TEMP_TIZES,W,A
	MOVWF UA87OUTBUF_4,A
	ADDWF UA87OUTBUF_5,F,A	; W + f -> f


; set not ready
	BCF UA87RSFLAG,4,A
; set not transmitted
	BCF UA87RSFLAG,5,A
; activate
	BSF S0,2,A
	BSF TXSTA1,TXEN,A
; enable INTERRUPT for transmit
	BSF PIE1,TX1IE,A

UD88_1

; transmit ready ?
	BTFSS UA87RSFLAG,4,A
	BRA UD88_2

; not active
	BCF S0,2,A


UD88_2


UD88_SETFD

; check negative

	BTFSC S0,4,A
	BRA UD88_EXIT
	BCF _FD1,7,A

UD88_EXIT



;-------------------------------------------------------
; AF92
;-------------------------------------------------------

	MOVF TEMPX4,W,A
	MOVWF SYS_TMP1,A
	MOVF TEMPX4_1,W,A
	MOVWF SYS_TMP2,A
	MOVF TEMPX4_2,W,A
	MOVWF SYS_TMP3,A
	MOVF TEMPX4_3,W,A
	MOVWF SYS_TMP4,A
	MOVLW 232
	MOVWF SYS_TMP5,A
	MOVLW 3
	MOVWF SYS_TMP6,A
	MOVLW 0
	MOVWF SYS_TMP7,A
	MOVLW 0
	MOVWF SYS_TMP8,A

	RCALL SYSDIV32

	MOVF SYS_TMP9,W,A
	MOVWF TEMP_TIZES,A
	MOVF SYS_TMP10,W,A
	MOVWF TEMP_TIZES_1,A
	MOVF SYS_TMP11,W,A
	MOVWF TEMP_TIZES_2,A
	MOVF SYS_TMP12,W,A
	MOVWF TEMP_TIZES_3,A


;-------------------------------------------------------
; ZV103
;-------------------------------------------------------

	BTFSS S0,3,A
	BRA ZV103_COUNT

	CLRF ZV103,A	; 0 -> f
	BRA ZV103_SETOUT


ZV103_COUNT

; check positive edge

	BTFSC _FD2,0,A
	BRA ZV103_SETFD
	BTFSS S0,0,A
	BRA ZV103_SETFD
	BSF _FD2,0,A

	BTFSC PWR,0,A
	BRA ZV103_BACKWARD

	INCF ZV103,F,A	; f + 1 -> f
	BRA ZV103_SETOUT


ZV103_BACKWARD

	DECF ZV103,F	; f - 1 -> f

ZV103_SETOUT

;-------------------------------------------------------

	BTFSS ZV103,0,A
	BRA ZV103_CR_0

	BSF S1,0,A
	BRA ZV103_CN_0


ZV103_CR_0

	BCF S1,0,A

ZV103_CN_0

;-------------------------------------------------------

	BTFSS ZV103,1,A
	BRA ZV103_CR_1

	BSF S1,1,A
	BRA ZV103_CN_1


ZV103_CR_1

	BCF S1,1,A

ZV103_CN_1

;-------------------------------------------------------

	BTFSS ZV103,2,A
	BRA ZV103_CR_2

	BSF S0,5,A
	BRA ZV103_CN_2


ZV103_CR_2

	BCF S0,5,A

ZV103_CN_2

;-------------------------------------------------------

	BTFSS ZV103,3,A
	BRA ZV103_CR_3

	BSF S0,7,A
	BRA ZV103_CN_3


ZV103_CR_3

	BCF S0,7,A

ZV103_CN_3

;-------------------------------------------------------

	BTFSS ZV103,4,A
	BRA ZV103_CR_4

	BSF S0,6,A
	BRA ZV103_CN_4


ZV103_CR_4

	BCF S0,6,A

ZV103_CN_4


ZV103_SETFD

; check negative

	BTFSC S0,0,A
	BRA ZV103_EXIT
	BCF _FD2,0,A

ZV103_EXIT



;-------------------------------------------------------
; OS134
;-------------------------------------------------------

	BTFSC _FD2,1,A
	BRA OS134_2

	BTFSS S0,5,A
	BRA OS134_SETFD

	BSF _FD2,1,A
	BRA OS134_EXIT


OS134_2

	BTFSC _FD2,2,A
	BRA OS134_SETFD

	BSF _FD2,2,A
	BSF S0,4,A
	BRA OS134_EXIT


OS134_SETFD

	BCF S0,4,A
	BTFSC S0,5,A
	BRA OS134_EXIT


	BCF _FD2,1,A
	BCF _FD2,2,A

OS134_EXIT


;-------------------------------------------------------
; LT145
;-------------------------------------------------------

; check positive edge

	BTFSC _FD2,3,A
	BRA LT145_SETFD
	BTFSS S1,3,A
	BRA LT145_SETFD
	BSF _FD2,3,A


	MOVLW 4
	MOVWF SYS_TMP1,A
	MOVLW 3
	MOVWF SYS_TMP2,A
	RCALL LCD1_GOTOXY
	MOVLW LOW LT145_TEXT1
	MOVWF SYS_TMP5,A
	MOVLW HIGH LT145_TEXT1
	MOVWF SYS_TMP6,A
	RCALL LCD1_WRITESTR

LT145_SETFD

; check negative

	BTFSC S1,3,A
	BRA LT145_EXIT
	BCF _FD2,3,A

LT145_EXIT



;-------------------------------------------------------
; LT148
;-------------------------------------------------------

; check positive edge

	BTFSC _FD2,4,A
	BRA LT148_SETFD
	BTFSS S1,2,A
	BRA LT148_SETFD
	BSF _FD2,4,A


	MOVLW 4
	MOVWF SYS_TMP1,A
	MOVLW 3
	MOVWF SYS_TMP2,A
	RCALL LCD1_GOTOXY
	MOVLW LOW LT148_TEXT1
	MOVWF SYS_TMP5,A
	MOVLW HIGH LT148_TEXT1
	MOVWF SYS_TMP6,A
	RCALL LCD1_WRITESTR

LT148_SETFD

; check negative

	BTFSC S1,2,A
	BRA LT148_EXIT
	BCF _FD2,4,A

LT148_EXIT



;-------------------------------------------------------
; LG154
;-------------------------------------------------------


LG154_1

	BTFSC S1,4,A
	BRA LG154_FALSE


LG154_2

	BTFSS S0,0,A
	BRA LG154_FALSE


LG154_TRUE

	BSF S1,2,A
	BRA LG154_END


LG154_FALSE

	BCF S1,2,A

LG154_END


;-------------------------------------------------------
; LG172
;-------------------------------------------------------


LG172_1

	BTFSS S1,4,A
	BRA LG172_FALSE


LG172_2

	BTFSS S0,0,A
	BRA LG172_FALSE


LG172_TRUE

	BSF S1,3,A
	BRA LG172_END


LG172_FALSE

	BCF S1,3,A

LG172_END


;-------------------------------------------------------
; LG206
;-------------------------------------------------------


LG206_1

	BTFSS NEG,1,A
	BRA LG206_FALSE


LG206_TRUE

	BSF S1,4,A
	BRA LG206_END


LG206_FALSE

	BCF S1,4,A

LG206_END


;-------------------------------------------------------
; BV224
;-------------------------------------------------------

	MOVLW 0
; IN0
	BTFSC S1,4,A
	IORLW 1
	MOVWF NEG_U,A

;-------------------------------------------------------
	BRA MAIN
;-------------------------------------------------------





LT59_TEXT1

	RETLW 44	; // INDEX 0
	RETLW 0	; // INDEX 1





LT69_TEXT1

	RETLW 67	; // INDEX 0
	RETLW 0	; // INDEX 1





LT145_TEXT1

	RETLW 45	; // INDEX 0
	RETLW 0	; // INDEX 1



LT148_TEXT1

	RETLW 32	; // INDEX 0
	RETLW 0	; // INDEX 1


	END

