timer-code.asm
1 | .include "m8def.inc" ;ändern!
| 2 |
| 3 | .org 0x00
| 4 | rjmp Reset
| 5 | .org OVF1addr
| 6 | rjmp TimerOverflow
| 7 |
| 8 | Reset:
| 9 | ;Stackpointer laden
| 10 | ldi r16, HIGH(RAMEND)
| 11 | out SPH, r16
| 12 | ldi r16, LOW(RAMEND)
| 13 | out SPL, r16
| 14 | ;Timer initialisieren
| 15 | ldi r16, HIGH(10) ;Maximalwert des Counters 56250
| 16 | out ICR1H, r16
| 17 | ldi r16, LOW(10)
| 18 | out ICR1L, r16
| 19 | ldi r16, 0 ;Timermodus => rtfm
| 20 | out TCCR1A, r16
| 21 | ldi r16, 0b00000001 ;vorteiler aus 001
| 22 | out TCCR1B, r16
| 23 | ldi r16, 0b00000100 ;Interrupt bei TimerOverflow an
| 24 | out TIMSK, r16
| 25 | sei ;Interrupts global aktivieren
| 26 | ;irgendwas anderes machen
| 27 |
| 28 | ;gar nix mehr machen bis zum Interrupt
| 29 | ldi r16, 1
| 30 | idle: rjmp idle
| 31 |
| 32 |
| 33 |
| 34 | TimerOverflow: ;Wenn der Timer über 56250 drüberläuft...
| 35 | dec r16
| 36 | tst r16
| 37 | brne tovf_end
| 38 | ldi r16, 1
| 39 | ;neue Zeit berechnen und ausgeben
| 40 |
| 41 | tovf_end:
| 42 | reti
|
|