Msp430 Echtzeituhr Variable Problem

OP #2639832
Lesenswert?

Hallo zusammen,
ich bin noch relativ neu und unerfahren im Bereich Programmierung. Da 
ich es aber lernen möchte, will ich eine kleine Uhr mit einem MSP430G 
programmieren.
Ich dachte mir ich löse einfach jede Sekunde einen Timer-interrupt aus 
und setzt dann die Sekunden-Variable um eins nach oben. Minuten und 
Stunden wollte ich einfachen mit If-Anweisungen machen.
So weit so gut.
Jetzt hab ich leider das kleines Problem, das es irgendwie ein Problem 
mit den Variablen gibt.
1
#include <msp430g2232.h>
2
#include "init.h"
3

4
unsigned short ush_RTCsec = 0;
5
unsigned short ush_RTCmin = 0;
6
unsigned short ush_RTChour = 0; 
7

8
  
9
void main(void)
10
{
11
  init_main();
12
  while (1)
13
  {
14
    _delay_cycles(40000);
15
  }
16
}
17
#pragma vector=TIMER0_A0_VECTOR
18
__interrupt void TIMER0_A0_ISR (void)
19
{
20
   TACTL &= ~TAIE;
21
   if (ush_RTCsec >= 59 )
22
  {
23
     if (ush_RTCmin >= 59)
24
     }     
25
       if (ush_RTChour >= 23)
26
       }     
27
         ush_RTChour = 0;
28
       }
29
       else
30
       {
31
         ush_RTChour ++;
32
       }
33
     }
34
     else
35
     {
36
       ush_RTCsec = 0;
37
       ush_RTCmin **;
38
     }
39
  }
40
  else
41
  {
42
    ush_RTCsec ++;
43
  }

Ich benutze Code Composer Studio von TI als  Compailer und finde leider 
das Problem nicht.
Danke für eure Hilfe!
#2640435
Lesenswert?

Jonas Enderlin schrieb:
> Mark Brandis schrieb:
>> Was ist die Fehlermeldung? Und was soll die Zeile hier:
>>
>> ush_RTCmin **;
>>
>> darstellen?
>
> Das war ein schreibfehler es sollte ++ heißen.

Dir ist klar, dass man sich mit Code, den man extra fürs Forum noch 
einmal neu tippt, enorm unbeliebt machen kann? Es ist praktisch kaum zu 
vermeiden, dass man da Tippfehler einbaut, die im realen Code nicht 
vorhanden sind. Die regelmässigen Helfer hier haben dann eine 
Riesenfreude, wenn sie dich auf Fehler aufmerksam machen, die in deinem 
realen Code gar nicht enthalten sind.


Dreh deine Logik in der Interrupt Routine ein wenig um. Das ist ein 
wenig arg vewrwirrend, was du da machst.
Erhöhe die jeweilige Variable und danach siehst du nach, ob du damit 
übers Ziel hinausgeschossen bist und korrigierst das entsprechend, indem 
du zb wieder bei 0 Sekunden anfängst und dafür 1 Minute mehr zählst. 
Sind die Minuten bei 60, dann gehen die wieder auf 0 und dafür wird 1 
Stunde mehr gezählt ....
1
  ...
2
  ush_RTCsec++;
3

4
  if( ush_RTCsec == 60 )
5
  {
6
    ush_RTCsec = 0;
7
    ush_RTCmin++;
8

9
    if( ush_RTCmin == 60 )
10
    {
11
      ush_RTCmin = 0;
12
      ush_RTChour++;
13

14
      if( ush_RTChour == 24 )
15
        ush_RTChour = 0;
16
    }
17
  }
18

19
  ...

siehst du um wieviel einfacher und durchschaubarer diese Logik ist? Bei 
deiner Logik muss man erst mal alle Möglichkeite in Gedanken abklappern, 
die du da mit den if's und else's aufgebaut hast um sich davon zu 
überzeugen, dass in allen Fällen auch wirklich das Richtige passiert.

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