;********************************************************************
; Filename:     KnightRider.asm
;********************************************************************
; Author:       Mickey5
; Company:      Private
; Version:      1.0
; Date:         2009-01-03
; Assembled:    MPLAB 8.10.00.00
;********************************************************************

; Változók és egyebek beállítása
; ==============================
#include <p16F690.inc>
     __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

    cblock   0x20
Kesleltet1                  ; Változó a belső ciklushoz.
Kesleltet2                  ; Változó a külső ciklushoz.
Kijelzes                    ; Változó a kijelzéshez.
Direction                   ; Változó az irányhoz.
    endc

; Itt indul a program     
;====================
    org 0
Start:
    bsf      STATUS,RP0     ; Register Page 1 kiválasztása.
    clrf     TRISC          ; PORTC összes lába kimenet.
    bcf      STATUS,RP0     ; Register Page 0 kiválasztása.
Inicializal:
    movlw    0x02           ; Kezdőérték a W regiszterbe.
    movwf    Kijelzes       ; W regiszter a Kijelzes-be.
    clrf     Direction      ; Törli a Direction-t.
Fociklus:
    movf     Kijelzes,w     ; Kijelzés a W regiszterbe.
    movwf    PORTC          ; W regiszter a PORTC-re.
Bekapcsolva:
    decfsz   Kesleltet1,f   ; Csökkenti a számláló értékét.
    goto     Bekapcsolva    ; Belső ciklus: 3*256=768 utasítás.
    decfsz   Kesleltet2,f   ; A külső ciklus hozzáad még 3 utasítást.
    goto     Bekapcsolva    ; (768+3)*256=197376 utasítás/1M utasítás
                            ; másodpercenként, azaz 0,197 sec (0,2 mp).
Rotate:
    bcf      STATUS,C       ; Töröljük a Carry bitet.
    btfss    Direction,0    ; Ellenőrzi a Direction(0) tartalmát.
    goto     RotateLeft     ; Ha Direction(0)=0, RotateLeft-re ugrik.
RotateRight:
    rrf      Kijelzes,f     ; Jobbra rotál a Carry-n át.
    btfsc    STATUS,C       ; Átfordult a bit a Carry-be?
    goto     Inicializal    ; Ha igen, Inicializal-ra ugrik.
    goto     Fociklus
RotateLeft:
    movlw    0xFF           ; "00001111" a W regiszterbe.
    rlf      Kijelzes,f     ; Balra rotál a Carry-n át.
    btfsc    Kijelzes,3     ; Véget ért a kijelző forgatása?
    xorwf    Direction,f    ; Átváltja a forgás irányát.
    goto     Fociklus

    end
