Tiemr-Interrupt mit Keil µVision

Gast #225146
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
Angehängte Dateien:
Gast #225147
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
Gast #225148
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
Gast #225151
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
Gast #225152
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
Angehängte Dateien:
Gast #225153
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

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