Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Hardware » Delay-Funktion selber basteln?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.07.2004, 11:38 Uhr
Unwissende
...die wirklich Unwissende 8-)


Hallo hallo,
....und immer noch sitze ich bei meinem Keil-Compiler(ich schreibe also in "C" und nich Assembler) und versuche ein Prog zu schreiben, das ein freundliches "Hallo Welt" aufs Display, das an einen 80C552-Mikrocontroller von Philips zaubert.
Ich benötige dazu noch eine delay-Funktion.
Die "normale" Delay-Funktion "delay(ms)" ist ja eine DOS-Funktion, also ungeeignet für einen Mikrocontroller.
Mhmmmm, nun bin ich am Überlegen, wie und wo ich einen Timer herkriege, also eine "Uhr" die in bekannten, immer gleich langen Zeitabschnitten hochzählt.
Meine bisherige Idee ist, dass ich mir einen Timer im MUC genauer anschaue, die Interrupt-Rountinen dazu suche, und dann in der Interrupt-Routine ein wenig rumpfusche
Die Alternative wäre so eine wait-Funktion, also à là:

C++:
void wait (void)  {                  
  ;                                  
}


Der Aufruf wäre dann hier in der main:

C++:
void main (void)  
{
  unsigned int i;          
    while (1)
  {
       for (i = 0; i < 10000; i++)  
       {
           wait();
       }
}


Doch damit kann man wohl auch keinen Blumentopf gewinnen...Der Compiler tut das zwar nicht wirklich wegoptimieren (hab ich ausprobiert), aber die genaue Zeit, die er für die Ausführung der for-Schleife braucht, wissen wir halt auch nicht.........
Habt ihr Ideen?
--
__________________________________
Unwissenheit ist vorläufig- Dummheit für immer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.07.2004, 12:56 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich würde mal in der HW Doku lesen, ob der 80C552 nicht einen Timer interrupt hat. Den kann man dann dazu "misbrauchen": zunächst mßt du herausfinden, wie man an den Interrupt einen Funktion bindet. Ich kenn mich damit nicht so dolle aus, würde aber ganz naiv davon ausgehen, daß man einfach einen Signalhandler schreiben muß. Dann muß man noch herausfinden, wie oft pro Sekunde der Interrupt angesteuert wird.

Dann könnte eine erste Lösung so aussehen:

C++:
#define INTERRUPTS_PER_SECOND 4711

static unsigned ir_counter;
static unsigned sec_counter;

void ir_handler()
{
      if (++ir_counter==INTERRUPTS_PER_SECOND)
      {
           ++seconds;
           sec_counter = 0;
      }
}


void delay(unsigned secs)
{
       secs += sec_counter, // ggf. +1, kommt auf gewünschte Semantik an
       while (secs != sec_counter)
       {
           // ggf. hier Assembler code einfügen, um ausführung bis zum nächsten interrupt zu unterbrechen.
       }
}


int main()
{
           signal(... &ir_handler ...); // Hängt davon ab, was du hier darfst
           delay(100); // 100 Sekunden warten
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 21.07.2004 um 12:57 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.07.2004, 13:10 Uhr
ao

(Operator)


Das hab ich doch neulich schonmal jemandem beantwortet, der im Assembler-Forum nach 8051-Timern gefragt hat. Hab da einige Weblinks hinterlassen.

Und wenn ich mich richtig erinnere, gibts auch bei www.keil.com Application-Notes für fast jeden Zweck.

Einfach mal suchen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.07.2004, 13:19 Uhr
Unwissende
...die wirklich Unwissende 8-)


Okay, dann werd ich mir das Datenblatt nochmal reinziehen....danke

--
__________________________________
Unwissenheit ist vorläufig- Dummheit für immer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.07.2004, 15:25 Uhr
Hans
Library Walker
(Operator)



Zitat von ao:
Das hab ich doch neulich schonmal jemandem beantwortet, der im Assembler-Forum nach 8051-Timern gefragt hat. Hab da einige Weblinks hinterlassen.

Und wenn ich mich richtig erinnere, gibts auch bei www.keil.com Application-Notes für fast jeden Zweck.

Einfach mal suchen.

ao

Hi ao,
das hatten wir am WE auch noch kurz im C++ Forum, wo ich den Vorschlag gemacht hatte, den Timer in einer Schleife abzufragen. Siehe hier, Beitrag 8ff.
Aber stimmt, im Assemblerforum steht da auch noch was, wo ich auch meinen Senf dazu getan habe...

@unwissende:
Dann gibt es auf der Produkt-Info-Seite von Philips auch noch 'ne Application-Note für den Timer2. (PDF-datei).

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 21.07.2004 um 15:27 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Hardware ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: