;PIC-es panelmérő
;Készítette: én
;2010.04.05.
;------------------------------------------------------------
	list	P=18F2423
#include	"P18F2423.INC"


;	__CONFIG _HS_OSC&_CP_OFF&_WDT_OFF	;Kvarc oszcillátor, kódvédelem ki, wdt ki
;__config _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC
; MCLR láb sima I/O, kódvédelem ki, watchdog ki, belső RC oszcillátor


;              config CPUDIV = NOCLKDIV
;              config USBDIV = OFF
;              config FOSC   = HS
;              config PLLEN  = ON
              config FCMEN  = OFF
              config IESO   = OFF
;              config PWRTEN = OFF
              config BOREN  = OFF
;              config BORV   = 30
;              config WDTEN  = OFF
              config WDTPS  = 32768
              config MCLRE  = ON      ;ez mos legyen inább ON!
;              config HFOFST = OFF
              config STVREN = ON
              config LVP    = OFF
              config XINST  = OFF
;              config BBSIZ  = OFF
              config CP0    = OFF
              config CP1    = OFF
              config CPB    = OFF
              config WRT0   = OFF
              config WRT1   = OFF
              config WRTB   = OFF
              config WRTC   = OFF
              config EBTR0  = OFF
              config EBTR1  = OFF
              config EBTRB  = OFF 
		config	OSC = INTIO67
		config	WDT = OFF


;#define	SZEGMENS_A	LATC,0
;#define	SZEGMENS_B	LATC,1
;#define	SZEGMENS_C	LATC,2
;#define	SZEGMENS_D	LATC,3
;#define	SZEGMENS_E	LATC,4
;#define	SZEGMENS_F	LATC,5
;#define	SZEGMENS_G	LATC,6
;#define	SZEGMENS_DP	LATC,7
;
;#define EGY		(SZEGMENS_B | SZEGMENS_C)
;#define KETTŐ	(SZEGMENS_A | SZEGMENS_B | SZEGMENS_G | SZEGMENS_E | SZEGMENS_D)
;#define HÁROM	(SZEGMENS_A | SZEGMENS_B | SZEGMENS_G | SZEGMENS_C | SZEGMENS_D)
;#define NÉGY	(SZEGMENS_F | SZEGMENS_B | SZEGMENS_G | SZEGMENS_C)
;#define ÖT		(SZEGMENS_A | SZEGMENS_F | SZEGMENS_G | SZEGMENS_C | SZEGMENS_D)
;#define HAT		(SZEGMENS_A | SZEGMENS_F | SZEGMENS_G | SZEGMENS_E | SZEGMENS_C | SZEGMENS_D)
;#define HÉT		(SZEGMENS_A | SZEGMENS_B | SZEGMENS_C)
;#define NYOLC	(SZEGMENS_A | SZEGMENS_B | SZEGMENS_C | SZEGMENS_D | SZEGMENS_E | SZEGMENS_F | SZEGMENS_G)
;#define KILENC	(SZEGMENS_A | SZEGMENS_B | SZEGMENS_C | SZEGMENS_D | SZEGMENS_F | SZEGMENS_G)
;#define NULLA	(SZEGMENS_A | SZEGMENS_B | SZEGMENS_C | SZEGMENS_D | SZEGMENS_E | SZEGMENS_F)



;********************************Kijelzéskép beállítása**********************************
;				  DFABCEpG
#define EGY		b'00011000'
#define KETTŐ	b'10110101'
#define HÁROM	b'10111001'
#define NÉGY	b'01011001'
#define ÖT		b'11101001'
#define HAT		b'11101101'
#define HÉT		b'00111000'
#define NYOLC	b'11111101'
#define KILENC	b'11111001'
#define NULLA	b'11111100'

#define P_betű	b'01110101'
#define A_betű	b'01111101'

;***************************************************************************************
	TablSize EQU .160

#define	SZEGMENSEK	LATB
#define	DIGITEK		LATC
#define	TIZEDESPONT	LATB, 1

#define	KIJELZŐ1_DIGIT1		LATC,3
#define	KIJELZŐ1_DIGIT2		LATC,2
#define	KIJELZŐ1_DIGIT3		LATC,1
#define	KIJELZŐ1_DIGIT4		LATC,0
#define	KIJELZŐ2_DIGIT1		LATC,4
#define	KIJELZŐ2_DIGIT2		LATC,5
#define	KIJELZŐ2_DIGIT3		LATC,6
#define	KIJELZŐ2_DIGIT4		LATC,7

;***************************************************************************************

cblock 0x000
	W_TEMP
	STATUS_TEMP
	SZAM1_felso
	SZAM1_also
	SZAM2_felso
	SZAM2_also
	KIJELZŐ_1_felső_bájt
	KIJELZŐ_1_alsó_bájt
	KIJELZŐ_2_felső_bájt
	KIJELZŐ_2_alsó_bájt
	ezresek
	szazasok
	tizesek
	egyesek
	aktualis_digit
	kijelzo1_ezresek
	kijelzo1_szazasok
	kijelzo1_tizesek
	kijelzo1_egyesek
	kijelzo2_ezresek
	kijelzo2_szazasok
	kijelzo2_tizesek
	kijelzo2_egyesek
	KIJELZŐ_1_tp_helye
	KIJELZŐ_2_tp_helye
	delay0
	delay1
	delay2
	delay3
	Nullakioltas
	reg1

	minta_számláló
	elvetett_minta_számláló
	vszámH
	vszámL

	minta_tábla: .160		;minták tárolására használt 160 bájt
endc
	
	org 0
	goto START1		;melyik program fusson?
	org 8		;megszakítási cím


;**************** MEGSZAKÍTÁS ***********************
	MOVWF	W_TEMP			;W REGISZTER ELTÁROLÁSA
	SWAPF	STATUS,W		
	MOVWF 	STATUS_TEMP		;STATUS REGISZTER ELTÁROLÁSA


	BTFSS	INTCON,T0IF		;TMR0 MEGSZAKÍTÁS ELLENŐRZÉSE
		goto	megszakitas_kilepes

	clrf	DIGITEK
	clrf	SZEGMENSEK

	incf	aktualis_digit
	movlw	d'9'
	subwf	aktualis_digit, W
	btfss	STATUS, C		;ha nem az utolsó digit van bekapcsolva, akkor
		goto	TABLA2		;ugorjunk az adott digitet vezérlő rutinhoz
	movlw	d'1'
	movwf	aktualis_digit	;de ha a nyolcas (utolsó) digit volt legutóbb, akkor most az első jöjjön!
	

TABLA2
	movf	aktualis_digit, W
	rlncf	WREG, W		;W szorzása kettővel
;	decf	WREG		;egyet kivonunk a W-ből
	addwf	PCL,F		;W HOZZÁADÁSA A PROGRAMSZÁMLÁLÓ ALSÓ BYTE-JÁHOZ
	goto	k1d1
	goto	k1d2
	goto	k1d3
	goto	k1d4k
	goto	k2d1
	goto	k2d2
	goto	k2d3
	goto	k2d4k	



k1d1:	tstfsz	kijelzo1_ezresek	;a szám nulla?
			goto	k1d1k			;ha nem nulla, akkor jelezd ki!
			btfss	KIJELZŐ_1_tp_helye,3	;x.xxx-es a kijelzés?
			goto	megszakitas_kilepes		;ha nem, akkor ne jelezz ki hanem lépj ki a megszakításból!
k1d1k:	bsf		KIJELZŐ1_DIGIT1		;bekapcsoljuk az első kijelző legnagyobb helyiértékű digitjét
		btfsc	KIJELZŐ_1_tp_helye,3	;x.xxx-es a kijelzés?
		bsf		SZEGMENSEK,7			;ha igen, akkor kapcsold be a tizedespontot!
		movf	kijelzo1_ezresek, W
		call	TABLA1				;az ezresek regiszter tartalmát átkonvertáljuk kijelzésképpé
		iorwf	SZEGMENSEK, F		;majd kijelezzük a számot
		goto	megszakitas_kilepes



k1d2:	tstfsz	kijelzo1_szazasok		;a szám nulla?
		goto	k1d2k			;ha nem nulla, akkor jelezd ki!
			btfsc	KIJELZŐ_1_tp_helye,3	;x.xxx-es a kijelzés?
			goto	k1d2k					;ha igen, akkor jelezz ki!
			btfsc	KIJELZŐ_1_tp_helye,2	;xx.xx-es a kijelzés?
			goto	k1d2k					;ha igen, akkor jelezz ki!
			tstfsz	kijelzo1_ezresek		;az ezresek nulla?
			goto	k1d2k					;ha nem, akkor jelezz ki!
			goto	megszakitas_kilepes		;ha igen, akkor ne jelezz ki
k1d2k:	bsf		KIJELZŐ1_DIGIT2		;bekapcsoljuk az első kijelző balról a második digitjét
		btfsc	KIJELZŐ_1_tp_helye,2	;xx.xx-es a kijelzés?
		bsf		SZEGMENSEK,7			;ha igen, akkor kapcsold be a tizedespontot!
		movf	kijelzo1_szazasok, W	
		call	TABLA1				;az ezresek regiszter tartalmát átkonvertáljuk kijelzésképpé
		iorwf	SZEGMENSEK, F		;majd kijelezzük a számot
		goto	megszakitas_kilepes


k1d3:	tstfsz	kijelzo1_tizesek	;a szám nulla?
		goto	k1d3k				;ha nem nulla, akkor jelezd ki!
			btfsc	KIJELZŐ_1_tp_helye,3	;x.xxx-es a kijelzés?
			goto	k1d3k					;ha igen, akkor jelezz ki!
			btfsc	KIJELZŐ_1_tp_helye,2	;xx.xx-es a kijelzés?
			goto	k1d3k					;ha igen, akkor jelezz ki!
			btfsc	KIJELZŐ_1_tp_helye,1	;xxx.x-es a kijelzés?
			goto	k1d3k					;ha igen, akkor jelezz ki!
			tstfsz	kijelzo1_ezresek		;az ezresek nulla?
			goto	k1d3k					;ha nem, akkor jelezz ki!
			tstfsz	kijelzo1_szazasok		;a százasok nulla?
			goto	k1d3k					;ha nem, akkor jelezz ki!
			goto	megszakitas_kilepes		;ha igen, akkor ne jelezz ki
k1d3k:	bsf		KIJELZŐ1_DIGIT3		;bekapcsoljuk az első kijelző balról a harmadik digitjét
		btfsc	KIJELZŐ_1_tp_helye,1	;xxx.x-es a kijelzés?
		bsf		SZEGMENSEK,7			;ha igen, akkor kapcsold be a tizedespontot!	
		movf	kijelzo1_tizesek, W	
		call	TABLA1				;az ezresek regiszter tartalmát átkonvertáljuk kijelzésképpé
		iorwf	SZEGMENSEK, F		;majd kijelezzük a számot
		goto	megszakitas_kilepes


k1d4k:	bsf		KIJELZŐ1_DIGIT4		;bekapcsoljuk az első kijelző balról a negyedik digitjét
		movf	kijelzo1_egyesek, W	
		call	TABLA1				;az ezresek regiszter tartalmát átkonvertáljuk kijelzésképpé
		movwf	SZEGMENSEK			;majd kijelezzük a számot
		goto	megszakitas_kilepes



k2d1:	tstfsz	kijelzo2_ezresek	;a szám nulla?
			goto	k2d1k			;ha nem nulla, akkor jelezd ki!
			btfss	KIJELZŐ_2_tp_helye,3	;x.xxx-es a kijelzés?
			goto	megszakitas_kilepes		;ha nem, akkor ne jelezz ki hanem lépj tovább a következő digitre!
k2d1k:	bsf		KIJELZŐ2_DIGIT1		;bekapcsoljuk a második kijelző legnagyobb helyiértékű digitjét
		btfsc	KIJELZŐ_2_tp_helye,3	;x.xxx-es a kijelzés?
		bsf		SZEGMENSEK,7			;ha igen, akkor kapcsold be a tizedespontot!
		movf	kijelzo2_ezresek, W
		call	TABLA1				;az ezresek regiszter tartalmát átkonvertáljuk kijelzésképpé
		iorwf	SZEGMENSEK, F		;majd kijelezzük a számot
		goto	megszakitas_kilepes


k2d2:	tstfsz	kijelzo2_szazasok	;a szám nulla?
		goto	k2d2k				;ha nem nulla, akkor jelezd ki!
			btfsc	KIJELZŐ_2_tp_helye,3	;x.xxx-es a kijelzés?
			goto	k2d2k					;ha igen, akkor jelezz ki!
			btfsc	KIJELZŐ_2_tp_helye,2	;xx.xx-es a kijelzés?
			goto	k2d2k					;ha igen, akkor jelezz ki!
			tstfsz	kijelzo2_ezresek		;az ezresek nulla?
			goto	k2d2k					;ha nem, akkor jelezz ki!
			goto	megszakitas_kilepes		;ha igen, akkor ne jelezz ki
k2d2k:	bsf		KIJELZŐ2_DIGIT2		;bekapcsoljuk a második kijelző balról a második digitjét
		btfsc	KIJELZŐ_2_tp_helye,2	;xx.xx-es a kijelzés?
		bsf		SZEGMENSEK,7			;ha igen, akkor kapcsold be a tizedespontot!
		movf	kijelzo2_szazasok, W	
		call	TABLA1				;az ezresek regiszter tartalmát átkonvertáljuk kijelzésképpé
		iorwf	SZEGMENSEK, F		;majd kijelezzük a számot
		goto	megszakitas_kilepes


k2d3:	tstfsz	kijelzo2_tizesek	;a szám nulla?
		goto	k2d3k				;ha nem nulla, akkor jelezd ki!
			btfsc	KIJELZŐ_2_tp_helye,3	;x.xxx-es a kijelzés?
			goto	k2d3k					;ha igen, akkor jelezz ki!
			btfsc	KIJELZŐ_2_tp_helye,2	;xx.xx-es a kijelzés?
			goto	k2d3k					;ha igen, akkor jelezz ki!
			btfsc	KIJELZŐ_2_tp_helye,1	;xxx.x-es a kijelzés?
			goto	k2d3k					;ha igen, akkor jelezz ki!
			tstfsz	kijelzo2_ezresek		;az ezresek nulla?
			goto	k2d3k					;ha nem, akkor jelezz ki!
			tstfsz	kijelzo2_szazasok		;a százasok nulla?
			goto	k2d3k					;ha nem, akkor jelezz ki!
			goto	megszakitas_kilepes		;ha igen, akkor ne jelezz ki
k2d3k:	bsf		KIJELZŐ2_DIGIT3		;bekapcsoljuk a második kijelző balról a harmadik digitjét
		btfsc	KIJELZŐ_2_tp_helye,1	;xxx.x-es a kijelzés?
		bsf		SZEGMENSEK,7			;ha igen, akkor kapcsold be a tizedespontot!	
		movf	kijelzo2_tizesek, W	
		call	TABLA1				;az ezresek regiszter tartalmát átkonvertáljuk kijelzésképpé
		iorwf	SZEGMENSEK, F		;majd kijelezzük a számot
		goto	megszakitas_kilepes


k2d4k:	bsf		KIJELZŐ2_DIGIT4		;bekapcsoljuk a második kijelző balról a negyedik digitjét
		movf	kijelzo2_egyesek, W	
		call	TABLA1				;az ezresek regiszter tartalmát átkonvertáljuk kijelzésképpé
		movwf	SZEGMENSEK			;majd kijelezzük a számot
		goto	megszakitas_kilepes



megszakitas_kilepes
	movlw	d'0'
	movwf	TMR0H
	movlw	d'100'
	movwf	TMR0L		;timer0 időzítő beállítása -> (256-100)/16*(1/4Mhz)

	SWAPF	STATUS_TEMP,W	
	MOVWF 	STATUS			;AZ ELMENTETT STATUS REGISZTER VISSZAÁLLÍTÁSA
	SWAPF	W_TEMP,F
	SWAPF	W_TEMP,W		;AZ ELMENTETT W REGISZTER VISSZAÁLLÍTÁSA
	bcf		INTCON, T0IF	;TMR0 megszakítást jelzőbitjét töröljük
	BSF		INTCON, GIE		;ÁLTALÁNOS MEGSZAKÍTÁS ENGEDÉLYEZÉSE
RETFIE
;************** MEGSZAKÍTÁS VÉGE *******************
	


;-------------------------------------------------------------------------------
;----------------------START1---------------------------------------------------
;-------------------------------------------------------------------------------
START1

	call	PIC_INICIALIZÁLÁS

	bcf		INTCON, GIE



AD_konverzió
	movlw	d'80'
	movwf	minta_számláló
	lfsr	FSR0, minta_tábla	;a tábla legalsó mintájának alsó bájtjához lépünk
	movlw	b'00000101'
	movwf	ADCON0				;Ube (AN1) kiválasztása, engedélyezése
tábla_feltöltése
	bsf		ADCON0, GO_DONE		;A/D konverzió indítása
	btfsc	ADCON0, GO_DONE		;befejeződött az A/D konverzió?
	goto	$-2					;ha nem, akkor kérdezd meg újra!
	movff	ADRESL, POSTINC0
	movff	ADRESH, POSTINC0
	decfsz	minta_számláló
	bra		tábla_feltöltése
;...

;A nyolc legnagyobb érték eldobása:
	movlw	h'0F'	;decimális 4095 felső bájtja
	movwf	vszámH
	movlw	h'FF'	;decimális 4095 alsó bájtja
	movwf	vszámL
	clrf	elvetett_minta_számláló
	lfsr	FSR0, minta_tábla+TablSize-1	;a tábla legfelső mintájának felső bájtjához lépünk
	bra		a04
a01	decf	vszámL
	btfss	STATUS, C	;ha alulcsordult, akkor nem ugrik!
	decf	vszámH
a07	movf	POSTDEC0, f
	movf	POSTDEC0, f	;lejjebb lépünk a következő mintára!
a04	movf	vszámH, W
	cpfseq	INDF0
	bra		a07			;ha nem egyenlő a felső bájt
	movf	POSTDEC0, f	;ha a felső bájt egyenlő, akkor...
	movf	vszámH, W
	cpfseq	INDF0
	bra		a03			;ha a felső bájt egyenlő de az alsó nem
	bra		a02
a03	movf	POSTINC0, f	;visszanöveljük a táblát hogy megint a felső bájtra mutasson...
	bra		a07			;...és csak ezután lépünk tovább a következő mintára!
a02	clrf	INDF0		;ha az alsó és a felső bájt is egyenlő, akkor az alsó...
	clrf	PREINC0		;...és a felső bájtot is töröljük!
	incf	elvetett_minta_számláló	;+1 mintát elvetettünk!
	movlw	d'8'
	cpfseq	elvetett_minta_számláló	;elvetettünk már 8db mintát?
	bra		a06		;ha nem
	bra		a05		;ha igen
a06	movlw	minta_tábla
	decf	WREG
	cpfseq	FSR0		;a tábla elejére értünk már?
	bra		a07			;ha nem
	lfsr	FSR0, minta_tábla+TablSize-1	;a tábla legfelső mintájának felső bájtjához lépünk
	decf	vszámL
	btfss	STATUS, C	;ha alulcsordult, akkor nem ugrik!
	decf	vszámH
	bra		a04






;A nyolc legkisebb érték eldobása:
a05	goto$










;AD_konverzio
;	bsf		ADCON0, GO_DONE		;A/D konverzió indítása
;	btfsc	ADCON0, GO_DONE		;befejeződött az A/D konverzió?
;	goto	$-2					;ha nem, akkor kérdezd meg újra!
;	movff	ADRESH, KIJELZŐ_1_felső_bájt
;	movff	ADRESL, KIJELZŐ_1_alsó_bájt
;
;	clrf	DIGITEK
;	clrf	SZEGMENSEK
;	movlw	b'00001000'
;	movwf	KIJELZŐ_1_tp_helye
;	clrf	reg1
;
;Kijelzes
;	movff	KIJELZŐ_1_felső_bájt, SZAM1_felso
;	movff	KIJELZŐ_1_alsó_bájt, SZAM1_also
;	call	KONV_13bit_4digit
;	call	KIJELZŐ1_kijelzes
;
;	incf	reg1
;	movlw	d'200'		;hányszor legyen egyms után kijelezve a szám?
;	subwf	reg1, W
;	btfss	STATUS, C	;reg1 elérte már a számot?
;	goto	Kijelzes		;ha nem, akkor jelezz még ki!
;goto	START1				;ha igen, akkor végy egy új mintát!
	



;CIKLUS
;
;movlw	d'200'
;movwf	reg1
;
;movlw	b'00001110'
;movwf	KIJELZŐ_1_felső_bájt
;movlw	b'11011000'
;movwf	KIJELZŐ_1_alsó_bájt
;movlw	b'00000010'
;movwf	KIJELZŐ_2_felső_bájt
;movlw	b'10111111'
;movwf	KIJELZŐ_2_alsó_bájt
;
;
;
;movlw	b'00000000'
;movwf	KIJELZŐ_1_tp_helye
;movlw	b'00000010'
;movwf	KIJELZŐ_2_tp_helye
;
;
;	movff	KIJELZŐ_1_felső_bájt, SZAM1_felso
;	movff	KIJELZŐ_1_alsó_bájt, SZAM1_also
;	call	KONV_13bit_4digit
;	movff	ezresek, kijelzo1_ezresek
;	movff	szazasok, kijelzo1_szazasok
;	movff	tizesek, kijelzo1_tizesek
;	movff	egyesek, kijelzo1_egyesek
;
;	movff	KIJELZŐ_2_felső_bájt, SZAM1_felso
;	movff	KIJELZŐ_2_alsó_bájt, SZAM1_also
;	call	KONV_13bit_4digit
;	movff	ezresek, kijelzo2_ezresek
;	movff	szazasok, kijelzo2_szazasok
;	movff	tizesek, kijelzo2_tizesek
;	movff	egyesek, kijelzo2_egyesek

;decfsz	reg1
;goto	kijelzes_ciklus
;movlw	d'100'
;movwf	reg1
;
;goto	ciklus
	

;goto	CIKLUS

	



		
TABLA1
	rlncf	WREG, W		;W szorzása kettővel
;	bcf		PCLATH, 3
;	bcf		PCLATH, 4	;nulladik lap kiválasztása
	addwf	PCL,F		;W HOZZÁADÁSA A PROGRAMSZÁMLÁLÓ ALSÓ BYTE-JÁHOZ
	retlw	NULLA
	retlw	EGY
	retlw	KETTŐ
	retlw	HÁROM
	retlw	NÉGY
	retlw	ÖT
	retlw	HAT
	retlw	HÉT
	retlw	NYOLC
	retlw	KILENC
RETURN

	



goto$




;-------------------------------------------------------------------------
;------------SZUBRUTINOK--------------------------------------------------
;-------------------------------------------------------------------------

PIC_INICIALIZÁLÁS
	movlw	b'00000000'		
	movwf	TRISB			;PORTB minden lába kimenet lesz
	movwf	TRISC			;PORTC minden lába kimenet lesz
	movlw	b'00111111'
	movwf	TRISA			;RA7 és RA6 kimenet lesz
;	bsf		TRISE, 3		;RE3 bemenet lesz
	clrf	LATB
	clrf	LATC
	bcf		LATA, 7
	bcf		LATA, 6
;***********************************
;	A/D konfigurációja:
	movlw	b'00000001'
	movwf	ADCON0			;AN0 lesz használva, engedélyezve
	movlw	b'00111011'	
	movwf	ADCON1			;AN0, AN1, AN2, AN3 lesz használva, külső referencia BE
	movlw	b'10001100'
	movwf	ADCON2			;eredmény jobbra igazítása, 2TAD, Fosc/4
;**********************************
;	TMR0 konfigurációja:
	movlw	b'11010100'	; számláló engedélyezve, 8 bites mód, belső oszcillátorról, lefutó élre, 1:32-es előosztó
	movwf	T0CON
;**********************************
;	Megszakítások konfigurációja
	clrf	INTCON
	bsf		INTCON, GIE		;globális megszakítás engedélyezés
	bsf		INTCON, T0IE	;timer0 túlcsordulás-megszakítás engedélyezése
RETURN




KONV_13bit_4digit

;movlw	b'00000011'
;movwf	SZAM1_felso
;movlw	b'11101001'
;movwf	SZAM1_also

	clrf	ezresek
	clrf	szazasok
	clrf	tizesek
	clrf	egyesek

Osztas_ezerrel
	movlw	b'00000011'			;először a felső bájt
	subwf	SZAM1_felso, W
	movlw	b'11101000'			;aztán az alsó
	btfsc	STATUS, Z    	
	subwf	SZAM1_also, W
	btfss	STATUS, C			;Ha a szám kisebb ezernél,
	goto	Osztas_szazzal		;akkor osztás százzal!
	


	movlw	b'00000011'			;először felso bajt
	subwf	SZAM1_felso, w		;kivonás
	btfss	STATUS, C			;ha alulcsordulás van, akkor...
	goto	Osztas_szazzal		;...akkor osszunk tovább százzal
;	tstfsz	WREG				;de ha nulla, akkor...
	goto	oe					;ha nincs alulcsordulás és nem is nulla, akkor osszunk tovább ezerrel!
	goto	Osztas_szazzal
;		incf	ezresek			
;		movwf	SZAM1_felso			;eredmény tárolása
;		movlw	b'11101000'			;azután also bajt
;		subwf	SZAM1_also, w		;kivonás
;		movwf	SZAM1_also    		;eredmény tárolás
;		goto	Osztas_szazzal

;		movlw	b'11101000'			;azután also 
;		subwf	SZAM1_also, w		;kivonás
;		movwf	SZAM1_also    		;eredmény tárolás
;		btfss	STATUS, C    		;
;		decf	SZAM1_felso			;felso bajt dekrementálása
;		goto	Osztas_szazzal


oe	movwf	SZAM1_felso			;eredmény tárolása
	movlw	b'11101000'			;azután also 
	subwf	SZAM1_also, w		;kivonás
	movwf	SZAM1_also    		;eredmény tárolás
	btfss	STATUS, C    		;alulcsordult?
	decf	SZAM1_felso			;ha igen, akkor felso bajt dekrementálása
	incf	ezresek
	goto	Osztas_ezerrel

Osztas_szazzal
	movlw	b'01100100'			;írjunk decimálisan 100-at a W-be
	subwf	SZAM1_also, w		;kivonás
	btfsc	STATUS, C    		;ha alulcsordult, akkor ugrik
	goto	$+10				; (b-hez ugorjon)
	tstfsz	SZAM1_felso			;ha a felso bajt nulla, akkor ugrik!
	goto	$+6					; (a-hoz ugorjon) ha alulcsordult, de a felso bajt nem nulla
	goto	Osztas_tizzel
	decf	SZAM1_felso			; (a) felso bajt dekrementálása
	movwf	SZAM1_also    		; (b) eredmény tárolás
	incf	szazasok
	goto	Osztas_szazzal




Osztas_tizzel
	movlw	b'00001010'			;decimálisan 10-et írunk a W-be
	subwf	SZAM1_also, w		;kivonás
	btfss	STATUS, C			;ha alulcsordulás van, akkor...
	goto	$+10
	incf	tizesek
	movwf	SZAM1_also
	goto	Osztas_tizzel
	movff	SZAM1_also,egyesek
	movff	SZAM1_also,egyesek

RETURN						;konverzió befejezve!




;delay1000s:
;	movlw   d'100'
;	movwf	delay1
;	movlw	d'100'
;	movwf	delay2
;	movlw	d'100'
;	movwf	delay3
;	goto    d1
;delay100s:
;	movlw   d'100'
;	movwf	delay1
;	movlw	d'100'
;	movwf	delay2
;	movlw	d'10'
;	movwf	delay3
;	goto    d1 
;delay10s:
;	movlw	d'100'
;	movwf	delay2
;	movlw	d'100'
;	movwf	delay3
;	goto    d2 
;delay1s:
;	movlw	d'10'
;	movwf	delay2
;	movlw	d'100'
;	movwf	delay3
;	goto    d2 
;delay100ms:
;	movlw   d'100'
;	movwf	delay3
;	goto    d3 
;delay10ms:
;	movlw	d'10'
;	movwf	delay3
;	goto    d3
;delay1ms:
;	movlw	d'1'
;	movwf	delay3
;	goto    d3 	
;d1:	decfsz	delay1,f
;	goto	d1
;d2:	decfsz	delay2,f
;	goto	d2
;d3:	decfsz	delay3,f
;	goto	d3
;d0:	movlw	d'248'	;   d'248'
;	movwf	delay0
;	decfsz	delay0,f
;	goto	$-2
;RETURN




delay100us:
	movlw	d'25'
	decfsz	WREG
	goto	$-2
RETURN



delay100ms:
	movlw	d'100'		;100ms
	goto	d2
delay10ms:
	movlw	d'10'		;10ms
	goto	d2
delay1ms:
	movlw	d'1'		;1ms
d2:	movwf	delay1
d1:	movlw	d'248'	
	movwf	delay0	
d0:	decfsz	delay0,f
	goto	d0
	decfsz	delay1,f
	goto	d1

RETURN




goto$
END