8bit Timer TCCR0

OP #466364
Lesenswert?

Hallo!

Ich wollte einen timer einsettzen, und musste dazu  muss ich den 
register TCCR0 auf 0b001 setzen, damit der Prescaler(teiler) aus ist.

das habe wollte ich so machen:

ldi r16, 0b001
in TCCR0, r16

dann hat er aber gemerckert, das TCCR0 unbekannt sei!?! obwohl der ja 
sogar in der m8def.inc aufgeführt ist.

und einzelene bits zu setzen ging auch nciht:

sbi TCCR0, 0
cbi TCCR0, 1
cbi TCCR0, 2

Warum geht das nicht?

SDanke für die Hilfe!!!
Gast #466369
Lesenswert?

Schau doch noch mal im Datenblatt nach,wie die Register zur 
Timer-Kontrolle wirklich heissen.Insgesamt gibt es 3 Stück (A,B und C) 
pro Timer und dann noch 2 weitere um die dazugehörigen Interrupts zu 
aktivieren/pollen.

Im übrigen wird der IN-Befehl zum lesen von Ports verwendet.Um etwas 
auszugeben lautet der richtige Befehl OUT.
Gast #466374
Lesenswert?

Oha,ich seh grad ich hab das 8-Bit-Timer überlesen.Das mit den 3 
Kontrollregistern gilt für die "grossen" 16-Bit Timer.Für den 
8-Bit-Timer ist TCCR0 natürlich korrekt.

Ersetz einfach das IN durch ein OUT....
OP #466380
Lesenswert?

danke jetzt übernimmt er den wert, aber das interrupt wird trotzdem 
nciht ausgelöst!?! hier mein quellcode:

.include: "m8def.inc"

.org 0x000
rjmp init        ;Reset Handler
reti             ;IRQ0 Handler
reti            ;IRQ1 Handler
reti             ;Timer 2 Compare Handler
reti             ;Timer 2 Overflow Handler
reti             ;Timer 1 Capture Handler
reti             ;Timer 1 Compare A Handler
reti             ;Timer 1 Compare B Handler
rjmp richtungA          ;Timer 1 Overflow Handler
rjmp richtungB        ;Timer 0 Overflow Handler
reti             ;SPI Transfer Complete Handler
reti             ;USART, RX Complete Handler
reti             ;USART, UDR Empty Handler
reti             ;USART, TX Complete Handler
reti             ;ADC Conversion Complete Handler
reti             ;EEPROM Ready Handler
reti             ;Analog Comparator Handler
reti             ;2-wire Serial Interface Handler
reti             ;Store Program Memory Ready Handler


  ldi temp, Low(RAMEND)
  out SPL, temp
  ldi temp, high(RAMEND)
  out SPH, temp        ;Stack Pointer Intialisieren

  ldi r16, 0xFF
  out DDRB, r16        ; PortB ist ausgang

.def temp = r16
.def VQSspeed = r17
.def VQSrichtung = r18


init:
ldi temp, 0b001
out tccr0, temp

ldi temp, 0b1
out timsk, temp



richtungA:

  cbi PortB, 1
  sbi PortB, 0
rjmp richtunga

richtungB:
  Cbi PortB, 0
  sbi PortB, 1

rjmp richtungb
#466414
Lesenswert?

Nicht fertig!

Da sind schon jede Menge Fehler drinnen. Von wegen nicht fertig.

Deine Initialisierung wird nie ausgeführt. Dein Stackpointer
zeigt ins Nirwana, der Port B ist überhaupt nicht initialisiert.
Eine Interrupt Routine wird mit einem reti abgeschlossen und
nicht mit einem Sprung zum Anfang der Routine.

Nicht fertig. psscht.

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