;###Created by Alexander Haas, Alexander Hunt und Tim Weidner
.include "2313def.inc"
.def aussen=R24
.def innen=R25
.def wtmp=R26
.equ clk = 4000
reset:
ldi R16, low(RAMEND)
out SPL,R16 ;Stackpointer initialisieren
ldi R16, 0xEF ;Startpunkt setzen
ldi R17, 0xFF
out PORTB, R16 ;Startpunkt laden
out DDRB, R17 ;PORTB als Ausgang setzen
links:
cpi R16, 0x7F ;Test ob LED ganz links leuchtet
breq rechts
lsl R16 ;LED nach links
inc R16 ;erste LED aus
out PORTB, R16 ;ausgeben
rcall warte100ms ;warten
rjmp links ;Schleife
rechts:
cpi R16, 0xFE ;Test ob LED ganz rechts leuchtet
breq links
lsr R16 ;LED nach rechts
ori R16,0x80 ;letzte LED aus
out PORTB, R16 ;Ausgeben
rcall warte100ms ;
rjmp rechts ;Schleife
warte100ms:
ldi wtmp, 10
w50loop:
rcall warte10ms
dec wtmp
brne w50loop
ret
warte10ms:
ldi aussen,40
loop_aussen:
ldi innen,250
loop_innen:
dec innen
nop
brne loop_innen
dec aussen
brne loop_aussen
ret
|
// *** Knightrider 1.0 (c) Oliver Mezger 9.3.2010
#include <avr/io.h> // Definitionen laden #include <util/delay.h> // Delay-Bibliothek laden
// Lauflicht mit STK 200 (LED neg. Logik) und AT90S2313 int main(){ unsigned char rauf = 1; DDRB=0xff; // PB als Ausgang PORTB = 0xfe; // LED0 an while(1){ // Endlosschleife if (rauf){ if (PORTB == 0x7f) // wenn LED7 an rauf=0; else PORTB = PORTB *2 +1; // naechste LED } else { if (PORTB == 0xfe) // wenn LED0 an rauf=1; else PORTB = PORTB /2 +128; // naechste LED } _delay_ms(100); // warte 100ms } return 0; }
|