#INCLUDE "P16F84A.INC"
 __CONFIG _CP_OFF & _HS_OSC & _PWRTE_OFF & _WDT_OFF
 ;
 errorlevel 2
 #DEFINE BANK0 BCF STATUS,RP0
 #DEFINE BANK1 BSF STATUS,RP0

 RADIX DEC ; 10-ES SZÁMRENDSZER AZ ALAP
 #DEFINE LDA# MOVLW
 #DEFINE STA MOVWF
 #DEFINE SEI BSF INTCON,GIE
 #DEFINE CLI BCF INTCON,GIE
 #DEFINE BTHI BTFSC
 #DEFINE BTLO BTFSS
 #DEFINE ZERO STATUS,2
 #DEFINE CARRY STATUS,0
 LDA MACRO A4
 MOVF A4 , W
 ENDM
 ;
 #DEFINE DTIME 25 ;FRISSÍTÉSI IDŐ
 ;

 cblock 0x0c
 W_TEMP,STATUS_TEMP
 D1,D2,D3,D4 ;INPUT REGISZTERK
 L1,L2,L3,L4 ;KIJELZŐ SZÁMOK
 C1L,C1H ;PERIÓDUS IDŐ SZÁMLÁLÓ (625 = 1S)
 KMASZK ;KATÓDKIVÁLASZTÁSHOZ MASZK
 C2 ;DIGITSZÁMLÁLÓ
 ENDC

 ORG 0
 GOTO PRG
 ;***************************************
 ORG 4 ;MEGSZAKÍTÁS
 MOVWF W_TEMP ;REGISZTEREK ELMENTÉSE
 SWAPF STATUS,W
 MOVWF STATUS_TEMP
 BCF INTCON,T0IF
 CLRF PORTA ;ÖSSZES KIJELZŐ TÖRLÉSE
 MOVLW L1
 ADDWF C2,W
 MOVWF FSR ;A SZÁMLÁÓ SZERINTI INDIREKT CÍMZÉS
 INCF C2,F
 NOP
 MOVLW 0X07
 ADDWF TMR0,F ;a TIMER PONTOS 1 SEC BEÁLLÍTÁSA
 MOVF INDF,W
 CALL ADAT ;A KIIRANDÓ SZÁMNAK MEGFELELŐ ADAT BEKÉRÉSE
 MOVWF PORTB ;TÁBLÁZATBÓL ÉS KITESSZÜK A PORTRA
 MOVF KMASZK,W
 MOVWF PORTA ;ADOTT DIGIT BEKAPCSOLÁSA
 RRF KMASZK,W ;ELŐKÉSZÍTÉS KÖVETKEZŐ DIGITRE
 RRF KMASZK,F
 MOVLW 4 ;HA MEGVOLT A 4 KIJELZŐ
 XORWF C2,W ;KEZDJÜK ELÖLRŐL
 BNZ $+2
 CLRF C2
 ;*********
 DECFSZ C1L ;1 SEC IDŐZÍTŐ, HA LEJÁRT
 GOTO M00 ;ADATOK ÁTMÁSOLÁSA A KIJELZŐ
 DECFSZ C1H ;PUFFERÉBE ÉS TÖRLÉS
 GOTO M00 ;KEZDŐDIK ELÖLRŐL
 MOVLW 0X71
 MOVWF C1L
 MOVLW 0X03
 MOVWF C1H
 MOVF D1,W
 CLRF D1
 MOVWF L1
 MOVF D2,W
 CLRF D2
 MOVWF L2
 MOVF D3,W
 CLRF D3
 MOVWF L3
 MOVF D4,W
 CLRF D4
 MOVWF L4
 ;HIBAJAVÍTÁS
 ;MIVEL A MEGSZAKÍTÁS ÉRKEZHET OLYANKOR IS AMIKOR ÉPP AT EGYIK DIGIT
 ;10-ES ÉRTÉKŰ, EZÉRT MEG KELL VIZSGÁLNI EGYENKÉT ŐKET, ÉS LEFOLYTATNI
 ;A SZÁMLÁLÓ LÉPETÉSÉT A KORREKT ADATHOZ

 MOVLW .10
 SUBWF L1,W
 BNC M02
 CLRF L1
 INCF L2
 MOVLW .10
 SUBWF L2,W
 BNC M01
M04:CLRF L2
 INCF L3,F
 MOVLW .10
 SUBWF L3,W
 BNC M01
M06:CLRF L3
 INCF L4,F
 MOVLW .10
 SUBWF L4,W
 BNC M01
 CLRF L4
 GOTO M01
 ;/**/
M02:MOVLW .10
 SUBWF L2,W
 BNC M03
 GOTO M04
M03:MOVLW .10
 SUBWF L3,W
 BNC M05
 GOTO M06
M05:MOVLW .10
 SUBWF L4,W
 BNC M01
 CLRF L4

M01 NOP
M00:SWAPF STATUS_TEMP,W ;MEGSZAKÍTÁSI REGISZTEREK VISSZAÁLLÍTÁSA
 MOVWF STATUS
 SWAPF W_TEMP,F
 SWAPF W_TEMP,W
 RETFIE ;MEGSZAKÍTÁS VÉGE
 ;*****************************************
ADAT: ;KIJELZŐHÖZ ADATOK :LÁSD PANELTERV
 ADDWF PCL,F
 DT B'10111110',B'00011000',B'01110110',B'01111100',B'11011000'
 DT B'11101100',B'11101110',B'00111000',B'11111110',B'11111100'
 ;*****************************************
PRG:

 CLRF C1L
 CLRF C1H
 DECFSZ C1L
 GOTO PRG+2
 DECFSZ C1H
 GOTO PRG+2 ;78,85mSec várakozás


 BANK1 ;RAM FELSŐLAP
 MOVLW 0X10 ;A PORT ADATIRÁNY
 MOVWF TRISA
 MOVLW 1 ;B PORT ADATIRÁNY
 MOVWF TRISB
 MOVLW B'11010011' ;BELSŐ OSZCILL 16-OS ELŐOSZTÁS
 MOVWF OPTION_REG
 BANK0 ;RAM ALSÓ LAP
 BSF INTCON,GIE ;MEGSZAK ENG.
 BSF INTCON,T0IE ;TIMER MEGSZ. ENG.
 MOVLW 0X71 ;TIMER 1 SEC IDŐKÖZÖNKÉNT LEKÉRDEZI A SZÁNLÁLÓT
 MOVWF C1L ;ÉS 1.6mS IDŐNKÉNT LÉPTETI A KIJELZŐT
 MOVLW 0X03
 MOVWF C1H ;1MÁSODPERCES FRISSÍTÉS
 MOVLW 0X88
 MOVWF KMASZK
 CLRF C2 ;ELSÓ DIGIT
 CLRF D1
 CLRF D2
 CLRF D3
 CLRF D4
P01:BTHI PORTB,0 ;1 PERIÓDUS KIVÁRÁSA
 GOTO P01
P03:BTLO PORTB,0
 GOTO P03
 INCF D1,F ;10-ES SZÁMLÁLÓ LÉPTETÉSE
 MOVLW .10
 SUBWF D1,W
 BNC P01
 CLRF D1
 INCF D2,F
 MOVLW .10
 SUBWF D2,W
 BNC P01
 CLRF D2
 INCF D3,F
 MOVLW .10
 SUBWF D3,W
 BNC P01
 CLRF D3
 INCF D4,F
 MOVLW .10
 SUBWF D4,W
 BNC P01
 CLRF D4
 GOTO P01


 END