Hallo, Ich muss in einem Programm eine Wartezeit von 5-10 Minuten Programmieren. Es sollte so ablaufen, wenn Fehler auftritt warte 5 Minuten wenn dann der Fehler immer noch ansteht dann mache was. Jetzt weiß ich weder wie man einen Timer in C Programmiert noch ob es auch anders geht. Habe schon ins Datenblatt vom Controller geschaut doch daraus werd ich nicht schlau. Ich benutze einen Atmel at89c51ac3 und habe den Ausschnitt aus dem Datenblatt über Timer angehängt. Kann mir vielleicht jemand helfen und sagen wie ich einen Timer Programmiert sodass ich eine Wartezeit in meinem Programm einfügen kann? Wäre sehr Dankbar Mfg Christian
Z.B.: http://www.hkln.net/german/timer.htm Größere Zeiten erreicht man einfach dadurch, daß man dann im Timerinterrupt eine Variable runterzählt. Man kann aber auch ohne Interrupt die Überläufe zählen, wenn man nichts sonst zu tun hat. Peter
Danke, aber trotzdem weiß ich nicht wie ich das im C Code eingeben soll. Kann ich alle Parameter da eingeben und dann denen einfach Werte mitgeben oder wie muss das dann aussehen?
hast du mal das Tutorial erfolgreich hinter dich gebracht? Dann sollte man das eigentlich schaffen, oder konkretere Fragen haben.
Hier mal ein Beispiel für nen 1s Timer:
1 | #include <reg51.h> |
2 | |
3 | typedef unsigned char u8; |
4 | |
5 | //#define XTAL 12e6
|
6 | #define XTAL 11.0592e6
|
7 | |
8 | #define TH0_RELOAD (XTAL / 12 / 256 * 50e-3)
|
9 | #define TH0_REMAIN ((TH0_RELOAD - (u8)TH0_RELOAD) * 20 + 0.5)
|
10 | |
11 | bit one_second; |
12 | u8 count_50ms; |
13 | |
14 | |
15 | void t0_init( void ) |
16 | {
|
17 | TMOD = 1; // T0: Mode 1 (16 Bit) |
18 | TR0 = 1; |
19 | ET0 = 1; |
20 | }
|
21 | |
22 | |
23 | void t0_int( void ) interrupt INT_T0 |
24 | {
|
25 | TH0 = -TH0_RELOAD; |
26 | |
27 | if( count_50ms <= (u8)TH0_REMAIN ) // handle remainder |
28 | TH0--; |
29 | |
30 | if( --count_50ms ) |
31 | return; |
32 | |
33 | count_50ms = 20; // 1sec = 20 * 50msec |
34 | one_second = 1; |
35 | }
|
36 | |
37 | |
38 | void main( void ) |
39 | {
|
40 | t0_init(); |
41 | EA = 1; |
42 | for(;;){ |
43 | if( one_second ){ |
44 | one_second = 0; |
45 | P2++; |
46 | }
|
47 | }
|
48 | }
|
Peter
Welches Tutorial? Vom Prinzip her weiß ich ja wie der Timer funktioniert. Ich kenn nur nicht die Syntax wie ich das für den at89c51ac3 in C eingeben muss. Mit welchen Befehl kann ich den Timer starten? Wie kann ich die Zeit einstellen und wie kann ich ein Bit setzen wenn der Timer seine Zeit erreicht hat? Die Parameter sind doch von Controller zu Controller unterschiedlich oder?
@ Christian (Gast) >Vom Prinzip her weiß ich ja wie der Timer funktioniert. Ich kenn nur >nicht die Syntax wie ich das für den at89c51ac3 in C eingeben muss. Ssprich, du kannst gar nicht programmieren. Dann musst du das lernen. Und NEIN, das geht nicht mal fix in 10 Minuten. > Mit >welchen Befehl kann ich den Timer starten? Wie kann ich die Zeit >einstellen und wie kann ich ein Bit setzen wenn der Timer seine Zeit >erreicht hat? Steht im Datenblatt, welche Bit man in welchen Rgistern setzen muss. >Die Parameter sind doch von Controller zu Controller unterschiedlich >oder? Ja. MFG Falk
Christian schrieb: > Welches Tutorial? Dasjenige, welches man dir gleich zu Anfang anempfohlen hatte: Huch schrieb: > http://www.mikrocontroller.net/articles/AVR-GCC-Tu... Oder ist das inzwischen gelöscht worden?
Klaus Wachtler schrieb: >> http://www.mikrocontroller.net/articles/AVR-GCC-Tu... > > Oder ist das inzwischen gelöscht worden? Nö, aber ein AVR ist kein 8051. 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.