;
;Mint az rpm.src, csak ki a fociklusban 1, es nyomogombos.
;

			DEVICE PIC16C84,XT_OSC,WDT_OFF,PROTECT_OFF

pc		equ	02h

cnt0		equ	0ch	;need for rolling cnounter (16)
cnt2		equ	0dh	;test
cnt3		equ	0eh	;test

bin_high	equ	10h	;binary data high register
bin_low		equ	11h	;binary data low register

adc_in_hi	equ	12h
adc_in_lo	equ	13h
adc_out_reg	equ	14h

data		equ	15h
system		equ	16h

w0		equ	17h
w1		equ	18h

lcd_x		equ	19h
lcd_y		equ	1ah

wbuff		equ	1bh
stat		equ	1ch

int_cnt0	equ	1dh
int_idozites	equ	1eh

toll		equ	1fh

bcd_100		equ	20h	;result
bcd_10		equ	21h	;result
bcd_1		equ	22h	;result

math_h		equ	23h
math_l		equ	24h
result_h	equ	25h
result_l	equ	26h

adc_clk		=	rb.0
adc_in		=	rb.1
adc_out		=	rb.2
adc_cs		=	rb.3

lcd_res		=	rb.4
lcd_cd		=	rb.5
lcd_out		=	rb.6
lcd_clk		=	rb.7

button		=	ra.1
rpm_in		=	ra.4

batt		=	rb.0

neg		=	system.0



	org 0
	goto start

;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
	org     4
	movwf wbuff
	swapf status,0
	movwf stat

;-------------------------------------------------------------------------------
	decfsz int_cnt0,1	;/60=1, /30=2, /20=3, /15=4
	goto intveg
	movf int_idozites,0
	movwf int_cnt0
;---------------------------------------------

	call bin2bcd16
 
	clrf lcd_x
	clrf lcd_y
	call lcd_3310_addr

	movf bcd_100,0
	andlw 0fh
	call lcd_3310_num_w

	swapf bcd_10,0
	andlw 0fh
	call lcd_3310_num_w
	movf bcd_10,0
	andlw 0fh
	call lcd_3310_num_w

	swapf bcd_1,0
	andlw 0fh
	call lcd_3310_num_w
	movf bcd_1,0
	andlw 0fh
	call lcd_3310_num_w

	movlw 0
	call lcd_3310_num_w
	movlw 0
	call lcd_3310_num_w

;	clrf lcd_x
;	movlw 1
;	movwf lcd_y
;	call lcd_3310_addr
;	movf toll,0
;	andlw 3
;	call lcd_3310_num_w

	clrf bin_low
	clrf bin_high

;--------------------- Button check -----------------
	btfss button
	goto intveg

	incf toll,1
	call toll_tabla
	movwf int_idozites
;--------------------- Button check -----------------

;-------------------------------------------------------------------------------
intveg	swapf stat,0
	movwf status
	swapf wbuff,1
	swapf wbuff,0
	bcf intcon,2
	retfie
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------

start	clrf ra
	clrf rb
	setb adc_cs
	clrb lcd_res
	movlw 00010010b
	tris ra
	movlw 00000001b
	tris rb	
	movlw 1
	movwf 0ah

	call lcd_3310_init

	movlw 2
	movwf toll
	call toll_tabla
	movwf int_idozites

	movlw 00000100b
	option
	bsf t0ie
	bsf gie

main	nop
mc0	btfsc rpm_in
	goto mc0
mc1	btfss rpm_in
	goto mc1
	incf bin_low
	btfsc z
	incf bin_high

	goto mc0

;--------------------------- MCP ADC Driver ----------------------
read_adc	movwf adc_out_reg
		clrb adc_cs
		movlw 20
		movwf cnt0

read_adc_c	rlf adc_out_reg,1
		btfsc c
		setb adc_out
		btfss c
		clrb adc_out

		nop
		setb adc_clk
		nop

		btfsc adc_in
		setb c
		btfss adc_in
		clrb c
		rlf adc_in_lo,1
		rlf adc_in_hi,1

		clrb adc_clk

		decfsz cnt0,1
		goto read_adc_c
		setb adc_cs
		return

adc_negative	nop
		comf adc_in_lo,1
		comf adc_in_hi,1
		movlw 1
		addwf adc_in_lo,1
		btfsc c
		addwf adc_in_hi,1
		return
;--------------------------- MCP ADC Driver ----------------------


;--------------------------- Nokia 3310 LCD Driver ----------------------
lcd_3310_init	clrb lcd_res
		call wait
		setb lcd_res
		call wait
		call wait
		call wait
		call wait
		clrb lcd_cd
		movlw 21h
		call lcd_3310_data_w
		movlw 90h
		call lcd_3310_data_w
		movlw 20h
		call lcd_3310_data_w
		movlw 0ch
		call lcd_3310_data_w
		setb lcd_cd
		return

lcd_3310_clr	nop
		return

lcd_3310_addr	clrb lcd_cd
		movf lcd_x,0
		andlw 7fh
		addlw 80h
		call lcd_3310_data_w
		movf lcd_y,0
		andlw 07h
		addlw 40h
		call lcd_3310_data_w
		setb lcd_cd
		return

lcd_3310_num_w		movwf cnt3
lcd_3310_num_data	clrf cnt2

			rlf cnt3,1
			rlf cnt3,1
			rlf cnt3,1
chr_c1			movf cnt2,0
			addwf cnt3,0
	
			call chr_tbl
			call lcd_3310_data_w

			incf cnt2,1
			movf cnt2,0 
			xorlw 8
			btfss z
			goto chr_c1
			return

lcd_3310_data_w	movwf data
lcd_3310_data	movlw 8
		movwf cnt0

lcd_3310_data_c	rlf data,1
		btfsc c
		setb lcd_out
		btfss c
		clrb lcd_out

;		nop
		setb lcd_clk
;		nop
		clrb lcd_clk

 		decfsz cnt0,1
		goto lcd_3310_data_c
		return
;--------------------------- Nokia 3310 LCD Driver ----------------------

bin2bcd16	clrf bcd_1
		clrf bcd_10
		clrf bcd_100
		movlw 16
		movwf cnt0

c_b2b16		movf bcd_10,0
		andlw 11110000b
		sublw 040h
		btfsc c
		goto check10l

		movlw 030h		;pseudo1000
		addwf bcd_10,1

check10l	movf bcd_10,0
		andlw 00001111b
		sublw 4
		btfsc c
		goto check1h

		movlw 3			;pseudo100
		addwf bcd_10,1

check1h		movf bcd_1,0
		andlw 01110000b
		sublw 040h
		btfss c
		goto pseudo10

		btfsc bcd_1.7
		goto pseudo10

xxx		movf bcd_1,0
		andlw 00000111b
		sublw 4
		btfss c
		goto pseudo

		btfsc bcd_1.3
		goto pseudo

roll		clrb c
		rlf bin_low,1
		rlf bin_high,1
		rlf bcd_1,1
		rlf bcd_10,1
		rlf bcd_100,1
		decfsz cnt0,1
		goto c_b2b16
		return

pseudo10	movlw 030h
		addwf bcd_1,1
		goto xxx

pseudo		movlw 3
		addwf bcd_1,1
		goto roll

wait		movlw 1
		movwf w1
		goto wait_n
bigwait		clrf w1
wait_n		clrf w0
wait_c		nop
		decfsz w0,1
		goto wait_C
		decfsz w1,1
		goto wait_n
		return

	org 0100h

chr_tbl	addwf cnt0,0
	addwf pc
	retlw 0 	;0
	retlw 56
	retlw 68
	retlw 162
	retlw 146
	retlw 138
	retlw 68
	retlw 56

	retlw 0          ;1
	retlw 0
	retlw 8
	retlw 4
	retlw 254
	retlw 0
	retlw 0
	retlw 0

	retlw 0          ;2
	retlw 228
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 140

	retlw 0          ;3
	retlw 68
	retlw 130
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 108

	retlw 0          ;4
	retlw 48
	retlw 40
	retlw 36
	retlw 34
	retlw 248
	retlw 32
	retlw 32

	retlw 0          ;5
	retlw 94
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 98

	retlw 0          ;6
	retlw 124
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 100

	retlw 0          ;7
	retlw 2
	retlw 2
	retlw 2
	retlw 194
	retlw 50
	retlw 10
	retlw 6

	retlw 0          ;8
	retlw 108
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 108

	retlw 0          ;9
	retlw 140
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 146
	retlw 124

	retlw 00000000b         ;-
	retlw 00000000b
	retlw 00000000b
	retlw 00001000b
	retlw 00001000b
	retlw 00001000b
	retlw 00001000b
	retlw 00001000b

	retlw 00000000b          ;+
	retlw 00000000b
	retlw 00000000b
	retlw 00001000b
	retlw 00001000b
	retlw 00111110b
	retlw 00001000b
	retlw 00001000b

toll_tabla	decf toll,0
		andlw 00000011b
		addwf pc
		retlw 60	;1
		retlw 30	;2
		retlw 20	;3
		retlw 15	;4
