;******************************************************** ;* - Pic Microprojekt - * ;* * ;* PROJEKT ANSVARLIGE: Henrik Nøhr * ;* NAVN: Lysdiode opsætning * ;* TITEL: PIC16F84 * ;* CLOCK: 4 MHz * ;* FILE: diode3.asm * ;* WATCHDOGTIMER: no * ;* * ;* Tænder 8 dioder efter hinanden, afhængig af om en * ;* knap er trykket ind. * ;* * ;******************************************************** ;******************************************************** ;* CHIP OPTIONS * ;******************************************************** _CP_OFF equ H'3FFF' ;code protect off _PWRTE_ON equ H'3FFF' ;Power on timer on _WDT_OFF equ H'3FFB' ;watch dog timer off _XT_OSC equ H'3FFD' ;crystal oscillator __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;configure programmer directive ;******************************************************** ;* EQUATES * ;******************************************************** w equ 0 ; register destination numbers. f equ 1 status equ 03 porta equ 05 ;input portb equ 06 trisa equ 85h ;bank1 trisb equ 86h ;bank1 cycle equ 00 ;antal gentagelser for delay temp equ 20h ;mem register til delay loop temp1 equ 21h ;loop delay pa0 equ 05 ;page select bit COUNT1 equ 14h COUNT2 equ 15h COUNT3 equ 16h #define opsw1 porta,0 ;Optical switch 1 (register the tallest packages) #define opsw2 porta,1 ;Optical switch 2 (register the packages of middle height) #define onoff porta,2 ;On/Off button #define push1 portb,0 ;Push tall packet off belt #define push2 portb,1 ;push medium packat off belt #define belt portb,2 ;start/Stop belt list p=16F84 page1 macro bsf status,pa0 ;set up page 1 endm page0 macro bcf status,pa0 ;set up page0 endm org 00h ;angiver start adresse ;******************************************************** ;* Initialisering * ;******************************************************** init movlw 1 tris porta ; set porta as inputs clrf portb ;port b (B'00000000') page1 clrf trisb ;port b output page0 ;******************************************************** ;* Selve programmet * ;******************************************************** turnoff clrf portb goto onoffsw onoffsw btfss onoff goto turnoff goto runloop runloop btfss onoff goto onoffsw bsf belt btfss opsw1 call pushc1 btfss opsw2 call pushc2 goto runloop pushc1 clrf portb bsf push1 movlw 0x46 ; call delay ;Cald enough times for the pusher to push the packages off... bcf push1 ; call delay ;Cald enough times for the pusher to get back in position. RETURN pushc2 clrf portb bsf push2 movlw 0x46 ; call delay ;Cald enough times for the pusher to push the packages off... bcf push2 ; call delay ;Cald enough times for the pusher to get back in position. RETURN ;******************************************************** ;* Delay * ;******************************************************** delay ;delay et sekund movwf 15h movwf 16h movwf 14h decfsz COUNT1,1 goto $-1 decfsz COUNT2,1 goto $-4 movwf 15h decfsz COUNT3,1 goto $-7 RETURN END