;******************************************************
;   Programma di prova     Alterna 1 e 0 sul primo bit di PORTB ogni 100ms		
;******************************************************

	#include "P16F84A.inc"   		;include le definizioni del PIC16F84A  per l'assemblatore (MPASM)
	errorlevel	-302			; will prevent assembler's warning message 302

;direttive
    	PROCESSOR	16F84A			;indica il tipo di processore
    	RADIX		HEX			;dove non indicato i valori sono HEX
	ORG     0x0c				;assembla a partire dalla  locazione della memoria istruzioni

;definizioni
R1	EQU		0x0c			;definisce la variabile R1
R2	EQU		0x0d			;definisce la variabile R2
R3	EQU		0x0e			;definisce la variabile R3

;inizio programma
	bsf		STATUS,5		;selezione banco RAM 1
	movlw		0x00			;imposta tutte le linee
	movwf		TRISB			;della PORTA B come output
	bcf		STATUS,5		;selezione banco RAM 0
		
loop:
	bsf		PORTB,0			;imposta a 1 il primo bit di PORTB
	call		wait			;attesa
	bcf		PORTB,0			;imposta a 0 il primo bit di PORTB
	call		wait			;attesa
	goto 		loop			;ritorna a loop:

wait:						;routine di attesa (circa 100ms)
	movlw		0xBE			;carica nel registro w il valore BE (HEX)
	movwf		R1			;copia il valore di w nella variabile R1

longloop1:
	movlw		0xBE			;carica nel registro w il valore BE (HEX)
	movwf		R2			;copia il valore di w nella variabile R2

longloop2:
	decfsz		R2,1			;viene decrementata di 1 la variabile R2
	goto		longloop2		;fino a chè R2 non diventa 0
	decfsz		R1,1			;viene decrementata di 1 la variabile R1
	goto		longloop1		;fino a chè R1 non diventa 0
	return

	END					;fine del programma
