; Source created with Parsic Version 4.0.6.21

; at              : 2014.01.23. 22:08:43


; Project File    : C:\Program Files\Parsic 4\Munka\HLX\EE_teszt\EE_teszt.PIC

; Project Version : 1.0.3

; Created         : 2014.01.23. 21:53:19

; Last change     : 2014.01.23. 22:08:42

	PROCESSOR 18F4550
	INCLUDE P18F4550.INC
	RADIX DEC
	__IDLOCS _IDLOC0,H'01'
	__IDLOCS _IDLOC1,H'00'
	__IDLOCS _IDLOC2,H'03'
	ERRORLEVEL -230
	__CONFIG _CONFIG1L,H'C0';192
	__CONFIG _CONFIG1H,H'30';48
	__CONFIG _CONFIG2L,H'DA';218
	__CONFIG _CONFIG2H,H'E6';230
	__CONFIG _CONFIG3H,H'79';121
	__CONFIG _CONFIG4L,H'9B';155
	__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

; variable

SYS_FSAV	EQU 0	; located in Bank ACCESS BANK
SYS_FSAV_1	EQU 1	; located in Bank ACCESS BANK
_FD1	EQU 2	; located in Bank ACCESS BANK
PWR	EQU 3	; located in Bank ACCESS BANK
SYS_TMP0	EQU 4	; located in Bank ACCESS BANK
SYS_TMP1	EQU 5	; located in Bank ACCESS BANK
SYS_TMP2	EQU 6	; located in Bank ACCESS BANK
SYS_TMP3	EQU 7	; located in Bank ACCESS BANK
SYS_TMP4	EQU 8	; located in Bank ACCESS BANK
SYS_TMP5	EQU 9	; located in Bank ACCESS BANK
SYS_TMP6	EQU 10	; located in Bank ACCESS BANK
SYS_TMP7	EQU 11	; located in Bank ACCESS BANK
SYS_TMP8	EQU 12	; located in Bank ACCESS BANK
SYS_TMP9	EQU 13	; located in Bank ACCESS BANK
SYS_TMP10	EQU 14	; located in Bank ACCESS BANK
SYS_TMP11	EQU 15	; located in Bank ACCESS BANK
S0	EQU 16	; located in Bank ACCESS BANK
ADAT1	EQU 17	; located in Bank ACCESS BANK
ADAT1_1	EQU 18	; located in Bank ACCESS BANK
TR49	EQU 19	; located in Bank ACCESS BANK
TR49_1	EQU 20	; located in Bank ACCESS BANK

; disable warning (Bankswitching)
	ERRORLEVEL -302
; disable warning (Pageswitching)
	ERRORLEVEL -306

;-------------------------------------------------------
; Program start
;-------------------------------------------------------
	ORG 0
	BRA SYS_INIT
	NOP
	NOP
	NOP

;-------------------------------------------------------
; Interrupt-address
;-------------------------------------------------------

	BTFSS INTCON,T0IF,A
	BRA NOTIMERINTERRUPT

; add 8 to timer0, so interrupt comes every 250 uSec and not after 256 uSec
	MOVLW 8
	ADDWF TMR0,F,A	; W + f -> f

	INCFSZ TR49,F,A	; f + 1 -> f
	BRA TR49_NEXT

	INCF TR49_1,F,A	; f + 1 -> f

TR49_NEXT

	BCF INTCON,T0IF,A


NOTIMERINTERRUPT


EXITINT

	RETFIE FAST	; FAST = restore STATUS,BSR,W-register, enable GIE/GIEH, PEIE/GIEL

;-------------------------------------------------------
; Subroutines
;-------------------------------------------------------


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

;-------------------------------------------------------

INTERNAL_WR

	MOVWF EEDATA,A
	MOVF SYS_TMP4,W,A
	MOVWF EEADR,A
; disable interrupts
	BCF INTCON,GIE,A

	BSF EECON1,WREN,A
	MOVLW 85
	MOVWF EECON2,A
	MOVLW 170
	MOVWF EECON2,A
	BSF EECON1,WR,A
	NOP
	BCF EECON1,WREN,A
	BSF INTCON,GIE,A

INTERNAL_WAIT

	BTFSC EECON1,WR,A
	BRA INTERNAL_WAIT
	RETURN

;-------------------------------------------------------

INTERNAL_RD

	MOVF SYS_TMP4,W,A
	MOVWF EEADR,A
	BSF EECON1,RD,A
	MOVF EEDATA,W,A
	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

; may be the display is already in 4-Bit mode !!
; so we have to reset it back to the 8-Bit mode - three times

; IR-Register
	BCF PORTD,4,A
	MOVF PORTD,W,A
	ANDLW 240
	IORLW 3
	MOVWF PORTD,A

; 1st
	BSF PORTD,5,A
	NOP
	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
	NOP
	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
	NOP
	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
	BSF PORTD,5,A
	NOP
	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

	BSF PORTD,5,A
	NOP
	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 17
	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

;-------------------------------------------------------
; Initialisation
;-------------------------------------------------------

SYS_INIT

	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

; 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'111'
	MOVWF TRISE,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

;-------------------------------------------------------
; Clear RAM
;-------------------------------------------------------

; Clear from $000 to $7FF

	LFSR 0,0

SYSClearRAM1

	CLRF POSTINC0,A	; 0 -> f
	MOVLW 255
	SUBWF FSR0L,W,A	; f - W -> W
	BTFSS STATUS,ZERO,A
	BRA SYSClearRAM1
	MOVLW 7
	SUBWF FSR0H,W,A	; f - W -> W
	BTFSS STATUS,ZERO,A
	BRA SYSClearRAM1

;-------------------------------------------------------

; init vars


;-------------------------------------------------------
; EE1
;-------------------------------------------------------
; set start-address
	MOVLW 0
	MOVWF SYS_TMP4,A
	RCALL INTERNAL_RD
	MOVWF ADAT1,A
	INCF SYS_TMP4,F,A	; f + 1 -> f
	RCALL INTERNAL_RD
	MOVWF ADAT1_1,A

;-------------------------------------------------------
; Init LCD-module -> LCD1
;-------------------------------------------------------
	RCALL LCD1_INIT
	CLRF TMR0,A	; 0 -> f
; enable interrupts
	BCF INTCON,T0IF,A
	BSF INTCON,GIE,A

;-------------------------------------------------------
; Main program
;-------------------------------------------------------


MAIN


;-------------------------------------------------------
; EE1
;-------------------------------------------------------

; check negative edge

	BTFSS _FD1,0,A
	BRA EE1_SETFD
	BTFSC S0,0,A
	BRA EE1_SETFD
	BCF _FD1,0,A


; set start-address
	MOVLW 0
	MOVWF SYS_TMP4,A
; write data
	MOVF ADAT1,W,A
	RCALL INTERNAL_WR
	INCF SYS_TMP4,F,A	; f + 1 -> f
; write data
	MOVF ADAT1_1,W,A
	RCALL INTERNAL_WR

EE1_SETFD

; check positive

	BTFSS S0,0,A
	BRA EE1_EXIT
	BSF _FD1,0,A

EE1_EXIT



;-------------------------------------------------------
; OS3
;-------------------------------------------------------

; check positive edge

	BTFSC _FD1,1,A
	BRA OS3_SETFD
	BTFSS PORTB,1,A
	BRA OS3_SETFD
	BSF _FD1,1,A

	BSF S0,0,A
	BRA OS3_EXIT


OS3_SETFD

	BCF S0,0,A
	BTFSC PORTB,1,A
	BRA OS3_EXIT


	BCF _FD1,1,A

OS3_EXIT


;-------------------------------------------------------
; ADAT1
;-------------------------------------------------------

	BTFSS S0,1,A
	BRA ADAT1_COUNT

	CLRF ADAT1,A	; 0 -> f
	CLRF ADAT1_1,A	; 0 -> f
	BRA ADAT1_SETOUT


ADAT1_COUNT

; check positive edge

	BTFSC _FD1,2,A
	BRA ADAT1_SETFD
	BTFSS S0,0,A
	BRA ADAT1_SETFD
	BSF _FD1,2,A

	BTFSC PWR,0,A
	BRA ADAT1_BACKWARD

	INCFSZ ADAT1,F,A	; f + 1 -> f
	BRA ADAT1_SETOUT

	INCF ADAT1_1,F,A	; f + 1 -> f
	BRA ADAT1_SETOUT


ADAT1_BACKWARD

	DECF ADAT1,F	; f - 1 -> f
	INCFSZ ADAT1,W,A	; f + 1 -> w
	BRA ADAT1_SETOUT

	DECF ADAT1_1,F,A	; f - 1 -> f

ADAT1_SETOUT


ADAT1_SETFD

; check negative

	BTFSC S0,0,A
	BRA ADAT1_EXIT
	BCF _FD1,2,A

ADAT1_EXIT



;-------------------------------------------------------
; LM38
;-------------------------------------------------------

	BCF S0,2,A
	BCF S0,3,A
; copy
	MOVF ADAT1,W,A
	MOVWF ADAT1,A
	MOVF ADAT1_1,W,A
	MOVWF ADAT1_1,A

; check top
	MOVLW 0
	SUBWF ADAT1_1,W,A	; f - W -> W
	BTFSS STATUS,ZERO,A
	BRA LM38_CHECKTOP


	MOVLW 40
	SUBWF ADAT1,W,A	; f - W -> W


LM38_CHECKTOP

	BTFSS STATUS,CARRY,A
	BRA LM38_BOTTOM

	BTFSC STATUS,ZERO,A
	BRA LM38_BOTTOM


	BSF S0,2,A
	MOVLW 40
	MOVWF ADAT1,A
	MOVLW 0
	MOVWF ADAT1_1,A
	BRA LM38_EXIT


; check bottom


LM38_BOTTOM

	MOVLW 0
	SUBWF ADAT1_1,W,A	; f - W -> W
	BTFSS STATUS,ZERO,A
	BRA LM38_CHECKBOTTOM


	MOVLW 0
	SUBWF ADAT1,W,A	; f - W -> W


LM38_CHECKBOTTOM

	BTFSC STATUS,CARRY,A
	BRA LM38_EXIT


	BSF S0,3,A
	MOVLW 0
	MOVWF ADAT1,A
	MOVLW 0
	MOVWF ADAT1_1,A

LM38_EXIT



;-------------------------------------------------------
; LCD1
;-------------------------------------------------------


;-------------------------------------------------------
; LT46
;-------------------------------------------------------

; check positive edge

	BTFSC _FD1,3,A
	BRA LT46_SETFD
	BTFSS S0,4,A
	BRA LT46_SETFD
	BSF _FD1,3,A


	MOVLW 5
	MOVWF SYS_TMP1,A
	MOVLW 2
	MOVWF SYS_TMP2,A
	RCALL LCD1_GOTOXY
	MOVF ADAT1,W,A
	MOVWF SYS_TMP5,A
	MOVF ADAT1_1,W,A
	MOVWF SYS_TMP6,A
	CLRF SYS_TMP7,A	; 0 -> f
	CLRF SYS_TMP8,A	; 0 -> f

	BSF SYS_TMP9,0,A
	MOVLW 4
	MOVWF SYS_TMP10,A
	RCALL LCD1_10000

LT46_SETFD

; check negative

	BTFSC S0,4,A
	BRA LT46_EXIT
	BCF _FD1,3,A

LT46_EXIT



;-------------------------------------------------------
; TR49
;-------------------------------------------------------

	BCF INTCON,GIE,A
	MOVLW 0
	SUBWF TR49_1,W,A	; f - W -> W
	BTFSS STATUS,ZERO,A
	BRA TR49_CHECK


	MOVLW 200
	SUBWF TR49,W,A	; f - W -> W

TR49_CHECK

	BTFSS STATUS,CARRY,A
	BRA TR49_END


TR49_RESET

	MOVLW 0
	SUBWF TR49_1,F,A	; f - W -> f
	MOVLW 200
	SUBWF TR49,F,A	; f - W -> f
	BTFSS STATUS,CARRY,A
	DECF TR49_1,F,A	; f - 1 -> f

TR49_SET

	BTFSC S0,4,A
	BRA TR49_CLR

	BSF S0,4,A
	BRA TR49_END


TR49_CLR

	BCF S0,4,A


TR49_END

	BSF INTCON,GIE,A
;-------------------------------------------------------
	BRA MAIN
;-------------------------------------------------------



	ORG H'F00000'

	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

	END

