				__config  _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _BODEN_OFF

				#include "p16f873a.inc"  			  ;Include header file

				Delay1			EQU			H'20'	  
				Delay2			EQU			H'21'	  
				BUFFER          EQU         H'22'		
				VALORE          EQU         H'23'	
				CIFRA_0         EQU         H'25'
				CIFRA_1         EQU         H'26'
				CIFRA_2         EQU         H'27'	
				MOMENTANEO      EQU         H'28'
				DATO_0			EQU         H'74'
				DATO_1			EQU         H'75'
				DATO_2			EQU         H'76'
				FLAG            EQU         H'77'
				
				ORG		0x000		
				GOTO	INIZIO						

ATTIVAZIONE_SCRITTURA
				MOVLW   B'11111011'		
				MOVWF	PORTC			
				RETLW   0
				ATTIVAZIONE_COMANDO
				MOVLW   B'11111010'		
				MOVWF	PORTC			    
				RETLW   0

WRITE_DISPLAY
				MOVWF   PORTB			
				BCF		PORTC,RC1		    
				BSF		PORTC,RC2	    	

				CALL	RITARDO			
				BCF		PORTC,RC2	    
				BSF		PORTC,RC1		   
				RETLW	0			   
RITARDO
				MOVF    BUFFER,W
				MOVWF   Delay2
RITARDO_1
				MOVLW	H'FF'			
				MOVWF   Delay1			
OndelayLoop
				decfsz	Delay1,f		
				goto	OndelayLoop
				decfsz	Delay2,f
				goto	RITARDO_1
				RETLW	0

INIZIO
				BSF    	STATUS,RP0     
				MOVLW	B'11111111'	   
				MOVWF	TRISA	      
				MOVLW	B'00000000'	   
				MOVWF	TRISB
				MOVLW	B'11111000'	   
				MOVWF	TRISC	   	  
				MOVLW   0X006 		   
				MOVWF   ADCON1        
				BCF     STATUS,RP0         	        		
 				MOVLW   H'20'
				MOVWF   BUFFER
				CALL	RITARDO			
				CLRF    VALORE
				CLRF    FLAG

				MOVLW   H'30'
				MOVWF   FSR

				MOVLW   H'00'
				MOVWF   INDF
				INCF    FSR
				

				MOVLW   H'01'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'02'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'03'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'04'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'05'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'06'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'07'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'08'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'09'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'10'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'11'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'12'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'13'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'14'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'15'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'16'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'17'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'18'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'19'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'20'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'21'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'22'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'23'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'24'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'25'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'26'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'27'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'28'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'29'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'30'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'31'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'32'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'33'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'34'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'35'
				MOVWF   INDF

				MOVLW   H'60'
				MOVWF   FSR

				MOVLW   H'00'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'01'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'02'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'03'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'04'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'05'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'06'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'07'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'08'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'09'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'10'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'11'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'12'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'13'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'14'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'15'
				MOVWF   INDF
				

				MOVLW   H'70'
				MOVWF   FSR
				
				MOVLW   H'0'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'01'
				MOVWF   INDF
				INCF    FSR

				MOVLW   H'02'
				MOVWF   INDF
				INCF    FSR

INIZIO_INIZIALIZZAZIONE_DISPLAY
				CALL    ATTIVAZIONE_COMANDO
    			MOVLW   H'10'
				MOVWF   BUFFER
				MOVLW   B'00111111'		
				CALL	WRITE_DISPLAY	
				MOVLW   B'00111111'		
				CALL	WRITE_DISPLAY		
				MOVLW   B'00111111'		
				CALL	WRITE_DISPLAY	
				MOVLW   B'00111011'		
											
				CALL	WRITE_DISPLAY		
				MOVLW   B'00001000'		
				CALL	WRITE_DISPLAY		
				MOVLW   B'00000001'		
				CALL	WRITE_DISPLAY		
				MOVLW   B'00000110'		
				CALL	WRITE_DISPLAY		
FINE_INIZIALIZZAZIONE_DISPLAY

CONFIGURAZIONE_DISPLAY
				MOVLW   B'00001100'		
				CALL	WRITE_DISPLAY		
FINE_CONFIGURAZIONE_DISPLAY		
				
LOOP			
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO

				BCF     STATUS,Z
				MOVLW   D'8'
				SUBWF   FLAG,W
				BTFSC   STATUS,Z
				GOTO    RISULTATO
				BTFSS   PORTA,RA0
				GOTO    ZERO
				BTFSS   PORTA,RA1
				GOTO    UNO
				BTFSS   PORTA,RA2
				GOTO    CALCOLA
				GOTO    LOOP
ZERO
				CALL    ATTIVAZIONE_SCRITTURA		
				MOVLW   '0'
				CALL    WRITE_DISPLAY
				BCF     STATUS,C
				RLF     VALORE,F	
				BCF     VALORE,0
			
				INCF    FLAG
				GOTO    LOOP
UNO
				CALL    ATTIVAZIONE_SCRITTURA		
				MOVLW   '1'
				CALL    WRITE_DISPLAY
				MOVLW   D'1'
				BCF     STATUS,C
				RLF     VALORE,F	
				BSF     VALORE,0
				INCF    FLAG
				GOTO    LOOP
RISULTATO
				BTFSC   PORTA,RA2
				GOTO    RISULTATO		
CALCOLA		
				MOVLW   H'30'
				MOVWF   CIFRA_0

				MOVLW   H'60'
				MOVWF   CIFRA_1

				MOVLW   H'70'
				MOVWF   CIFRA_2

				BTFSC   VALORE,0
				CALL    BINARIO_0
				BTFSC   VALORE,1
				CALL    BINARIO_1
				BTFSC   VALORE,2
				CALL    BINARIO_2
				BTFSC   VALORE,3
				CALL    BINARIO_3
				BTFSC   VALORE,4
				CALL    BINARIO_4
				BTFSC   VALORE,5
				CALL    BINARIO_5
				BTFSC   VALORE,6
				CALL    BINARIO_6
				BTFSC   VALORE,7
				CALL    BINARIO_7
				
				MOVF    CIFRA_0,W
				MOVWF   FSR
				MOVF    INDF,W	
				MOVWF   DATO_0
				MOVWF   MOMENTANEO		
				MOVLW   B'11110000'
				ANDWF   MOMENTANEO,F
				SWAPF   MOMENTANEO,W
				ADDWF   CIFRA_1,W				
				MOVWF   FSR
				MOVF    INDF,W	
				MOVWF   DATO_1
				MOVWF   MOMENTANEO				
				MOVLW   B'11110000'
				ANDWF   MOMENTANEO,F
				SWAPF   MOMENTANEO,W
				ADDWF   CIFRA_2,W
				MOVWF   FSR
				MOVF    INDF,W
				MOVWF   DATO_2
				MOVLW   B'00001111'
				ANDWF   DATO_0,F
				ANDWF   DATO_1,F
				ANDWF   DATO_2,F
				BSF     DATO_0,4
				BSF     DATO_0,5
				BSF     DATO_1,4
				BSF     DATO_1,5
				BSF     DATO_2,4
				BSF     DATO_2,5
				CALL    ATTIVAZIONE_COMANDO
				MOVLW   B'11000000'
				CALL    WRITE_DISPLAY					
				MOVLW    H'1'
				MOVWF    BUFFER				
				CALL    ATTIVAZIONE_SCRITTURA
				MOVF    DATO_2,W    
				CALL	WRITE_DISPLAY	
				MOVF    DATO_1,W    
				CALL	WRITE_DISPLAY	
				MOVF    DATO_0,W    
				CALL	WRITE_DISPLAY
				MOVLW    H'10'
				MOVWF    BUFFER
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
RIPETI
				BTFSC   PORTA,RA2
				GOTO    RIPETI	

				CALL    ATTIVAZIONE_COMANDO
				MOVLW   B'00000010'
				CALL    WRITE_DISPLAY
				MOVLW   B'00000001'
				CALL    WRITE_DISPLAY
				CALL    RITARDO
				CALL    RITARDO
				CALL    RITARDO
				CLRF    VALORE
			    CLRF    FLAG			
FINE 
				GOTO    LOOP	

BINARIO_0
				MOVLW   D'01'
				ADDWF   CIFRA_0,F
				RETLW   0

BINARIO_1
				MOVLW   D'02'
				ADDWF   CIFRA_0,F
				RETLW   0

BINARIO_2
				MOVLW   D'04'
				ADDWF   CIFRA_0,F
				RETLW   0

BINARIO_3
				MOVLW   D'08'
				ADDWF   CIFRA_0,F
				RETLW   0

BINARIO_4
				MOVLW   D'6'
				ADDWF   CIFRA_0,F
				MOVLW   D'1'
				ADDWF   CIFRA_1,F
				RETLW   0

BINARIO_5
				MOVLW   D'2'
				ADDWF   CIFRA_0,F
				MOVLW   D'3'
				ADDWF   CIFRA_1,F
				RETLW   0

BINARIO_6
				MOVLW   D'4'
				ADDWF   CIFRA_0,F
				MOVLW   D'6'
				ADDWF   CIFRA_1,F
				RETLW   0

BINARIO_7
				MOVLW   D'8'
				ADDWF   CIFRA_0,F
				MOVLW   D'2'
				ADDWF   CIFRA_1,F
				MOVLW   D'1'
				ADDWF   CIFRA_2,F
				RETLW   0

END			

