www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik µC Code frage


Autor: Peterle Anonym (Firma: keine) (wanderameise)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
infineon 505C:

#include <stdio.h>

volatile int tick;                
unsigned char RELOAD_HIGH;
unsigned char RELOAD_LOW;
void wait( int,int);               

_interrupt (1) void MyInterrupt(void)     
  {
  TH0  =  RELOAD_HIGH;
  TL0  =   RELOAD_LOW;
  tick++;
   }

void wait( int anzahl, int wert)
     {
       tick  =  0;
      while(tick < anzahl)
      {
              if(tick%2==0)
           {
           P1_0  =   wert;
           } else
           {
           P1_0  =   0;
           }
         }
     }


void main(void)
{
                      
TR0    =  1;              
EA    =  1;              
ET0    =  1;
TMOD  =  0x01;


    while(1)
    {
      RELOAD_HIGH  =  0xf1;        
      RELOAD_LOW  =   0x36;
      wait(132,1);
                        wait(165,0);
      
          

    }                
                                             
}





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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peterle Anonym (Firma: keine) (wanderameise)
Datum:

Bewertung
0 lesenswert
nicht 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?


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

Bewertung
0 lesenswert
nicht 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.


Autor: Peterle Anonym (Firma: keine) (wanderameise)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok danke soweit

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.