;
;					ESEMPIO 2.7
;
;				Autore: Mikel Etxebarria
;			(c) Microsystems Engineering (Bilbao)
;
;Esempio per simulazione e/o MicroPIC Trainer
;
;Macchina di inscatolamento
;
;Due relés "M1" (RB0) e "M2" (RB1) comandano due motori che trascinano due nastri 
;trasportatori. "M1" (RB0) trasporta pezzi e "M2" (RB1) imballaggi. Un sensore "DP" (RA1) 
;rileva il passaggio di pezzi e, l'altro "DE" (RA2), rileva il corretto posizionamento di un 
;contenitore. Rilevando il passaggio di 10 pezzi, il contenitore è considerato pieno, si attiva un 
;segnale acustico "A" (RB2) e, il nastro che trasporta imballaggi, si sposta fino a collocare un 
;nuovo contenitore vuoto. In questo momento si disattiva il segnale acustico "A"(RB2) e nuovamente 
;avanza il nastro di pezzi ripetendo così il ciclo. Un interruttore "I" (RA0) attiva o 
;no tutto il sistema.
	
		List	p=16F84		;Tipo di processore
		include	"P16F84.INC"	;Definizioni di registri interni

Conta_pezzo	equ	0x0c		;Variabile di Nº di pezzi
                    
		org	0x00		;Vettore di Reset
		goto	Inizio

		org	0x05		;Salva il vettore di interrupt

Inizio	        clrf 	PORTB		;Cancella i latch di uscita
		bsf	STATUS,RP0	;Seleziona banco 1
		clrf	TRISB		;Porta B si configura come uscita
		movlw	b'00011111'		
		movwf	TRISA		;Porta A si configura come entrata
		bcf	STATUS,RP0	;Seleziona banco 0			                                                                         

Loop_0		clrf	PORTB		;Disconnetti le uscite					
Loop:		clrwdt			;Aggiornare il WDT
		movlw	d'10'
		movwf	Conta_pezzo	;Introduci variabile con Nº di pezzi
		btfss	PORTA,0		;Controlla lo stato dell'interruttore I
		goto	Loop_0		;E' in OFF, sistema 
arrestato				

		bcf	PORTB,0		;Avanzamento di pezzi in OFF
		bsf	PORTB,1		;Avanzamento di contenitori in ON
										
No_conten	clrwdt			;Aggiorna il WDT
		btfss	PORTA,2		;Contenitore in posizione ??
		goto	No_conten	;No.					

		bsf	PORTB,0		;Sì. Avanzamento di pezzi in ON
		bcf	PORTB,1		;Avanzamento di contenitori in OFF
		bcf	PORTB,2		;Segnale acustico in OFF 
					
;Questa sequenza di istruzioni, attende il passaggio completo di un pezzo 
;attraverso il sensore "DP" 

Pezzo_0		clrwdt			;Aggiorna il WDT
		btfss	PORTA,1		;Arriva il pezzo ??
		goto	Pezzo_0		;Ancora no

Pezzo_1		clrwdt			;Adesso sì. Aggiorna il WDT
		btfsc	PORTA,1		;E' passato il pezzo di fronte al sensore "DP" ??
		goto	Pezzo_1		;Ancora no					

		decfsz	Conta_pezzo,F	;Adesso sì. Diminuisci contatore di pezzi

		goto	Pezzo_0		;Aspettare il passaggio di un nuovo pezzo					

		bcf	PORTB,0		;Ne sono passati 10, avanzamento di pezzi in OFF
		bsf	PORTB,1		;Avanzamento di contenitori in ON
		bsf	PORTB,2		;Segnale acustico in ON					

Si_conten	clrwdt			;Aggiorna il WDT
		btfsc	PORTA,2		;Lo stesso conternitore è ancora posizionato ??
		goto	Si_conten	;Ancora sì
					
		goto	Loop		;Adesso no

		end			;Fine del programma principale
