Man kann auf 8051ern und Derivaten, die ja bekanntlich nicht über viele 16bit - Möglichkeiten verfügen, auf einfache Weise 16bit-Zähler realisieren, die zwar nicht so schön sind wie der incw-Befehl des Z8 und Nachfahren (Zilog), aber funktionieren! Entweder durch Ketten von Registern, klar, aber auf nicht gerade die optimale Lösung. Oder mit dem Befehl inc DPTR aber auch mit folgenden zwei Befehlen: setb TR0 clr TR0 vorausgesetzt, der Timer0 läuft im 16bit-Modus (orl TMOD,#1) zählt der Timer dann genau einmal hoch. Dauer der Befehle: 2 Mikrosekunden bei 12Mhz Leider ist das Ergebnis nicht auf Registern abgelegt. Aber man hat einen echten 16bit-Aufwärtszähler realisiert.
Das geht aber nur, wenn keine Interrupts verwendet werden, sonst zählst Du zu viel, wenn ein Interrupt zwischen "setb TR0" und "clr TR0" zuschlägt. Besser ist es aber, man zählt direkt im RAM. Das hat den Vorteil, man verschwendet nicht die kostbaren Timer und kann auch bis zu 64 Zähler bilden: inc 7Fh xch a, 7Fh jnz label1 inc 7Eh label1: xch a, 7Fh Das ändert auch keine Flags, d.h. man kann es auch in Interrupts machen ohne A und PSW zu sichern. Beim AVR sähe das so aus: push r15 in r15, sreg push r24 push r25 lds r24, 0x7F lds r25, 0x7E adiw r24, 1 sts 0x7F, r24 sts 0x7e, r25 pop r25 pop r24 out sreg, r15 pop r15 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.