#INCLUDE <P16F628A.INC>
__CONFIG 3F10
#define LED1 portb,2 ; defino un led en el pin 2
#define LED2 portb,1 ; defino un led en el pin 1
#define BANK1 bsf status,RP0 ; instruccion para ir al banco 1
#define BANK0 bcf status,RP0 ; instruccion para ir al banco 0
AUXW equ 0x20
AUXSTATUS equ 0x21
ORG 0x00
goto inicio
;----------------------------------------
;Programo la interrupción ENCENDIDO:
ORG 0x04
bcf INTCON, GIE ; inhabilito las interrupciones globales
bcf INTCON, INTF ; bajo el flag de la interrupción
movwf AUXW ; guardo el valor de w en un registro auxiliar
movf STATUS,w
movwf AUXSTATUS ; guardo el valor del STATUS en un registro auxiliar
movf AUXSTATUS,w ; regreso el valor del STATUS
movwf STATUS
movf AUXW,w ; regreso el valor de w
bsf LED1 ; prender el LED 1
bsf LED2 ; prender el LED 2
BSF INTCON, GIE ; habilito nuevamente las interrupciones
retfie
;----------------------------------------
;Programo la interrupción APAGADO:
; ORG 0x05
; bcf INTCON, GIE ; inhabilito las interrupciones globales
; bcf INTCON, INTF ; bajo el flag de la interrupción
;
; movwf AUXW ; guardo el valor de w en un registro auxiliar
; movf STATUS,w
; movwf AUXSTATUS ; guardo el valor del STATUS en un registro auxiliar
; movf AUXSTATUS,w ; regreso el valor del STATUS
; movwf STATUS
; movf AUXW,w ; regreso el valor de w
;
; bcf LED1 ; apago el LED 1
; bcf LED2 ; apago el LED 2
; BSF INTCON, GIE ; habilito nuevamente las interrupciones
; retfie
;----------------------------------------
;Programa principal:
Inicio
bsf INTCON,GIE ; habilito las interrupciones globales
bsf INTCON,INTE ; habilito la interrupción por RB0
BANK1 ; selección del banco 1
BCF OPTION_REG, NOT_RBPU ; habilito el pulsador en RB0
MOVLW b'00000001'
MOVWF TRISB ; pongo el RB0 como entrada
BANK0 ; selección de banco 0
CLRF PORTB ; apago los leds
goto $
end
;espera_encendido1;-------------------
; btfsc PORTB, 0
; goto espera_encendido1
; call demora_250ms
; btfsc PORTB, 0
; goto espera_encendido1
; bsf PORTB, 2
; return
;espera_encendido2;------------------
; btfsc PORTB, 0
; goto espera_encendido2
; call demora_250ms
; btfsc PORTB, 0
; goto espera_encendido2
; bsf PORTB, 1
; return
;------------------------------------
;espera_apagado1;--------------------
; btfsc PORTB, 0
; goto espera_apagado1
; call demora_250ms
; btfsc PORTB, 0
; goto espera_apagado1
; bcf PORTB, 2
; return
;espera_apagado2;--------------------
; btfsc PORTB, 0
; goto espera_apagado2
; call demora_250ms
; btfsc PORTB, 0
; goto espera_apagado2
; bcf PORTB, 1
; return
;------------------------------------
;--------------RETARDOS--------------
;delay_1ms
; movlw .250
; movwf cont
;loop1 nop
; decfsz cont,f
; goto loop1
; return
;demora_20ms;-----------------------
; movlw .20
; movwf cont1
;loop2 call delay_1ms
; decfsz cont1,f
; goto loop2
; return
;demora_250ms;----------------------
; movlw .250
; movwf cont2
;loop3 call delay_1ms
; decfsz cont2,f
; goto loop3
; return
;------------------------------------