Erik Werner schrieb:
> Was hst du mit 40 gemeint? In meinem fall zählt MC TA0CCR0 =
> 62499;(0.5s)und dann wird ISR gelöst.Die frage ist wie kann man TA0CCR0
> mehr als 65536= 0.52s
> machen?
Mehr als 65535 geht nicht. 65536 passt schon nicht mehr ins
16-Bit-Register und wird zu 0. Also, der Zähler fängt wieder von vorne
an.
Wenn du längere Zeiten haben willst, musst du in der ISR eine Variable
hochzählen. Bei jedem ISR-Aufruf, der in diesem Fall alle 0,5s
stattfindet, wird diese Variable um 1 erhöht. Wenn du also 20s haben
willst, zählst du bis 40. Das sind dann 40 halbe Sekunden. Brauchst du
eine Minute zählst du 120 halbe Sekunden. Bei einer Stunde sind das dann
7200. Das kannst du treiben, bis du nicht mehr unter den Lebenden
weilst. Dem Controller ist das egal. Der zählt einfach nur +1 bei jedem
Aufruf der ISR. Jede halbe Sekunde.
Nach 1000 Jahren ist er bei 63.113.904.000.
So macht man das immer mit langen Zeiten. Die Register, also die
Timercounter, sind nur für relativ kurze Zeiten direkt zu verwenden.
Wobei man für solche Zeiten zumeist keinen 16-Bit-Timer "verschwendet",
sondern einen 8-Bit-Timer nimmt und diesen auch deutlich schneller
laufen lässt. Z.B. mit 1/100s. Dann ist er nach 1000 Jahren bei
3.155.695.200.000.
mfg.