; *** Lauflicht 1.0 (c) Oliver Mezger 4.3.2010

.include "2313def.inc"

.def tmp = R16      ;Temporaeres Register
.def innen = R20    ;Hilfsregister fuer Warteschleife
.def aussen = R21   ;Hilfsregister fuer Warteschleife
.def wtmp = R22     ;Hilfsregister fuer Warteschleife

.equ clk = 4    ;CPU-Takt in MHz

reset:
  ldi tmp, low(RAMEND)  ;Stackpointer initialisieren
  out SPL,tmp
  ldi tmp,0b11111110    ;LED0 an
  out PORTB,tmp     
  ldi tmp, 0xff         ;PB auf Ausgang
  out DDRB,tmp
loop:
  in tmp,PORTB      ;laden von PORTB
  lsl tmp           ;eine Stelle nach Links
  inc tmp           ;addiere 1
  cpi tmp,$FF       ;vergleiche mit 0b11111111
  brne weiter       ;wenn noch LED an, dann weiter
  ldi tmp,$FE       ;sonst LED0 an
weiter:
  out PORTB,tmp     ;ausgeben PORTB
  rcall warte100ms  ;Unterprogrammaufruf warten
  rjmp loop

warte100ms:         ;Unterprogramm 100ms Warten
  ldi wtmp, 10
w50loop:
  rcall warte10ms
  dec wtmp
  brne w50loop
  ret

warte10ms:          ;Unterprogramm 10ms Warten
  ldi aussen,clk*10 ;anpassen an CPU-Takt
loop_aussen:
  ldi innen,250
loop_innen:
  nop
  dec innen
  brne loop_innen
  dec aussen
  brne loop_aussen
  ret