_Intr	;Function start
;	.line	30; ******	void Intr(void) __interrupt 
	MOVWF	WSAVE
	SWAPF	STATUS,W
	CLRF	STATUS
	MOVWF	SSAVE
	MOVF	PCLATH,W
	CLRF	PCLATH
	MOVWF	PSAVE
	MOVF	FSR,W
	BANKSEL	___sdcc_saved_fsr
	MOVWF	___sdcc_saved_fsr
;	.line	32; ******	if(RBIF){//cambio qualche bit port B
	BANKSEL	_INTCON_bits
	BTFSS	_INTCON_bits,0
	GOTO	_00109_DS_
;	.line	33; ******	vecchio_dato=nuovo_dato; //valore precedente  
	BANKSEL	_nuovo_dato
	MOVF	_nuovo_dato,W
	BANKSEL	_vecchio_dato
	MOVWF	_vecchio_dato
;	.line	34; ******	nuovo_dato=PORTB&0b11110000;//contano solo i 2 bit  5 e 4
	MOVLW	0xf0
	BANKSEL	_PORTB
	ANDWF	_PORTB,W  ; AND bit a bit
	BANKSEL	_nuovo_dato
	MOVWF	_nuovo_dato
;	.line	35; ******	bit_cambiati=(nuovo_dato^vecchio_dato);//bit cambiati: ottenuti con XOR
	BANKSEL	_vecchio_dato
	MOVF	_vecchio_dato,W
	BANKSEL	_nuovo_dato
	XORWF	_nuovo_dato,W  ; XOR bit a bit
	BANKSEL	_bit_cambiati
	MOVWF	_bit_cambiati
;	.line	36; ******	bit_settati=nuovo_dato&(~vecchio_dato);//bit settati= passati da 0 a 1
	BANKSEL	_vecchio_dato
	COMF	_vecchio_dato,W
	BANKSEL	r0x1014
	MOVWF	r0x1014
	BANKSEL	_nuovo_dato
	ANDWF	_nuovo_dato,W
	BANKSEL	_bit_settati
	MOVWF	_bit_settati
;	.line	37; ******	if((bit_settati&0b00010000)==0b00010000)//settato bit 4 = FTA0 0->1 
	MOVLW	0x10
	ANDWF	_bit_settati,W
	BANKSEL	r0x1014
	MOVWF	r0x1014
	XORLW	0x10
	BTFSS	STATUS,2
	GOTO	_00109_DS_
;	.line	38; ******	contatick++;
	BANKSEL	_contatick
	INCF	_contatick,F
	BTFSC	STATUS,2
	INCF	(_contatick + 1),F
_00109_DS_
	BANKSEL	___sdcc_saved_fsr
	MOVF	___sdcc_saved_fsr,W
	MOVWF	FSR
	MOVF	PSAVE,W
	MOVWF	PCLATH
	CLRF	STATUS
	SWAPF	SSAVE,W
	MOVWF	STATUS
	SWAPF	WSAVE,F
	SWAPF	WSAVE,W
END_OF_INTERRUPT
	RETFIE	

