PROGRAM E ;************************************ ; written by : John Morton * ; date : 26/07/97 * ; version : 1.0 * ; file saved as : Traffic * ; for PIC16F54 * ; clock frequency : 2.4576 MHz * ;************************************ ; PROGRAM FUNCTION : A pedestrian traffic lights junction is simulated. list P=16F54 include "c:\pic\p16f5x.inc" __config _XT_OSC & _WDT_OFF & _CP_OFF ;============ ; Declarations : porta equ 05 portb equ 06 Mark240 equ 08 PostX equ 09 Counter8 equ 0A org 1FFh goto Start org 0 ;================= ; Subroutines: Init clrf porta ; resets inputs and outputs clrf portb ; movlw bÕ0001Õ ; RA0: push button, RA1-3: N/C tris porta ; movlw 0 ; RB0-2: Motor. red, amber green tris portb ; RB4, 5: Pedes. red, green. movlw bÕ00000111Õ ; sets up timing register option ; retlw 0 ; TimeDelay movwf PostX ; sets up variable postscaler movlw dÕ240Õ ; sets up fixed marker movwf Mark240 ; TimeLoop movfw Mark240 ; waits for TMR0 to count up subwf TMR0, w ; 240 times btfss STATUS, Z ; goto TimeLoop ; hasnÕt, so keeps looping movlw dÕ240Õ ; resets Mark240 addwf Mark240, f ; decfsz PostX, f ; does this X times goto TimeLoop ; retlw ; returns after required time ;============== ; Program Start: Start call Init ; Main movlw bÕ00010100Õ ; motorists: green on, others off movwf portb ; pedestrians: red on, others off ButtonLoop btfss porta, 0 ; is the pedestriansÕ button pressed? goto ButtonLoop ; no, so loops back bsf portb, 1 ; motorists: amber onÉ bcf portb, 2 ; Éand green off movlw dÕ20Õ ; sends message of 2 seconds to sub call TimeDelay ; creates delay of required time movlw bÕ00100001Õ ; motorists: red on, amber off movwf portb ; pedestrians: green on, red off movlw dÕ80Õ ; sends message of 8 seconds to sub call TimeDelay ; creates delay of required time bsf portb, 1 ; motorists: amber onÉ bcf portb, 0 ; Éand red off movlw dÕ8Õ ; sets up Counter8 with an initial movwf Counter8 ; value of 8 FlashLoop movlw dÕ5Õ ; sends message of 0.5 seconds to sub call TimeDelay ; creates delay of required time movlw bÕ00100010Õ ; toggles the states of the lights xorwf portb, f ; decfsz Counter8, f ; runs through this loop 8 times goto FlashLoop ; goto Main ; loops back to start END