Forum: Mikrocontroller und Digitale Elektronik Tiemr-Interrupt mit Keil µVision


von Mike Schultz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

ich hab hier einen 8051 Controller (genau gesagt ein Phytec-Board) und
zur Zeit versuche ich eienn einfachen Timerinterrupt zu erzeugen. Aber
so wie es aussieht klappt das nicht. Vielleicht hat jemand mehr
erfahrung damit und kann mir sagen, wo mein Fehler liegt.

startQNewARun() wird aus einem Menü heraus aufgerufen und soll den
timer starten.

Der Timer soll einfach nur einen Zähler erhöhen, der dann in
runQNewARun() auf einem LCD ausgegeben wird.

Leider steht der zähler immer bei 0.

Mike

von Storr der Schnitter (Gast)


Lesenswert?

Du musst den Timer in der ISR wieder neu initialisieren und starten:


void v_Timer0(void) interrupt 1 using 2
{
    TR0 = 0;        // Timer0: STOP
    TL0 = 0x00;     // Timer0: Wertuebergabe
    TH0 = 0x00;     //
    TR0 = 1;        // Timer0: START

    test++;
}

Gruss, Jan

von Mike Schultz (Gast)


Lesenswert?

Danke für den Tip, aber leider hilft er nicht.
Irgendwie wird die ISR nie aufgerufen udn ich weiß nicht wiso.

Muß die ISR an irgendeine bestimtme Stelle oder brauch ich noch ein
Header-file?

MfG Mike

von Storr der Schnitter (Gast)


Lesenswert?

Welchen 8051-uC benutzt Du denn?

Gruss, Jan

von Mike Schultz (Gast)


Lesenswert?

Ist wie oben geschrieben ein Phytec-Modul mit einem
Infineon C515 Controller (Genauer: SAB-C515-LN)

von Peter Dannegger (Gast)


Lesenswert?

Man müßte schon ein komplettes Programm sehen und nicht nur einzelne
Kodeschnipsel.

"interrupt 1" sollte stimmen.

Das "using" laß bloß weg, wenn Du nicht weißt, wozu das nütze ist.
Das ist ein Schalter um eventuell geringste Laufzeitoptimierungen zu
Lasten der SRAM-Nutzung vorzunehmen, nachdem das Programm bereits
lauffähig ist.

Bei "using" geht der Compiler davon aus, daß Du weißt, was Du tust,
d.h. wenn es kracht, ist es Deine Schuld.


Peter

von Storr der Schnitter (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab' mal ein Testprogramm geschrieben und mit dem Simulator
getestet. Ist eigentlich genauso wie Du's beschrieben hast.

Vielleicht deaktivierst Du in einem anderen Progammteil Deine IRs?
Ein Header-File brauchst Du auf jedenfall nicht.
Ist vielleicht das Source-File mit der ISR nicht includet?

Teste doch mal das angehängte Programm mit deinem Simulator. Wenn Du im
Debug-Modus bist kannst Du Dir unter Peripherals die Register des Timer0
anzeigen lassen. Lege außerdem die Testvariable uiTest in's
Watch-Fenster.

Mehr fällt mir im Moment leider auch nicht ein.

Gruss, Jan

von Mike Schultz (Gast)


Lesenswert?

Viel dank schon mal soweit, mit dem Programm von dir funktioniert es.
Hab damit gerade mal Pulse mit einer Frequenz von ziemlich konstant
3.906kHz erzeugt.

Jetzt muß ich mal suchen, warum es in dme eigentlichen Programm nicht
klappt. Leider stammt der Quellcode dort nicht von mir und os weiß ich
nicht, was das alles programmiert ist. Aber ich werde mal suchen.

Mike

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.