TIMER, atmega 328P,

Gast #3151208
Lesenswert?

Ich bin ziemlicher Neuling und wollte fragen wieso hier kein Interrupt 
ausgelöst wird?
1
.org 0x0000
2
    rjmp init
3
.org OVF1addr
4
    rjmp timer
5

6

7

8

9
init:
10

11
ldi r16, HIGH(RAMEND)
12
out SPH, r16
13
ldi r16, LOW(RAMEND)
14
out SPL, r16
15
sei
16
ldi r16,0x3
17
sts  TCCR1B,r16
18
main:
19

20
nop
21

22

23

24
    nop
25

26
    rjmp main
27

28
timer:
29
  nop
30
  ldi r17,0x01
31

32

33
  reti
Besten Dank im vorraus!
#3151237
Lesenswert?

Moin

Du hast weder den Timer initialisiert, noch die globalen Interrupts 
freigeben. Schau dir mal im Datenblatt die TCCRxn Register an, damit 
stellst du deinen Timer ein, ob er hoch oder runterzählt, ob er 
Interrupts auslösen darf usw.

Und ganz wichtig! der Befehl "sei", damit erlaubst du global Interrupts. 
Wenn du das "sei" nicht benutzt, wird überhaupt kein Interrupt, egal 
welcher, ausgelöst, selbst wenn du den Timer richtig eingestellt hast.

MfG Chaos
#3151247
Lesenswert?

j. t. (chaoskind) schrieb:
> Und ganz wichtig! der Befehl "sei", damit erlaubst du global Interrupts.
1
...
2
> ldi r16, HIGH(RAMEND)
3
> out SPH, r16
4
> ldi r16, LOW(RAMEND)
5
> out SPL, r16
6
> sei           <---------- hier ist es!
7
> ldi r16,0x3
8
> sts  TCCR1B,r16
9
> main:
10
...

Das "sei" kann man schon finden, wenn man nur sucht :-)

Aber mit dem Rest hast du Recht. Zusätzlich noch TIMSK, dann klappt das 
auch.

Am besten mal richtig mit der Configuration von Timern beschäftigen.

Gruß Bernd

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren