Forum: Mikrocontroller und Digitale Elektronik TIMER


von Marc (Gast)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich habe ein kleines problem mit meinem Timer. Ich verwende den Timer
im compre match modus aber ohne interrupts. Das Funktioniert auch das
erste mal, dann wird ein Bit im Interruptregister gesetzt. Das 2 mal
wenn ich den Timer aufrufe funkieoniert er nicht mehr so wie von mir
vorgesehen. Wie kann ich ein Bit TIFR löschen. Im Tutorial steht das
ich es mit einer logischen 1 löschen kann. Mit welchem Befehl kann ich
auf das TIFR Register zugreifen?? Wenn ich es mit SBR versuche kommt
die Fehlermeldung unkown register!!

mein Programm ist im Anhang (als asm) !
P.S ich benutze den ATMega16

von johnny.m (Gast)


Lesenswert?

1. Für IO-Register gibts den Befehl sbi

2. Der funktioniert aber mit TIFR nicht, weil TIFR nicht
bitaddressierbar ist.

3. out TIFR, (1 << OCF1A)
Damit sollte es gehen.

von Marc (Gast)


Lesenswert?

danke für die schnelle Antwort.
Leider funktioniert das auch nicht. Kommt die gleiche Fehlermeldung
(invalid Register) kann das aber auch am OCF1A liegen?
Ich verstehe den befehl leider nicht. (1<<ocf1a)???

von crazy horse (Gast)


Lesenswert?

man kann natürlich keine Konstanten direkt in ein I/O-Register
schreiben...

ldi r16, (1 << OCF1A)
out TIFR, r16

das sollte jetzt aber funktionieren :-)

von johnny.m (Gast)


Lesenswert?

@crazy horse:
Hast natürlich recht. Hab net aufgepasst.

@Marc
(1 << OCF1A) schiebt eine binäre '1' (also 0b00000001) um 'OCF1A'
Stellen nach links. OCF1A ist normalerweise in der ...def.inc-Datei
definiert.
('ldi r16, 0b00010000' ist das gleiche wie 'ldi r16, (1 <<
OCF1A)').

Gruß

Johnny

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.