www.mikrocontroller.net

Forum: Projekte & Code 16bit-Aufwärtszähler


Autor: Thomas Strauß (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.