µC Code frage

OP (Firma: keine) #567830
Lesenswert?
• ▲
▼
infineon 505C:
1
#include <stdio.h>
2

3
volatile int tick;                
4
unsigned char RELOAD_HIGH;
5
unsigned char RELOAD_LOW;
6
void wait( int,int);               
7

8
_interrupt (1) void MyInterrupt(void)     
9
  {
10
  TH0  =  RELOAD_HIGH;
11
  TL0  =   RELOAD_LOW;
12
  tick++;
13
   }
14

15
void wait( int anzahl, int wert)
16
     {
17
       tick  =  0;
18
      while(tick < anzahl)
19
      {
20
              if(tick%2==0)
21
           {
22
           P1_0  =   wert;
23
           } else
24
           {
25
           P1_0  =   0;
26
           }
27
         }
28
     }
29

30

31
void main(void)
32
{
33
                      
34
TR0    =  1;              
35
EA    =  1;              
36
ET0    =  1;
37
TMOD  =  0x01;
38

39

40
    while(1)
41
    {
42
      RELOAD_HIGH  =  0xf1;        
43
      RELOAD_LOW  =   0x36;
44
      wait(132,1);
45
                        wait(165,0);
46
      
47
          
48

49
    }                
50
                                             
51
}

hoffe der code ist übersichtlich!das prinzip des programms habe ich 
verstanden, nur ein paar sachen sind mir nicht so ganz klar!wie muss ich 
mir den ablauf im µC vorstellen?

-in der main funktion wird als erstes der timer intialisiert
-wenn das programm in die endlosschleife kommt, läuft der timer bereits?
mit welchem startwert?der grade im register steht?

-dann übergebe ich die eigentlichen startwerte für den timer an globale 
variable!nun beginnt der timer immer wieder bei diesem wert!das heisst 
er muss mind einmal zum overflow gekommen sein um überhaupt seinen 
startwert zu erhalten?

-die wait funktion wird aufgerufen

-das programm verharrt solange in der main funktion, bis der interrupt 
131 mal durch den overflow ausgelöst wurde?

heisst das also, das der timer sobald er initalisiert wurde läuft egal 
was ich sonst so für befehle ausführen lasse und das er nciht mehr 
stopt?
was passiert nach der pause "wait(165,0);"?fängt er von vorne an?ja 
oder?um ich zu stoppen müsste ich wohl das entsprechende register bit 
setzen?!?

danke
#567887
Lesenswert?
• ▲
▼
Benjamin Moll wrote:
> -in der main funktion wird als erstes der timer intialisiert
> -wenn das programm in die endlosschleife kommt, läuft der timer bereits?
> mit welchem startwert?der grade im register steht?

Der Wert, der als Resetwert im Datenblatt angegeben ist.

> -dann übergebe ich die eigentlichen startwerte für den timer an globale
> variable!nun beginnt der timer immer wieder bei diesem wert!das heisst
> er muss mind einmal zum overflow gekommen sein um überhaupt seinen
> startwert zu erhalten?

Ja.

> -das programm verharrt solange in der main funktion, bis der interrupt
> 131 mal durch den overflow ausgelöst wurde?

Nein, sondern bis zum Ausschalten.
Das Main wird nie verlassen.


> heisst das also, das der timer sobald er initalisiert wurde läuft egal
> was ich sonst so für befehle ausführen lasse und das er nciht mehr
> stopt?

Das ist der Sinn des Timers.

> was passiert nach der pause "wait(165,0);"?fängt er von vorne an?ja

Zählt einfach weiter.


> oder?um ich zu stoppen müsste ich wohl das entsprechende register bit
> setzen?!?

Ja


Peter
OP (Firma: keine) #568145
Lesenswert?
• ▲
▼
danke soweit, aber nochmal dazu:

> -das programm verharrt solange in der main funktion, bis der interrupt
> 131 mal durch den overflow ausgelöst wurde?

glaub das sollte wait anstatt main heissen.sry!


=>also der timer wird gestartet
=>er kommt in die endlosschleife
=>er springt in die wait funktion um dort 132 mal die membran zu heben 
bzw zu senken! was passiert danach, wenn die abbruchbedingung für die 
wehile schleife erfüllt ist?er sprigt zurück in die main, um den 
nächsten befehl auszuführen oder?

#568167
Lesenswert?
• ▲
▼
Benjamin Moll wrote:

> bzw zu senken! was passiert danach, wenn die abbruchbedingung für die
> wehile schleife erfüllt ist?

Es wird die nächste Anweisung nach der Schleife ausgeführt.
Da es aber keine Anweisung mehr gibt, erfolgt der Rücksprung
zu der Programmstelle, von der der Aufruf der Funktion
erfolgt ist. Dort geht es dann mit der nächsten Anweisung
nach dem Funktionsaufruf weiter.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.