		list p=18F252, r=DEC
		#include P18F252.INC
 
		__CONFIG        _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
		__CONFIG        _CONFIG2L, _BOR_ON_2L & _BORV_42_2L & _PWRT_ON_2L
		__CONFIG        _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
		__CONFIG        _CONFIG3H, _CCP2MX_OFF_3H
		__CONFIG        _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
		__CONFIG        _CONFIG5L, _CP0_ON_5L & _CP1_ON_5L & _CP2_ON_5L & _CP3_ON_5L
		__CONFIG        _CONFIG5H, _CPB_ON_5H & _CPD_ON_5H
		__CONFIG        _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
		__CONFIG        _CONFIG6H, _WRTC_ON_6H & _WRTB_ON_6H & _WRTD_OFF_6H
		__CONFIG        _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
		__CONFIG        _CONFIG7H, _EBTRB_ON_7H


;XTAL 10MHz + PLL = 40MHz
;RA0	PRAVE LED
;RA1	PROSTREDNI PRAVA LED
;RA2	PROSTREDNI LEVA LED
;RA3	LEVA LED
;RA4	GND
;RA5	IN DTR RS232
;RB0	LEVE HORNI
;RB1	LEVE STREDNI
;RB2	PRAVE DOLNI
;RB3	LEVE DOLNI
;RB4	PRAVE STREDNI
;RB5	PRAVE HORNI
;RB6	N.C.
;RB7	N.C.
;RC0	IN TXD RS232 (PRIJEM Z RS232)
;RC1	FEATURE
;RC2	FEATURE
;RC3	FEATURE
;RC4	FEATURE
;RC5	OUT RXD RS232 (ODESILANI NA RS232)
;RC6	TX - VYSILANI DO MINISUMO X
;RC7	RX - PRIJEM Z MINISUMO X


#DEFINE	DTR	PORTA,5


		CBLOCK	0
		  INT_STATUS
		  INT_WREG
		  LATA_COPY
		  SENSORS
		  WRCNT
		  TMPX
		  CHS

		  CNT
		  CNT2
		  TMP0
		  TMP1
		  TMP2
		  TXDATA2
		  RXDATA2
		  RX2TMP
		ENDC


;BOOTLOADER
		ORG 0x0
		BRA		STARTBL

PAU1035
		BRA		$+2
		BRA		PAU1031

		ORG 0x8
		BRA		0X208

SETIO
		MOVLW	B'11111111'
		MOVWF	LATA

		MOVLW	B'00000000'
		MOVWF	LATB

		MOVLW	B'11111111'
		MOVWF	LATC

		RETURN

		ORG 0x18
		BRA		0X218


PAULEDBL
        MOVLW	.30
        MOVWF	TMP2
        MOVLW	0x2B
        MOVWF	TMP1
        MOVLW	0xD9
        MOVWF	TMP0
        DECFSZ	TMP0,F
        BRA		$-2
        DECFSZ	TMP1,F
        BRA		$-10
        DECFSZ	TMP2,F
        BRA		$-18
		RETURN

PAU1031
		;Variables: TMP1, TMP0
		;Delay 1027 cycles
        MOVLW	0x36  ;54 DEC
        MOVWF	TMP1
        MOVLW	0x05  ;5 DEC
        MOVWF	TMP0
        DECFSZ	TMP0,F
        BRA		$-2
        DECFSZ	TMP1,F
        BRA		$-10
		;End of Delay
		RETURN

SENDRS232
		BCF		LATC,5
		MOVWF	TXDATA2
		MOVLW	.9
		MOVWF	CNT

		;PAUSA 1042-7
		CALL	PAU1035

;---SLADENO NA CAS PROVADENI INSTRUKCI
NEXTTX2
		BTFSS	TXDATA2,0
		BRA		NOTXONE
		NOP
		BSF		LATC,5
		BRA		YESTXONE
NOTXONE
		BCF		LATC,5
		BRA		YESTXONE
YESTXONE
;---
		;PAUSA 1042-11
		CALL	PAU1031

		BSF		STATUS,C
		RRCF	TXDATA2,F
		DECFSZ	CNT,F
		BRA		NEXTTX2

		RETURN

RECRS232
		;CEKAM NA DATA ZE SERIAKU
		BTFSC	PORTC,0
		BRA		$-2
		;STARTBIT PROBEHL, KAZDYCH 347 CYKLU BERU BIT (3X BERU PRO KAZDY BIT)
		;POCKAM JESTE 173 CYKLU
		MOVLW	.8
		MOVWF	CNT2

		;PAUSA
		;Delay 875 cycles
        MOVLW	0x13  ;19 DEC
        MOVWF	TMP1
        MOVLW	0x0E  ;14 DEC
        MOVWF	TMP0
        DECFSZ	TMP0,F
        BRA		$-2
        DECFSZ	TMP1,F
        BRA		$-10
		;End of Delay

		;NABIRAM
NEXTRX2BIT
		CLRF	RX2TMP
		MOVLW	.3
		MOVWF	CNT

		;Delay 331 cycles
        MOVLW	0x6E  ;110 DEC
        MOVWF	TMP0
        DECFSZ	TMP0,F
        BRA		$-2
		;End of Delay

		BRA		NOLPAUSE

NEXT3SAMPLES
		;DOLADIT PAUZU
		;Delay 340 cycles
        MOVLW	0x71  ;113 DEC
        MOVWF	TMP0
        DECFSZ	TMP0,F
        BRA		$-2
		;End of Delay
		BRA		$+2
NOLPAUSE
		BTFSC	PORTC,0
		INCF	RX2TMP,F
		DECFSZ	CNT,F
		BRA		NEXT3SAMPLES

		BSF		STATUS,C
		BTFSS	RX2TMP,1
		BCF		STATUS,C
		RRCF	RXDATA2

		DECFSZ	CNT2,F
		BRA		NEXTRX2BIT

		MOVF	RXDATA2,W

		BTFSS	PORTC,0
		BRA		$-2

		RETURN

STARTBL
		CALL	SETIO

		MOVLW	B'11110000'
		MOVWF	TRISA

		MOVLW	B'00111111'
		MOVWF	TRISB

		MOVLW	B'10011111'
		MOVWF	TRISC

		;VYPNOUT ADC
		MOVLW	B'11000110'
		MOVWF	ADCON1
		MOVLW	B'11000000'
		MOVWF	ADCON0

		MOVLW	.64		;9600bps PRI 40MHz
		MOVWF	SPBRG
		BCF		TXSTA,BRGH
		BSF		TXSTA,TXEN
		BSF		RCSTA,CREN
		BSF		RCSTA,SPEN

		;MA SE SPUSTIT BOOTLOADER NEBO APLIKACE ?
		BTFSC	PORTA,5		;JE KABEL Z RS232 ZASUNUT A DTR AKTIVNI
		BRA		0X200		;NENI, SPUST UZIVATELSKOU APLIKACI

		;ZABLIKEJ LED, BUDE SE BOOTOVAT
		MOVLW	.5
		MOVWF	CNT
NEXTBLIK
		CALL	PAULEDBL
		CLRF	LATA	;ROZSVIT LED
		CALL	PAULEDBL
		MOVLW	0XFF
		MOVWF	LATA	;ZHASNI LED
		DECFSZ	CNT,F
		BRA		NEXTBLIK

		;SMAZNEME PAMET
ERASE_FLASH
		MOVLW	LOW(0X200)
		MOVWF	TBLPTRL
		MOVLW	HIGH(0X200)
		MOVWF	TBLPTRH

		BSF		EECON1,EEPGD
		BCF		EECON1,CFGS
		BSF		EECON1,WREN
NEXTERASE
		BSF		EECON1,FREE
		;BCF		INTCON,GIE
		MOVLW	0X55
		MOVWF	EECON2
		MOVLW	0XAA
		MOVWF	EECON2
		BSF		EECON1,WR
		;BSF		INTCON,GIE
		MOVLW	.64
		ADDWF	TBLPTRL,F
		MOVLW	0
		ADDWFC	TBLPTRH,F

		;NENI JESTE 0X8000 ?
		BTFSS	TBLPTRH,7
		BRA		NEXTERASE

		CLRF	LATA	;ROZSVIT LED

		;MOHU SI POSLAT PRO DATA
;		MOVLW	'B'
;		CALL	SENDRS232
;		MOVLW	'O'
;		CALL	SENDRS232
;		MOVLW	'O'
;		CALL	SENDRS232
;		MOVLW	'T'
;		CALL	SENDRS232

		;CEKAM DATA

		CLRF	CHS

		MOVLW	LOW(0X200)
		MOVWF	TBLPTRL
		MOVLW	HIGH(0X200)
		MOVWF	TBLPTRH

		;NEJPRVE PRIJDE '>'
WAITDATA
;		CALL	RECRS232
;		XORLW	'>'
;		BNZ		WAITDATA

NEXTBLOCK
		;poslu si pro data
		MOVF	CHS,W
		CALL	SENDRS232

		TBLRD*-

		LFSR	FSR1,0X200
RECLOOP
		CALL	RECRS232

		MOVWF	POSTINC1

		BTFSS	FSR1L,6
		BRA		RECLOOP

		;TED MAM 64B A ZAPISU JE

		MOVLW	8
		MOVWF	WRCNT	;POCITADLO ZAPISU
		LFSR	FSR1,0X200
NEXTWR
		MOVLW	.8
		MOVWF	TMPX
NTX1
		MOVFF	POSTINC1,TABLAT
		TBLWT+*
		DECFSZ	TMPX,F
		BRA		NTX1

;		MOVFF	POSTINC1,TABLAT
;		TBLWT+*
;		MOVFF	POSTINC1,TABLAT
;		TBLWT+*
;		MOVFF	POSTINC1,TABLAT
;		TBLWT+*
;		MOVFF	POSTINC1,TABLAT
;		TBLWT+*
;		MOVFF	POSTINC1,TABLAT
;		TBLWT+*
;		MOVFF	POSTINC1,TABLAT
;		TBLWT+*
;		MOVFF	POSTINC1,TABLAT
;		TBLWT+*
;		MOVFF	POSTINC1,TABLAT
;		TBLWT+*

		;BSF		EECON1,EEPGD
		;BCF		EECON1,CFGS
		BSF		EECON1,WREN
		;BCF		INTCON,GIE
		MOVLW	0X55
		MOVWF	EECON2
		MOVLW	0XAA
		MOVWF	EECON2
		BSF		EECON1,WR
		NOP

		;BSF		INTCON,GIE
		BCF		EECON1,WREN

		MOVLW	.8
		MOVWF	TMPX
NTX2
		TBLRD*-
		DECFSZ	TMPX,F
		BRA		NTX2


		MOVLW	.8
		MOVWF	TMPX
NTX3
		TBLRD+*
		MOVF	TABLAT,W
		ADDWF	CHS,F
		;CALL	SENDRS232
		DECFSZ	TMPX,F
		BRA		NTX3


		DECFSZ	WRCNT,F
		BRA		NEXTWR

		TBLRD+*

		;NENI UZ TBLPTR NA 0X8000
		BTFSS	TBLPTRH,7
		BRA		NEXTBLOCK

		;VYSLEME KONEC
;		MOVLW	'<'
;		CALL	SENDRS232


		;jeste zapsat EEPROM

		CLRF	EEADR
		BCF		EECON1,EEPGD
		BCF		EECON1,CFGS
		BCF		EECON1,WREN

NEXTBLOCK_EE
		;poslu si pro data
		MOVF	CHS,W
		CALL	SENDRS232

		TBLRD*-

		LFSR	FSR1,0X200
RECLOOP_EE
		CALL	RECRS232

		MOVWF	POSTINC1

		BTFSS	FSR1L,6
		BRA		RECLOOP_EE

		;ZAPSAT
		MOVLW	.64
		MOVWF	WRCNT
		LFSR	FSR1,0X200
NEXTWR_EE
		MOVFF	POSTINC1,EEDATA

		BCF		INTCON,GIE
		MOVLW	0X55
		MOVWF	EECON2
		MOVLW	0XAA
		MOVWF	EECON2
		BSF		EECON1,WR
		NOP
		BTFSC	EECON1,WR
		BRA		$-2

		;VYSLAT CO JE ZAPSANO
		CLRF	EEDATA
		BSF		EECON1,RD
		MOVF	EEDATA,W

		;CALL	SENDRS232
		ADDWF	CHS,F

		INCF	EEADR,F

		DECFSZ	WRCNT,F
		BRA		NEXTWR_EE


		MOVF	EEADR,W
		BTFSS	STATUS,Z
		BRA		NEXTBLOCK_EE

		BCF		EECON1,WREN

		MOVF	CHS,W
		CALL	SENDRS232

		;KONEC
		MOVLW	0XFF
		MOVWF	LATA	;ZHASNI LED

		BRA		$






;END OF BOOTLOADER


		ORG	0X200
		BRA	START

		ORG 0x208
		BRA	INTERRUPT

		ORG 0x218
		BRA	INTERRUPT

INTERRUPT
		MOVFF	STATUS,INT_STATUS
		MOVFF	WREG,INT_WREG

		;OBSLUHA PRERUSENI

		MOVFF	INT_WREG,WREG
		MOVFF	INT_STATUS,STATUS
		RETFIE

RECEIVE
		BTFSS	RCSTA,OERR
		BRA		RNOERR
		BCF		RCSTA,CREN		
		BSF		RCSTA,CREN
RNOERR
		BTFSS	PIR1,RCIF
		BRA		RNOERR
		MOVF	RCREG,W
		RETURN

SEND
		BTFSS	PIR1,TXIF
		BRA		SEND
		NOP
		MOVWF	TXREG
		RETURN


START
;RA0	PRAVA LED
;RA1	PROSTREDNI PRAVA LED
;RA2	PROSTREDNI LEVA LED
;RA3	LEVA LED
;RA4	GND
;RA5	IN DTR RS232

;RB0	LEVE HORNI
;RB1	LEVE STREDNI
;RB2	PRAVE DOLNI
;RB3	LEVE DOLNI
;RB4	PRAVE STREDNI
;RB5	PRAVE HORNI
;RB6	N.C.
;RB7	N.C.

;RC0	IN TXD RS232 (PRIJEM Z RS232)
;RC1	FEATURE
;RC2	FEATURE
;RC3	FEATURE
;RC4	FEATURE
;RC5	OUT RXD RS232 (ODESILANI NA RS232)
;RC6	TX - VYSILANI DO MINISUMO X
;RC7	RX - PRIJEM Z MINISUMO X

		MOVLW	B'11111111'
		MOVWF	LATA

		MOVLW	B'00000000'
		MOVWF	LATB

		MOVLW	B'11111111'
		MOVWF	LATC

		MOVLW	B'11110000'
		MOVWF	TRISA

		MOVLW	B'00111111'
		MOVWF	TRISB

		MOVLW	B'10011111'
		MOVWF	TRISC

		;VYPNOUT ADC
		MOVLW	B'11000110'
		MOVWF	ADCON1
		MOVLW	B'11000000'
		MOVWF	ADCON0

		MOVLW	.64		;9600bps PRI 40MHz
		MOVWF	SPBRG
		BCF		TXSTA,BRGH
		BSF		TXSTA,TXEN
		BSF		RCSTA,CREN
		BSF		RCSTA,SPEN

;TEST TLACITEK
;TESTTALCITEK
;		COMF	PORTB,W
;		ANDLW	B'00111111'
;		BTFSS	STATUS,Z
;		BCF		LATA,0
;		BTFSC	STATUS,Z
;		BSF		LATA,0
;		BRA		TESTTALCITEK
;KONEC TESTU TLACITEK


		MOVLW	B'00000000'
LOOP
		CALL	SEND

		CALL	RECEIVE
		MOVWF	SENSORS

		CLRF	LATA_COPY

;RA0	PRAVE LED
;RA1	PROSTREDNI PRAVA LED
;RA2	PROSTREDNI LEVA LED
;RA3	LEVA LED

;SENSORS
;BIT3=LEVE SPODNI, BIT2=PRAVE SPODNI, BIT1=LEVE PREDNI, BIT0=PRAVE PREDNI

		BTFSC	SENSORS,3
		BSF		LATA_COPY,3

		BTFSC	SENSORS,1
		BSF		LATA_COPY,2

		BTFSC	SENSORS,0
		BSF		LATA_COPY,1

		BTFSC	SENSORS,2
		BSF		LATA_COPY,0

		MOVFF	LATA_COPY,LATA

		MOVLW	B'01110111'

		;LEVE, JEDU VPRAVO
		BTFSS	SENSORS,1
		MOVLW	B'01001100'	;LEVY VPRED, PRAVY VZAD

		;PRAVE, JEDU VLEVO
		BTFSS	SENSORS,0
		MOVLW	B'11000100'	;LEVY VZAD, PRAVY VPRED

		BRA	LOOP

		END

