        title " Hogeschool van Utrecht PJweek"
        subtitle "Projectweek Autoalarm"
        

; XT Oscillator is used target 4 MHz 
; do not use power up nor watchdog nor code protection !!       

;destinations for file register-byte

indirect        equ     00h                     ;Indirect data adressing
tmr0            equ     01h                     ;counter register
pcl             equ     02h                     ;Program Counter
status          equ     03h                     ;status word register
fsr             equ     04h                     ;File select register
port_a          equ     05h
port_b          equ     06h
tris_a          equ     05h                     ; new value for port a reg
tris_b          equ     06h                     ; new value for port b reg
eedata		equ	08h			; eeprom registers
eeadr		equ	09h
pclatch		equ	0ah			; 
intcon		equ	0bh			; interrupt settings

;bit declarations

w               equ     00h                     ;destination is W-register
f               equ     01h                     ;destination is a File register

input           equ     01h
output          equ     00h


rp0             equ     05h                     ;bank change bit
zero_bit        equ     02h                     ;zero bit in status byte
carry_bit       equ     00h                     ;carry bit in status byte
dc_bit		equ	01h			;digit carry
tf0             equ     02h                     ;timer overflow in intcon
gie             equ     07h


; byte declarations



; reset vector equ 000h jump to out off call

                org     000h
                goto    start

; initialiseren van de poorten

start
	
		clrf	port_a			; clear init byte port_a
                clrf    port_b                  ; clear init byte port_b
                bsf     status,rp0              ; select bank 1
                movlw   B'11111111'             ; 1 = input , 0 = output 
                movwf	tris_a			; set port a in bank 1
                movlw   B'00000000'             ; 1 = input , 0 = output 
                movwf	tris_b			; set port b in bank 1
		bcf     status,rp0		; select bank 0 
   

; start of the programm

main
                bsf     port_b, 4          ;zet power led aan
                bcf     port_b, 5          ;zet active led uit
;--------------------------------------------------------------------------
;loop1          Hierna volg de ruststandloop
;--------------------------------------------------------------------------

loop1                                             ; your coding comes here
                btfsc   port_a, 3          ;checkt of sleutel geactactiveerd wordt
                goto    loop1              ;zo nee terug naar loop1
                call    delay_jp          ;zo ja wacht voor uitstappen en ga naar
                                           ;    alert
;--------------------------------------------------------------------------
;alert          Hierna wordt het alarm op scherp gezet
;--------------------------------------------------------------------------

alert
                movlw   0fh            ;zet 00fh in locatie 0ch
                movwf   0ch 
loop4
                movlw   0ffh
                movwf   0dh              ;zet 0ffh in locatie 0dh
loop3
                movlw   0ffh
                movwf   0eh              ;zet 0ffh in locatie 0eh
loop2
                btfsc   port_a, 2       ;chekken of port_a niet hoog wordt
                goto    alarm           ;zo ja alarmeer
                btfsc   port_a, 3       ;check of sleutel nog op actief staat
                goto    main            ;zo nee, ga terug naar ruststand
                decfsz  0eh, f          ;telt tot getal in locatie 0eh 0 is.
                goto    loop2
                decfsz  0dh,f           ;trekt 1 van locatie 0d af en  
                goto    loop3           ;springt vervolgens naar loop2
                decfsz  0ch, f          ;trekt 1 van locatie 0c af en springt vervolgens naar loop3
                goto    loop4
;--------------------------------------------------------------------------
;ledon          Hierna gaat de led aan
;--------------------------------------------------------------------------
                bsf     port_b, 5       ;zet LED aan
                movlw   0fh             ;zet 00fh in locatie 0ch
                movwf   0ch 
loop7
                movlw   0ffh
                movwf   0dh              ;zet 0ffh in locatie 0dh
loop6
                movlw   0ffh
                movwf   0eh              ;zet 0ffh in locatie 0eh
loop5
                btfsc   port_a, 2       ;chekken of port_a niet hoog wordt
                goto    alarm           ;zo ja alarmeer
                btfsc   port_a, 3       ;check of sleutel nog op actief staat
                goto    main            ;zo nee, ga terug naar ruststand
                decfsz  0eh, f          ;telt tot getal in locatie 0eh 0 is.
                goto    loop5
                decfsz  0dh,f           ;trekt 1 van locatie 0d af en  
                goto    loop6           ;springt vervolgens naar loop2
                decfsz  0ch, f          ;trekt 1 van locatie 0c af en springt vervolgens naar loop3
                goto    loop7
;--------------------------------------------------------------------------
;ledoff         Hierna gaat de led weer uit
;--------------------------------------------------------------------------

                bcf     port_b, 5       ;zet LED weer uit
                goto    alert
alarm
                bsf     port_b, 5       ;zet LED continu aan
                call    delay_jp
                btfsc   port_a, 3       ;check of sleutel nog op actief staat
                goto    main            ;zo nee, ga terug naar ruststand
                bsf     port_b, 7
loop8
                call    delay1s         ;wacht 1 seconde
                bsf     port_b, 6
                call    delay1s
                bcf     port_b, 6
                btfss   port_a, 3       ;check of sleutel nog op actief staat
                goto    loop8
                goto    main            ;zo nee, ga terug naar ruststand
                                        ;ga anders terug naar loop8

;--------------------------------------------------------------------------
;delay1s:       deze functie zorgt voor 1s vertraging
;--------------------------------------------------------------------------
delay1s                                 ;Functie voor het wachten van 1s
                movlw   0fh             ;zet 00fh in locatie 0ch
                movwf   0ch 
loop11
                movlw   0ffh
                movwf   0dh              ;zet 0ffh in locatie 0dh
loop10
                movlw   0ffh
                movwf   0eh              ;zet 0ffh in locatie 0eh
loop9
                decfsz  0eh, f           ;telt tot getal in locatie 0eh 0 is.
                goto    loop9
                decfsz  0dh,f            ;trekt 1 van locatie 0d af en  
                goto    loop10           ;springt vervolgens naar loop2
                decfsz  0ch, f           ;trekt 1 van locatie 0c af en springt vervolgens naar loop3
                goto    loop11
                retlw   0h               ;gaat terug naar aangevraagde

;--------------------------------------------------------------------------
;delay_jp      Deze funtie zorgt afhankelijk van jumpersettings (op a0 en a1)
;                       voor 5, 10, 15 of 20 seconden vertraging
;               Jumpersetting:
;               JP1     JP2
;               uit     uit    --->     5 seconden
;               uit     aan    --->     10 seconden
;               aan     uit    --->     15 seconden
;               aan     aan    --->     20 seconden
;
;                          laag=actief
;
; LET WEL: jp1 zit aan a1, jp2 zit aan a0.    (zoals volgens de schakeling)
;--------------------------------------------------------------------------

delay_jp                               ;functie voor instelbare vertraging
                btfsc   port_a, 1       ;check of jp 1 actief is
                goto    a0_             ;ga naar a0_
                goto    a1_             ;ga naar a1_
a0_                                     ;jp 1 is inactief
                btfsc   port_a, 0       ;check of jp 2 actief is
                goto    a00             ;ga naar a00
                goto    a01             ;ga naar a01
a1_                                     ;jp 1 is actief
                btfsc   port_a, 0       ;check of jp 2 actief is
                goto    a10             ;ga naar a00
                goto    a11             ;ga naar a01
a00                                     ;setting laag-laag: 5 s vertraging
                movlw   0ch             ;zet 0ch in W
                goto    movinmem
a01                                     ;setting laag-hoog: 10 s vertraging
                movlw   0dh             ;zet 0dh in W
                goto    movinmem
a10                                     ;setting hoog-laag: 15 s vertraging
                movlw   0eh             ;zet 0eh in W
                goto    movinmem
a11                                     ;setting hoog-hoog: 20 s vertraging
                movlw   0fh             ;zet 0fh in W
                goto    movinmem
movinmem                                ;zet het op de goede geheugenplaats
                movwf   0ch             ;zet het getal van W in 0ch
loop14
                movlw   0ffh
                movwf   0dh              ;zet 0ffh in locatie 0dh
loop13
                movlw   0ffh
                movwf   0eh              ;zet 0ffh in locatie 0eh
loop12
                decfsz  0eh, f           ;telt tot getal in locatie 0eh 0 is.
                goto    loop12
                decfsz  0dh,f            ;trekt 1 van locatie 0d af 
                goto    loop13           ;springt vervolgens naar 
                decfsz  0ch, f           ;trekt 1 van locatie 0c af 
                goto    loop14
                retlw   0h               ;gaat terug naar aangevraagde
                

end



