nunja, also mit 16MHz macht man 16 millionen Cycles.
Das was du machst, sind 15 millionen schleifendurchgänge einer
For-Schleife in C.
Und das Abarbeiten einer C-Instruktion dieser Gattung dauert mehr als
nur einen Takt.
Was ein wenig mehr deine Rechnung aufgehen lassen würde, wär folgender
asm code:
(natürlich müsstest du den code noch an deine Umgebung anpassen)
mov reg1, 16000000 ;(24 bits sind da ausreichend)
loop0:
inc reg1
xor reg1, x ;setzt zero-flag, wenn reg1 und x gleich sind
jnz loop0 ;springt zu loop0, wenn zero-flag nicht gesetzt ist
Nun addierst du die Anzahl der benötigten Taktzyklen der einzelnen
Instruktionen
inc [reg]
xor [reg], const
jnz (bedingter Sprungbefehl)
zusammen.
16000000 geteilt durch diese Zahl ist x.
Wenn das ganze nun 5 Taktzyklen braucht, läuft die Schleife 3200000 mal
durch. Und das in ziemlich genau einer Sekunde.
sorry für den schlechten code, hab noch nie einen atmel programmiert :)