

.include "m328pdef.inc"

		.def	temporal=r16
		.def contador=r17
		
		
		.cseg

		.org	0
		jmp		Reset
		.org	$16	
		jmp		IntTimer1 ; instalacin de la rutina de interrupcin

Reset:	rcall	configura_ES
Compara:   cpi contador,10
		breq Tope
		rjmp Compara
Tope:      call Representa
		rjmp Compara

Representa: in temporal, pinb
		out portb,temporal
		ret








/* La rutina de ES debe configurar el puerto B como entrada y el  como salida

Configuracin del timer

RUTINA CONF_TIMER
		FCLK=1MHz ->  Tclk = 1 micros

		Registros usados:
		-OCCR1AH, OCCR1AL
		-TCCRIB
			-----------------------------------------------------
			| 0  |  0  |  0  |  0  | WGM12 | CS12 | CS11 | CS10 |
			-----------------------------------------------------
				WGM12 =>  1: Modo CTC ; 0: Modo Normal
				CS12:0 => Seleccin del Prescaler
						   --------------------------------
						   | 0  0  0  |  Parada	          |
						   | 0  0  1  |  clk	          |
						   | 0  1  0  |  clk/8            |
						   | 0  1  1  |  clk/64           |
						   | 1  0  0  |  clk/256          |
						   | 1  0  1  |  clk/1024         |
						   | 1  1  0  |  T1 flanco bajada |
						   | 1  1  1  |  T1 flanco subida |
						   --------------------------------
Generar interrupciones cada 10sg no es posible o no cabe en 16 its o no se genera un valor entero		
			   cs2:0	OCR1A		COMENTARIO
 			 ------------------------------------------
			 | 0  0  1  | 10000000  |   No es posible |
			 | 0  1  0  |  1250000  |   No es posible | 
			 | 0  1  1  | 	156.250 	|   No es posible |
			 | 1  0  0  |  	39.062,5|   Inexacto 
			 | 1  0  1  |    9.765,625|   Inexacto			 ------------------------------------------
Se solucionar generando interupciones cada segundo y utilizando un contador que cuente hasta 10.
Se escoge elpreescaler a 64 que da un valor de 15. 625 que cabe en 16 bits.
		- TCNT1H,TCNT1L
		- TIMSK1
			----------------------------------------------------------
			| -  |  -  |  0  |  -  |  -  |  -  |  0  | OCIE1 | TOIE1 |
			----------------------------------------------------------	
				OCIE1: Output compare interrupt enable
						0: Disable
						1: Enable
				TOIE1: Timer overflow interrupt enable
						0: Disable
						1: Enable


*/

configura_ES:
		clr   temporal
		out   ddrb,temporal  ;Configura PB como entradas
		ldi temporal, $ff
		out   ddrc, temporal ;Configura PC como salida 
				 
/* Configuración del timer*/

		ldi		temporal, $3d
		sts		ocr1ah,temporal
		ldi		temporal, $09
		sts		ocr1al,temporal		;	OCR1A <- $3d09=15625

		ldi		temporal, 0b00001101 ; PPrescaler a 64 y modo CTC
		sts		tccr1b,temporal		; 	TCCR1B <- $d

		ldi		temporal,0			;
		sts		tcnt1h,temporal
		sts		tcnt1l,temporal		;	TCNT1 <- 0


		ldi		temporal,2			;
		sts		timsk1,temporal		; TIMSK1<-2
		sei
		ret	

/* Rutina de Interrupción
incrementa conadorada segundo con tope de 10
*/

IntTimer1:	cpi contador, 10
		brl0 Incrementa
		ldi contador,1
		reti
Incrementa: inc contador
		reti						
		
