Hi,
ich benutze einen MSP430F2013 und versuche über globale Variablen in
einem Interrupt eine Zählfunktion einzubauen. Wenn ich eine LED in dem
Interrupt toggeln lasse,als Test, funktioniert es auch einwandfrei, aber
sobald ich meine Zählfunktion einsetze passiert nichts...als würde er
gar nicht in den Interrupt kommen. Gibts da vielleicht Probleme mit der
Übergabe von den Werten?
Ich lasse den TAR immer bis 12500 laufen und er wird nachdem er in den
Interrupt springt, wieder am Ende des Interrupts zurück auf 0 gestellt,
da ich mir ausgerechnet habe, dass bei 1MHz(SMCLK) und einem Vorteiler
von 8 ich 12500Takte brauche für 100ms.
Ich hoffe das reicht fürs Verständnis. Hier nun der Quelltext:
include "msp430x20x2.h"
int a=0;
int t100mstester;
volatile int t100ms;
volatile int t1sek=0;
int null_ms=0;
int t100msersatz;
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= 0xFF; // Setzt alle auf OUTput
P1REN=0x01; //Pull up für P1.0 aktiviert
//Timer wird aktiviert mit fortsetzen der aufsteigenden Zähler
TACCTL0 = CCIE; // TACCR0 interrupt enabled
TACCR0 = 12500; //Bis hier hin zählt er
TACTL = TASSEL_2 + MC_1;
TACTL|=0x02D2; // SMCLK, countmode die 3 aktiviert vorher 02C3
_BIS_SR(GIE); //Interrupt aktivieren
while(1)
{
//Hier wird die LED angeschaltet für den richtigen Zeitpunkt
if (null_ms==t1sek%2)
{
P1OUT ^=0x03; //LED an 0x03 welche toggelt
}
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
t100ms = t100ms+1;
t100msersatz = t100ms;
if(null_ms<t100msersatz%9)
t1sek=t1sek+1;
TAR=0;
}
Könnt ihr mir vielleicht helfen, was der Fehler ist? Bin relativ neu in
der Mikrocontrollerprogrammierung und hatte wenn eher Erfahrungen mit
den ATMega...
Ich danke schon mal für eine schnelle Antwort;)