Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Timer Programm


von W. W. (dt_rocky)


Angehängte Dateien:

Lesenswert?

Hallo!

Im folgenden Programm (Keil uVision 3 geschrieben) im Anhang, soll ich 
folgende Aufgabe lösen.

Die Funktion TimerInit soll so wie in der Funktionsbeschreibung alle 3 
Timer 0,1 und 2 verwenden können und man soll dazu noch die Zeit angeben 
können z.B.: time=5ms oder time=5us usw.
Wie muss man den Parameter aMode bearbeiten bzw. verarbeiten?
Und wie sieht die Initialisierung der einzelnen Timer im switch(timerNo) 
aus?

Danke im Voraus

MfG
dt_rocky

von Stefan W. (wswbln)


Lesenswert?

...Du hast das Datenblatt des verwendeten Prozessors?

Wann ist Abgabetermin?

Ich habe hier auch noch ein paar Hausaufgaben - kann die bitte jemand 
für mich machen??

:-)))

von W. W. (dt_rocky)


Lesenswert?

Hallo Stefan!!!

Abgabetermin ist am Montag :-)

Der Prozessor ist der AT89C52, aber das ist eigentlich egal es geht nur 
um die Timer initialisierung usw. und das verstehe ich leider nicht. Ich 
hab mir meine Unterlagen durchgelesen jedoch kann ich das nicht so 
umsetzen wie es mein Professor will, der programmiert wie du vielleicht 
schon gesehen hast in einer "eigenen" Welt, soviele Typedefs usw. hab 
ich noch nie gesehen :-))

Könntest mir da bitte helfen

dt_rocky

von Peter D. (peda)


Lesenswert?

Nen Entrarer hab ich gerade nicht zur Hand.

Ich könnte nur in ein ZIP reinschauen.


Peter

von W. W. (dt_rocky)


Angehängte Dateien:

Lesenswert?

Hallo!

Moment Peter.....kommt gleich

Freut mich das du dir das anschaust, hab schon auf 8052.com viele 
nützliche programme und erklärungen von dir gefunden.

Könntest du mir zum besseren verständnis auch kommentare hinzufügen?


Danke im Voraus

dt_rocky

von Peter D. (peda)


Lesenswert?

Good grief !

Das ganze sieht so aus, wie von einem Windows-Programmierer geschrieben, 
der noch nie einen MC in der Hand gehalten hat.

Von dem solltest Du Dir auch erklären lassen, wie das Programm 
funktionieren soll.

Warum die Timer über einen String-Parser initialisiert werden sollen, 
erschließt sich mir nicht, umständlicher gehts nimmer.

Wenn das wirklich so Ressourcen verschlingend programmiert werden soll, 
ist der AT89C52 aber ratzfatz am Anschlag allein nur mit diesem 
Timerzeugs.
Und für die eigentliche Applikation ist dann kein Platz mehr da.

Kurz gesagt, der ganze Ansatz ist schon dermaßen verkorkst, daß ich 
keine Möglichkeit sehe, da noch zu helfen.


Auch nimmt man dafür typischer Weise nur einen Timer, spart ne Menge 
Code (durch den Call-Back müssen die Interupthandler tonnenweise 
Register sichern). Auch ist man dann nicht auf nur 3 Timertasks 
beschränkt.

In der Codesammlung ist so ein Scheduler auf MCs optimiert.
Außer dem Stringparser hat der schon alles, was man braucht.

Ist aber genau so wie Dein Codeschnipselchen auch nicht unbedingt ein 
Anfängerprojekt.


Peter

P.S.:
Der 8051 hat deshalb mehrere Timer, damit man damit verschiedene Sachen 
machen kann, z.B. Timer, Zähler, PWM-Erzeugung, UART-Baudrate.
Und nicht, um sie alle nur als Timer zu vergeuden.

Wenn Dein Prof plötzlich noch die UART haben will, steht er nämlich ganz 
schön blöd da mit seinen 3 blockierten Timern.

von W. W. (dt_rocky)


Lesenswert?

Hallo Peter!

DAAAAAAAAAAANKEEEEEEE das du das gesagt hast. Den Professor habe ich 
dieses Jahr das erste mal und er ist mir gleich so komisch vorgekommen.

Gut ich werde mir das in der Code Sammlung anschauen, aber eigentlich 
wollte er uns Schülern glaub ich nur "zeigen" wie man Timer 
initialisiert bzw. sollten wir diese Funktion aMode machen die einen 
String in der Form

no=1          //Timer Auswahl 0,1 oder 2
time=5ms      //Zeit

Ja und diesen String sollten wir dann bearbeiten und daraus den 
jeweiligen Timer initialisieren. Und jetzt denk ich mir wo du dir schon 
"schwer" tust das zu vestehen wie soll ich das machen wenn ich das Fach 
2mal in der Woche habe. Naja das wusste ich aber schon vorher das man 
sich alles selbst beibringen muss bzw. sollte wenn man etwas können 
will.
Ich habe zurzeit nur Erfahrung mit der Hardware von 8051 usw. hab schon 
ein wie ich finde nicht schlechtes board gemacht aber das wars und jetzt 
möcht ich natürlich sehr viel darüber lernen und natürlich auch wie man 
programmiert. Naja ist noch ein langer Weg bis dahin.....
Wichtig ist der Wille ist da :-)

PS: Er arbeitet nebenbei noch in München bei so einer Firma, und nonstop 
sagt er uns wie oft er schon software projekte gemacht hat die über 
100000zeilen code gehabt haben und wie wichtig das ist das man das 
Programm Woche ja gar Monate vorher strukturiert und alle Funktionen 
beschreibt....

Am besten finde ich wenn er sagt ja da hab ich mal in einer firma 
gearbeitet die ist dann in die brüche gegangen (ja warum wohl :-)) weil 
sie wenig zeit in strukturierung gesetzt haben ..ttztztz

von Peter D. (peda)


Lesenswert?

Naja, Strukturieren ist schon wichtig.

Allerdings bevorzuge ich die Top-Down-Methode, d.h. wenn etwas zu 
komplex wird, teile ich es nach unten hin weiter auf.

Mit der Bottom-Up-Methode besteht schnell die Gefahr, daß man etwas zu 
Tode strukturiert, also viele Sachen einbaut, die hintenraus garnicht 
gebraucht werden.
Man hat dann nur unnötig viel Arbeitszeit verplempert.



Bei der MC-Programmierung versucht man immer, alle zur Compilezeit 
bekannten Sachen schon zur Compilezeit ausrechnen zu lassen.
Also z.B. statt:
1
timerinit( "5ms" );
macht man lieber:
1
#define TIMERDELAY 5e-3
2
timerinit();
Das Define kann der Compiler einfach durch die Zahl ersetzen, kostet 
etwa 6 Bytes Code.
Den String muß aber der MC zur Laufzeit parsen, kostet etwa 500 Byte 
Code und natürlich auch Rechenzeit.

Es spricht aber überhaupt nichts dagegen, auch bei der 
Windowsprogrammierung es so zu machen.

Warscheinlich brauchen Windowsprogramme nur deshalb so lange zum 
Starten, weil viele Konstanten erst umständlich zur Laufzeit ermittelt 
werden, statt schon zur Compilezeit.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.