        title " Hogeschool van Utrecht Opdracht week "
	subtitle " titel van het programma "
        

; 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

a_hoofdweg1	equ	5	;aantal voertuigen per cyclus door groen op hoofdweg1
a_hoofdweg2	equ	5	;aantal voertuigen per cyclus door groen op hoofdweg2
a_voetgangers	equ	5	;aantal voertuigen per cyclus door groen bij voetgangers

; 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

init            
                call hoofdweg1groen
scanhoofdweg1_init
                movlw   a_hoofdweg1
                movwf   0fh
scanhoofdweg1
                btfsc   port_a,0        ;als er een voertuig aankomt op hoofdweg 1
                call    hoofdweg1groen
                decfsz  0fh, f
                goto	scanhoofdweg1
scanhoofdweg2_init	                
                movlw   a_hoofdweg2
                movwf   0fh
scanhoofdweg2
		btfsc   port_a,1        ;als er een voertuig aankomt op hoofdweg 2
		call    hoofdweg2groen
                decfsz  0fh, f          ;laat maximaal aantal toe
		goto	scanhoofdweg2
scanvoetganger_init
		movlw	a_voetgangers
                movwf   0fh
scanvoetganger
                btfsc   port_a,2        ;als een voetganger op knop drukt
                call    voetgangersgroen
                decfsz  0fh, f
		goto	scanvoetganger
		goto scanhoofdweg1_init


		
hoofdweg1groen
                bcf     port_b,1        ;hoofdweg 2 op rood
                bcf     port_b,2        ;voetgangerslicht op rood
                call    wacht1          ;vertraging voor hoofdweg 1 op groen
                bsf     port_b,0        ;hoofdweg 1 op groen
                call    wacht2
                return


hoofdweg2groen
                bcf     port_b,0        ;hoofdweg 1 op rood
                bcf     port_b,2        ;voetgangerslicht op rood
                call    wacht1          ;vertraging voor hoofdweg 2 op groen
		bsf     port_b,1        ;hoofdweg 2 op groen
                call    wacht2
                return

voetgangersgroen
                bcf     port_b,0        ;hoofdweg 1 op rood
                bcf     port_b,1        ;hoofdweg 2 op rood
                call    wacht1           ;vertraging voor voetgangerslicht op groen
                bsf     port_b,2        ;voetgangerslicht 1 op groen
                call    wacht2
                return

wacht1
                movlw   0fh            ;zet 00fh in locatie 0ch
                movwf   0ch 
loop3
                movlw   0ffh
                movwf   0dh              ;zet 0ffh in locatie 0dh
loop2
                movlw   0ffh
                movwf   0eh              ;zet 0ffh in locatie 0eh
loop1
                decfsz  0eh, f           ;telt tot getal in locatie 0eh 0 is.
                goto    loop1
                decfsz  0dh,f            ;trekt 1 van locatie 0d af en  
                goto    loop2		;springt vervolgens naar loop2
                decfsz  0ch, f           ;trekt 1 van locatie 0c af en springt vervolgens naar loop3
                goto    loop3
                retlw   0h		;gaat terug naar aangevraagde
		
wacht2
                movlw   11h            ;zet 00fh in locatie 0ch
                movwf   0ch 
loop3_
                movlw   0eeh
                movwf   0dh              ;zet 0ffh in locatie 0dh
loop2_
                movlw   0ffh
                movwf   0eh              ;zet 0ffh in locatie 0eh
loop1_
                decfsz  0eh, f           ;telt tot getal in locatie 0eh 0 is.
                goto    loop1_
                decfsz  0dh,f            ;trekt 1 van locatie 0d af en  
                goto    loop2_           ;springt vervolgens naar loop2
                decfsz  0ch, f           ;trekt 1 van locatie 0c af en springt vervolgens naar loop3
                goto    loop3_
                retlw   0h		;gaat terug naar aangevraagde


;wacht1
;                movlw   0ffh
;                movwf   0ch
;loop1
;                decfsz  0ch, f
;                goto    loop1
;                return
;
;                
;

		end
