;
;KNIGHT RIDER THINGY
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIST P=PIC12F629
include "P12F629.inc"
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
CBLOCK 0x20
SUBCOUNT
COUNT
LEDPORT
ENDC
PROGSTART
ORG 0x0000
SETUP_OSC
DELAYTIME EQU D'100'
bsf STATUS, RP0 ;Bank 1
call 3FFh ;Get the cal value
movwf OSCCAL ;Calibrate
bcf STATUS, RP0 ;Bank 0
SETUP
BSF STATUS,RP0 ;CHANGE TO BANK1
MOVLW 0x00 ;SET W REGISTER
MOVWF TRISIO ;SET ALL PORTS TO OUTPUT
BCF STATUS,RP0 ;CHANGE TO BANK0
CLRF GPIO ;CLEAR GPIO REG
MOVLW B'111' ;DISABLE
MOVWF CMCON ;COMPARATOR
START
MOVLW 0x01 ;TURN first port
MOVWF LEDPORT ;SET LEDPORT
CALL SYNCGPIO ;MOVE LEDPORT INTO GPIO
MOVLW DELAYTIME ;LOAD DELAY TIME INTO W
CALL DELAY ;CALL THE DELAY ROUTINE
GOTO MOVELEFT ;START MOVING BITS (LEDS) LEFT
SYNCGPIO
MOVFW LEDPORT ;COPY LEDPORT BITS
MOVWF GPIO ;INTO THE GPIO REGISTER
RETURN
MOVELEFT
RLF LEDPORT, F ;SHIFT BIT LEFT(I.E LED)
;CHECK IF NEXT PORT IS GP3
BTFSC LEDPORT, GP3;SKIP NEXT LINE IF ZERO
RLF LEDPORT,F ;SKIP THIS PORT(GP3) SHIFT BIT LEFT(I.E LED)
CALL SYNCGPIO ;MOVE LEDPORT INTO GPIO
MOVLW DELAYTIME ;SET DELAY TIME
CALL DELAY
BTFSC LEDPORT, 5 ;CHECK IF WE ARE AT THE LEFTMOST POSITION
GOTO MOVERIGHT ;IF WE ARE AT LEFTMOST POS START MOVING RIGHT AGAIN
GOTO MOVELEFT ;MOVE LED LEFT AGAIN
MOVERIGHT
RRF LEDPORT, F ;SHIFT BIT RIGHT(I.E LED)
;CHECK IF NEXT PORT IS GP3
BTFSC LEDPORT, GP3;SKIP NEXT LINE IF ZERO
RRF LEDPORT,F ;SKIP THIS PORT(GP3) SHIFT BIT RIGHT(I.E LED)
CALL SYNCGPIO ;MOVE LEDPORT INTO GPIO
MOVLW DELAYTIME ;SET DELAY TIME
CALL DELAY
BTFSC LEDPORT,GP0 ;CHECK IF WE ARE AT RIGHTMOST POSITION.
GOTO START ;GO BACK TO THE BEGINNING
GOTO MOVERIGHT ;MOVE LED RIGHT AGAIN
DELAY
MOVWF COUNT ;LOAD VALUE # OF LOOPS FROM W REGISTER
DELAYLOOP
DECFSZ SUBCOUNT
GOTO DELAYLOOP
DECFSZ COUNT
GOTO DELAYLOOP
RETURN
end