/* Problema 29: Se quiere controlar el acceso a una sala con capacidad para 500 personas. La salaposee dos puertas de acceso, una de entrada y otra de salida. En cada puerta se hasituado un sensor que genera un pulso de nivel alto mientras que alguien pasa por lapuerta. Cuando la sala está llena, la puerta de entrada debe cerrarse, y para ello se debeactivar en alto una señal de control. Una vez esté llena la sala, si se detecta que salealguien de la sala, se debe volver a abrir la puerta de entrada poniendo a cero la señal decontrol. Se pide realizar el control mediante el ATmega328P. Para ello: •Se conectan los sensores de detección de paso por las puertas a los pines PB0 yPB1 del puerto B. Los sensores están a 0 en condiciones normales y generan un 1durante el tiempo que la persona está atravesando la puerta correspondiente. •Se conecta un pulsador a PC0 que permitirá inicializar el sistema al principio,poniendo la cuenta de personas a 0. La pulsación corresponde a valor cero y no sedispone de resistencia de pull-up externa. •El pin PD0 controlará un diodo LED que ha de iluminarse cuando la sala estécompleta y el pin PD1 enviará la señal de control de apertura/cierre de la puerta deentrada. Se pide: a)   Diseñar   una   subrutina   de   Entrada/Salida   que   permita   configurar   los   puertosadecuadamente según la función que ha sido descrita en el párrafo anterior. b) Realice el programa principal que además de llamar a la subrutina de Entrada/Salidadiseñada en el apartado a), deberá encargarse de preguntar por el estado de pulsador para poner en marcha el sistema, borrando el contador del número de personas yabriendo  la puerta.  Una  vez realizada  esta  acción, chequeará  de  forma  cíclica  lossensores de la puerta entrada y salida y actuará en consecuencia según el caso. */
.cseg
.def temp=r16
.def contadorl=r24
.def contadorh=r25
.equ MAXPERSONAS=500
Main:	rcall ConfiguraES
Bucle:	sbic pinc,0 ; bucle de espera de puesta en marcha del sistema
	rjmp Bucle
	clr contadorl
	clr contadorh
Entrada: sbis pinb,0
	rjmp Salida
	cpi contadorh, high (MAXPERSONAS)
	brne IncCont
	cpi contadorl, low(MAXPERSONAS)
	breq SalaLlena ;si se alcanza el número máximo de personas en la sala
IncCont:addiw contadorl,1
Salida: sbis pinb,1
	rjmp EstadoSala
	cpi contadorh,0
	brne CompruebaPuerta
	cpi contadorl,0
	breq Entrada
CompruebaPuerta: sbic pind,1
		rjmp AbrirPuerta
DecCont: 	sbiw contadorl,1
		rjmp Entrada
SalaLlena: 	sbi portd,1 ;led encendido
		sbi portd,0 ; cierre de puerta
		rjmp Salida
EstadoSala: 	sbis pind,1 ; Comprueba si el led esta encendido para ver si está la sala llena
		rjmp Entrada ;si no lo está va a entrada
		rjmp Salida ; si lo esta sigue en espera de que alguien salga
AbrirPuerta: 	cbi portd,0
		cbi portd,1
		rjmp DecCont