mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 Timer Assembler


Autor: Gerd Schanze (drave)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend,

wenn ich mit dem Timer 0 overflowed wird der TF0 zu 1, aber wie lang 
bleibt der eigentlich eins ? Mit meinem Simulator ist der fünfmal durch 
die Schleife nach einem Overflow, wie macht man es wenn er nur einmal 
durch soll und dann abwarten.

org 8000h

mov a,#01h
mov p1,#01h

MOV TMOD,#01
SETB TR0

b1:JNB TF0,$
rl a
mov p1,a
mov a,p1

ljmp


Welcher befehl kopiert aus dem Akku in p1 ohne dass ich mov 2 mal machen 
muss

Autor: Gerd Schanze (drave)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ist klar der b1 muss vor SETB TR0 stehen.

Aber wie kann aus dem Akku kopieren

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerd Schanze schrieb:
> wenn ich mit dem Timer 0 overflowed wird der TF0 zu 1, aber wie lang
> bleibt der eigentlich eins

Entweder bis der Interrupt ausgeführt wird oder bis Du es zurück setzt.


Peter

Autor: Gerd Schanze (drave)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahja was ist mit Akku kopieren ?

Autor: HolgerT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerd Schanze schrieb:
> Ahja was ist mit Akku kopieren ?


Nach mov p1,a haben ACC und P1 den gleichen Inhalt, ein mov a,p1 ist 
unnötig.

-Holger

Autor: Gerd Schanze (drave)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja stimmt.
Mal angenommen ich hab 16-Bit Mode drin. Dann zählt er bei 12 Mhz in 
0,05 sek einmal durch. Was ist wenn ich längere Perioden brauche ?

Autor: HolgerT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal angenommen, Du willst 1-Sek-Perioden haben, dann lade  r1 mit 20, 
lass alle 0.05 Sek den Interrupt auslösen, decrementiere R1 in der 
Interrupt-Service-Routine und prüfe auf Null. Ist R1 == Null, dann ist 1 
Sekunde rum.
-Holger

Autor: Gerd Schanze (drave)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Echt spartanisch sogar c gegenüber ;)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerd Schanze schrieb:
> Echt spartanisch sogar c gegenüber ;)

Was hast Du erwartet?
Assembler ist auf jedem MC umständlicher als C.

Wobei der 8051 noch ganz hübsche Kombibefehle hat (DJNZ, JBC, CJNE), die 
z.B. der AVR nicht hat. Und viele Befehle auch auf dem direkten RAM 
(0x00-0x7F) ausführbar sind.

Z.B. das "DJNZ RAM-Variable" im Interrupthandler braucht nichtmal 
PUSH/POP, um Register zu sichern, da es weder Flags noch den ACCU 
verändert.


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.