YEAH, ich habs gewusst. Hab schon zu meiner Freundin gesagt, dass ich noch was unnötiges drinne habe, aber so hab ich eben gelernt mit Registern umzugehen![]()
Also ist nicht schwer die Aufgabe, hier der Code:
Ich finds echt nett von dir, dass du dir so viel Mühe mit mir gibst. Darf ich mal so nebenbei fragen, was du beruflich machst? Ich tipp mal auf Lehrer?Code:.include "m8def.inc" .equ time = 255 -254 ;Damit wird der Timer vorgeladen .equ LED = PB2 ;LED an B.2 .def tmp = r16 ;Mein Universallregister .def zaehler = r18 ;Mein Zählregister .org 0x000 rjmp reset ;Interruptvektor "reset:" .org OVF0addr rjmp pruefZaehler ;Interruptvektor für Timer0 Überlauf, hier springt ;das Programm hin, wenn der Timer überläuft reset: ;Stack einrichten ldi tmp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse out SPH, tmp ldi tmp, LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse out SPL, tmp sbi DDRB, LED ;B.2 als Ausgang cbi PORTB, LED ;B.2 auf LOW stellen -> LED aus am Anfang ;Timer Register werden belegt, hier Timer 0 ldi tmp, (1<<CS02) | (1<<CS00) ;prescaler ist 1024 out TCCR0, tmp ;Register TCCR0 ist für den Prescaller zuständig ldi tmp, (1<<TOIE0) ;Hier werden Interrupts nach Timer0 Überlauf eingeschaltet out TIMSK, tmp ;Register TIMSK ist dafür zuständig ldi tmp, time ;Hier wird der Timmer vorgelaen und zwar mit 255-254 out TCNT0, tmp ;Er läuft 254 mal durch, bevor ein Interrupt auftritt sei ;Interrupts zulassen loop: rjmp loop ;Immer wieder selbst aufrufen -> Endlosschleife pruefZaehler: inc zaehler ;Zählregister um 1 erhöhen cpi zaehler, 0b00001111 ;Wenn Zählregister = 65 ist breq zeitum ;spring zu "zeitum:" wenn zaehler = 65 rjmp zeitum2 ;zu "zeitum2:" springen zeitum: clr zaehler ;Zählregister auf 0 setzen sbis PINB, LED ;überspringe, wenn B.2 = 1 ist (LED an?) rjmp zeitum0 ;zu "zeitum0:" springen rjmp zeitum1 ;zu "zeitum1:" springen zeitum0: sbi PORTB, LED ;B.2 = 1 setzen -> LED an rjmp zeitum2 zeitum1: cbi PORTB, LED ;B.2 auf 0 setzen -> LED aus rjmp zeitum2 zeitum2: ldi tmp, time ;Hier wird der Timer vorgelaen und zwar mit 255-254 out TCNT0, tmp ;Er läuft 254 mal durch, bevor ein Interrupt auftritt reti ;die Interrupt-Routine wird verlassen ;und es wird weiter im Hauptprogramm gearbeitet
Gruß
Thomas
PS: Ich glaub, Assembler wird noch richtig lustig![]()
![]()
Mir wird nur schlecht, wenn ich seh wie man Timer in C oder Basic programmiert, wie wenig Zeilen das da sind *g*
[edit]
Hab noch ein Befehl rausgenommenWieder eine Zeile weniger.







Zitieren
Lesezeichen