www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 TimerA Interrupt + externer Variable


Autor: Daniel S. (nasenschleim)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich wollte mir eine Delayfunktion über den TimerA basteln. In meinem 
Beispiel soll das Delay 1 Sekunde betragen. Der Timer funktioniert 
Interrupt gesteuert. Solange ich den Timer in der main.c initialisiere 
und dort auch die Routine abgearbeitet wird, läuft das alles.
Wenn ich jetzt die Timer-Initialisierung und die Routine auslagere, habe 
mir eine Datei TIMER.c und TIMER.h angelegt, dann funktioniert das ganze 
nicht mehr.
Ich vermute das es etwas mit der Variable "timer" zu tun hat. Habe Sie 
als extern und volatile deklariert, trotzdem funktioniert es nicht.

Würde mich freuen, wenn Ihr mir etwas auf die Sprünge helfen könntet.

PS: - verwendet wird der MSP430f169
    - Software Code Composer Studio 4_1_3
    - im Anhang der Quellcode

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was heisst "funktioniert nicht"?

Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht kannst du die Variable nur im Hauptprogramm deklarieren ?

mfg Erik

Autor: Daniel S. (nasenschleim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahso, habe ich ja ganz vergessen zu schreiben was nicht funktioniert.

Also wenn ich alles in der Main compiliere, dann funktioniert die 
Funktion wie gewünscht. Das heißt ich komme auf ein Delay, von ca einer 
Sekunde und somit wird der Text "Test123456" auch nur jede Sekunde 
gesendet.

Baue ich das Programm aber so auf, wie in den Dateien gezeigt. Das heißt 
die Funktion für die TimerA-Initialisierung und auch die Auswertung der 
Timervariable in TIMER.c lege. Dann sendet er die ganze Zeit (ohne 1 
Sekunde Pause) "Test123456". Das heißt er springt gar nicht in die 
Delay-Funktion rein. Ich kann mir das nicht erklären, denn ich habe ja 
den selben Code, welcher ja funktioniert, nur in TIMER.c ausgelagert.

Seht Ihr vielleicht mein Fehler, oder habe ich vergessen eine 
Headerdatei einzubinden? Aber dann würde der Compiler, ja beim 
compilieren meckern...

Schon mal vielen Dank.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier
  while(1)
  {
    senden_String_UART1("Test123456\n");
    
  void timera_1sek();    

ist kein Funktionsaufruf.
Das deklariert, das es eine Funktion namens timera_1sek gibt, dass über 
die Argumente nichts näher bekannt ist und dass sie nichts 
zurückliefert.

Das hier
  while(1)
  {
    senden_String_UART1("Test123456\n");
    
    timera_1sek();    
wäre ein Funktionsaufruf.

Autor: Daniel S. (nasenschleim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja das macht Sinn. Werde ich am Montag gleich mal testen und 
anschließend eine Rückmeldung geben.

Ich wünsche euch ein schönes Wochenende.

Autor: Daniel S. (nasenschleim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

ja es war genau das void.
Irgendwann sieht man den Wald vor lauter Bäumen nicht mehr... :-(
Danke für die Hilfe.

Gruß, Daniel.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.