> Gibt es auch Funktionen, die noch längere Wartezeiten ermöglichen
> als die 65000 Takte mit dem 16 Bit Zähler?
Hier verwechselst du wohl gleich mal alles Mögliche.
Erstens, mit einem 16-bit-Zähler kann man sehr viel mehr als nur 64
Ki Takte zählen, da man ihn noch mit einem Vorteiler versehen kann,
der bis zu 1:1024 teilt, das macht also maximal 64 Mi Takte bis zum
Überlauf mittels Hardware. Dann kann man natürlich noch den Overflow-
Interrupt auswerten, und softwaremäßig N weitere Bytes ,,nach oben''
zur Zählweite hinzufügen.
Zweitens, die Funktionen in <avr/delay.h> gestatten zwar auch nur 64
Ki als maximales Argument (in _delay_loop_2), aber das teilt sich auch
nochmals durch 4 Takte pro Schleifendurchlauf, also 256 Ki Takte
maximal. Die kann man natürlich noch einfach schachteln:
1 | #include <stdint.h>
|
2 |
|
3 | #define F_CPU 8000000UL
|
4 | #include <avr/delay.h>
|
5 |
|
6 |
|
7 | ...
|
8 | uint8_t i;
|
9 | ...
|
10 | /* 1 Sekunde warten */
|
11 | for (i = 0; i < 100; i++)
|
12 | _delay_ms(10);
|