********************************************************** .INCLUDE "m8def.inc" ; Definitionsdatei laden ;*** Definitionen *** ;******************** .DEF temp = R16 .DEF zaehler1 = R19 .DEF zaehler2 = R18 .DEF zaehler3 = R17 ;*** Konstanten *** ;****************** .EQU xtal = 4000000 ;4MHz Quarz ;*** Hauptprogramm *** ;********************* .CSEG ; Beginn eines Code-Segmentes .ORG 0 ; Startadresse=0 RJMP start start: ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp LDI temp,0xFF ; PortD auf Ausgang setzen OUT DDRD,temp OUT PORTD,temp rechts: ROL temp ; temp nach links rotieren OUT PORTD,temp ; temp -> PORTD RCALL warte ; UP: Zeitverzögerung BRCS rechts ; solange Ende nicht erreicht wurde ROR temp ; temp nach rechts rotieren links: ROR temp ; temp nach rechts rotieren OUT PORTD,temp ; temp -> PORTD RCALL warte ; UP: Zeitverzögerung BRCS links ; solange Ende nicht erreicht ist ROL temp ; temp nach links rotieren RJMP rechts ; springe zum Anfang ;*** Unterprogramme *** ;********************** warte: LDI zaehler1,20 ; Zeitverzögerung CLR zaehler2 ; ergeben zusammen CLR zaehler3 ; einen 3-Byte-Zähler warte1: DEC zaehler3 ; niedrigstes Byte -1 BRNE warte1 ; 0 erreicht? nein -> Schleife DEC zaehler2 ; mittleres Byte -1 BRNE warte1 ; 0 erreicht? nein -> Schleife DEC zaehler1 ; höchstes Byte -1 BRNE warte1 ; 0 erreicht? nein -> Schleife RET ; Schleifenende, Rückkehr