;
;					EJEMPLO 2
;
;				Autor: Mikel Etxebarria
;			(c) Microsystems Engineering (Bilbao)
;
;Ejemplo para MicroPIC Trainer
;
;El TMR1 en el modo temporizador
;
;Se desea realizar un contador binario visualizado sobre la Puerta B que, se vaya incremen-
;tando a razón de una unidad cada 0.5 segundos. Para ello contamos con la ayuda de la
;interrupción provocada por el TMR1
		
		List	p=16F873	;Tipo de procesador
		include	"P16F873.INC"	;Definiciones de registros internos


		org	0x00		;Vector de Reset
		goto	Inicio

		org	0x04		;Vector de interrupción

;Programa de tratamiento de interrupción

Inter		movlw	low ~.62500
		movwf	TMR1L
		movlw	high ~.62500
		movwf	TMR1H		;Carga el TMR1 con el complemento de 62500 en hex.
		bcf	PIR1,0		;Desconecta el flag del TMR1
		incf	PORTB,F		;Incrementa el contador de la Puerta B
		retfie

;Programa principal

Inicio	        clrf 	PORTB		;Borra los latch de salida
		bsf	STATUS,RP0	;Selecciona banco 1
		movlw	b'00000110'
		movwf	ADCON1		;Puerta A E/S digitales
		clrf	TRISB		;Puerta B se configura como salida
		movlw	b'00011111'		
		movwf	TRISA		;Puerta A se configura como entrada
		movlw	b'11111111'
		movwf	OPTION_REG	;Preescaler d 128 asociado al WDT
		bsf	PIE1,0		;habilita interrupción del TMR1
		bcf	STATUS,RP0	;Selecciona banco 0

;El TMR1 trabaja con oscilador interno y un preescaler de 1:8. Si se trabaja a una frecuencia
;de 4 MHz, el TMR1 deberá ser cargado con 62500 para que provoque interrupción al de 0.5s

		movlw	b'00110001'
		movwf	T1CON

		movlw	b'11000000'
		movwf	INTCON		;Habilitación global de interrupciones

Loop		clrwdt
		nop
		goto	Loop		;Bucle infinito		

		end			;Fin del programa fuente
