mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer im Tiny13


Autor: Thorsten Fritzke (thorsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin moin

Irgendwie habe ich gerade leichte schwierigkeiten den Timer im Tiny13
für mein Programm richtig zu verwenden.

Der Codeauszug:

interrupt:
  in savesreg,sreg
  inc r21
  cpi r21,10
  brne _int0
  sbr flags,refresh_display
  clr r21
_int0:
  out sreg,savesreg
  reti

Stück aus dem hauptsprogramm:

ende:
  sbrc flags,refresh_display
  rjmp mai0
  rjmp ende

Das ganze soll alle 10 Interrupts halt das refresh_display bit setzen
in einem selbstgebastelten Flag register, damit das Hauptprogramm das
display mit neuen Daten füttert.

Das tolle ist: es geht nicht :)

wenn ich in der interrupt routine "manuell" ein zeichen immer wieder
auf das display ausgebe, funktioniert das einwandfrei. ergo= der
timerinterrupt funktioniert.

allerdings halt nicht mehr in dieser obigen kombination.

Umgebung: Tiny13,AVR Studio,PonyProg

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist aufgefallen:

  sbr flags,refresh_display

Richtig wäre:

  sbr flags,1<<refresh_display

sbr/cbr erwartet nicht die Bitnummer (wie sbrs/sbrc) sondern die
Bitmaske...

Den Rest des Codes habe ich nicht geprüft.

...

Autor: Thorsten Fritzke (thorsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend

Danke Hannes. Das war der eine Grund.
Der andere war, dass SBR REG,0 nicht funktioniert, sondern dass SBR
REG,1 das Bit "0" anspricht.. somit war auch noch in meinen
Definitionen ein Fehler.

Funktioniert jetzt, danke.

mfg

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na der zweite Grund entspricht doch dem Ersten...
Ist doch das gleiche Problem, nur eben mit Zahl statt mit Platzhalter.


Aber tröste dich, das passiert mir auch gelegentlich. Jedenfalls freut
es mich, dass es nun funktioniert.

Bit- & Bytebruch...
...HanneS...

Autor: Thorsten Fritzke (thorsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne ich glaub das verstehst du jetzt falsch..

in meiner header datei war "refresh_display" als "0" definiert.
weils "bit 0" ansprechen sollte..

die funktion SBR setzt das bit 0 allerdings wenn mann SBR REG,1
benutzt..

ich zählte von 0-7, SBR zählt anscheinend von 1-8.

mfg

Autor: Hartmut Gröger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Esgibt einen Unterschied zwischen den Befehlen SBI und SBR (abgesehen
vom Ziel). Bei SBI gibt der Parameter die Bitnummer (0..7) an.
Der Parameter von SBR ist eine Bitmaske (0..255). Das heisst wenn du 0
benutzt wird kein Bit gesetzt. Der Wert 1 den du dann benutzt hast
entspricht der Maske für Bit 0.

MfG HG

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hartmut:
Danke, genau das meine ich die ganze Zeit...

Thorsten:
Du solltest öfters mal die Online-Hilfe zu AVR-Studio benutzen. Cursor
auf einen (unklaren) ASM-Befehl setzen und F1 drücken. Das ist manchmal
sehr aufschlussreich. Leider kommt man damit nicht an die Hilfe zu den
Direktiven und Operatoren, die erreichst du aber über den Menüpunkt
HELP.

Bit- & Bytebruch...
...HanneS...

Autor: Thorsten Fritzke (thorsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin

Okay ich denke ich habs jetzt auch verstanden, was Ihr meint. Danke
euch.

Bei unklaren Befehlen hab ich mir bis jetzt immer das Atmel Datenblatt
mit dem relativ ausfühlich beschriebenen Befehlssatz angeschaut.
Werds auch mal mit der Hilfe probieren.

mfg

Autor: Mark Struberg (struberg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SBR ist in Wirklichkeit nur ein bitwise OR.
CBR ein bitwise AND

sbr R23, 8
und
ori R23, 8

werden zB beide auf 0x6078 übersetzt.

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.