; ARCHIVO GustavoGM.ASM
; CODIGO FUENTE PARA EL MICROCONTROLADOR PIC16F84 

; ALUMNO: Gustavo Gomez Macias
; ASIGNATURA: Microcomputadoras

;////////////////////////////////////////////////////////////////////////////////////////
; Ejercicio No 2
; Leer los microswitches. Si A1=1, encender los leds en el orden B0, B2, B4 y B6
; Si A1=0, encender los leds en el orden B1, B3, B5, B7. con un Retraso 
; de 200ms Repetir rutina. Para este ejemplo el restraso se eligio mayor
; para que se aprecie el orden de encendido de los leds.
;////////////////////////////////////////////////////////////////////////////////////////

; CPU configuration
; 	(It's a 16F84, XT OSCILADOR
; 	watchdog timer off, power-up timer on)

	processor 16f84
	include	  <p16f84.inc>
	__config  _XT_OSC & _WDT_OFF & _PWRTE_ON

J	equ	H'20'	  ; constantes de subrutina retro
K	equ	H'21'	  ; constantes de subrutina retro

		org 0               	; se establece el origen 
	
		bsf STATUS, RP0			; se trabaja en el banco 1
		movlw H'03'				; se guarda el valor H'02' en w  (00000010)
		movwf TRISA				; movemos el contenido de w a TRISA con lo cual
								; se configura A1 como una entrada.
		
		movlw H'00'				; se guarda el valor H'00' en w  (00000000)
		movwf TRISB				; movemos el contenido de w a TRISB con lo cual
								; se configuran los leds B0 -> B7 como salidas.
		
		bcf STATUS, RP0			; se cambia al banco 0
		
watch: 	btfsc PORTA, 1			; Se evalua: si el bit 1 de PORTA es igual a cero 
		goto rut1				; entonces salta a rut0, pero si el bit uno de PORTA
		goto rut0				; es igual a uno entonces ve a rut1.

rut0:	bcf PORTB, 0			; apaga el led B0
		bcf PORTB, 2			; apaga el led B2
		bcf PORTB, 4			; apaga el led B4
		bcf PORTB, 6			; apaga el led B6

		bsf PORTB, 1			; enciende el led B1
		call retro				; llamada a retro
		bsf PORTB, 3			; enciende el led B3
		call retro				; llamada a retro
		bsf PORTB, 5			; enciende el led B5
		call retro				; llamada a retro
		bsf PORTB, 7			; enciende el led B7
		call retro				; llamada a retro

		bcf PORTB, 1			; apaga el led B1
		bcf PORTB, 3			; apaga el led B3
		bcf PORTB, 5			; apaga el led B5
		bcf PORTB, 7			; apaga el led B7
		call retro				; llamada a retro
		goto watch				; salta a watch

rut1:	
		bcf PORTB, 1			; apaga led B1
		bcf PORTB, 3			; apaga led B3
		bcf PORTB, 5			; apaga led B5
		bcf PORTB, 7			; apaga led B7
		bsf PORTB, 0			; enciende led B0
		call retro				; llamada a retro
		bsf PORTB, 2			; enciende led B2
		call retro				; llamada a retro
		bsf PORTB, 4			; enciende led B4
		call retro				; llamada a retro
		bsf PORTB, 6			; enciende led B6
		call retro				; llamda a retro
		bcf PORTB, 0			; apaga led B0
		bcf PORTB, 2			; apaga led B2
		bcf PORTB, 4			; apaga led B4
		bcf PORTB, 6			; apaga led B6
		call retro				; llamada a retro
		goto watch				; salta a watch



retro:		movlw	D'2000'	; w := 200 decimal
			movwf	J	; J := w
jloop:		movwf	K	; K := w
kloop:		decfsz	K,f	; K = K-1, skip next if zero
			goto 	kloop
			decfsz	J,f	; J = J-1, skip next if zero
			goto	jloop
			return


end
