Hallo,
was sagt ihr dazu:
Ich hab bei meinem Programm im hintergrund einen Secundentimer Laufen:
Dieser wird über Timer2 gesteuert und geht erst wieder auf null, wenn
ein Jahr erreicht ist (oder VCC aus/ ControllerReset).
Code:
1 | ISR(TIMER2_COMP_vect)
|
2 | {
|
3 | static unsigned int iCount = 0;
|
4 |
|
5 | TCNT2 = (TCNT2 - COUNT_VAL); // set timer2 count register value
|
6 |
|
7 | iCount++;
|
8 |
|
9 | if (iCount == COUNT_STEPS)
|
10 | {
|
11 | centralTimeSec++;
|
12 | }
|
13 | }
|
Nun ist das als ausgabe für ein LCD natürlich ungünstig:
Deshalb hab ich folgende routine geschrieben:
Diese soll aus der dauerhaft hochlaufenden Secundenzahl
eine Zeitausgabe hh:mm:ss machen.
1 | if( (centralTimeSec) % 60) == 0 )
|
2 | {
|
3 | secCounter++;
|
4 | }
|
5 |
|
6 | if ( centralTimeSec < 59)
|
7 | secCounter = 0;
|
8 |
|
9 | testSec = (centralTimeSec) - (secCounter * 60);
|
10 |
|
11 | if( ( testSec == 0 ) && (centralTimeSec) != 0) )
|
12 | testMin = testMin++;
|
13 |
|
14 | if( testMin > 59)
|
15 | {
|
16 | testMin = 0;
|
17 | testHour = testHour++;
|
18 | }
|
Was sagt ihr dazu, is das gut oder geht das besser????
Wie ist das mit der Multiplikation, die braucht nicht so viel rechenzeit
wie beispielsweise eine Division??
Gruß