#include "p12f508.inc"
__CONFIG _MCLRE_OFF & _WDT_OFF &_IntRC_OSC
radix dec
inpin equ 0
outpin equ 1
sec90 equ 10
cnta equ 11
cntb equ 12
cntc equ 13
org 0
start:
movlw 0
option
movlw 255-(1<<outpin)
tris GPIO
main:
btfsc GPIO,inpin ; wait for inpin low
goto main
call delay
btfsc GPIO,inpin ; make sure inpin is actually low
goto main
waitloop90:
bsf GPIO,outpin ; output high
call delay
incf sec90 ; 1 second has passed
btfss GPIO,inpin
clrf sec90 ; reset count if inpin is still low
movfw sec90 ; test for 90 seconds past
xorwf 90
btfss STATUS,Z ; quit after 90 seconds
goto waitloop90 ; otherwise keep going
bcf GPIO,outpin ; reset output
goto main
; delay for a second
delay:
movlw 6
movwf cntc
dloop0:
movlw 216
movwf cntb
dloop1:
clrf cnta
dloop2:
decfsz cnta
goto dloop2
decfsz cntb
goto dloop1
decfsz cntc
goto dloop0
retlw 0
END