Zitat:
Zitat von bianchifan
Nach erfolgreicher Studioinstallation habe ich mal den Code gesichtet, da benötige ich etwas Nachhilfe: Ich verstehe die Tabellen mit der Leuchtdauer nicht. Wo kann ich da was nachlesen bzw. wie arbeitet die .byte Anweisung?
|
Die Leuchtdauer-Werte sind Zeitangaben in µs durch 10 dividiert (0,0001s = 100µs -> Tabellenwert 10). Die von der Dynax übertragenen Leuchtdauern sind keine direkten Zeitwerte, sondern nur Indexwerte im Bereich 0...63. Also wird zuerst ins Z-Register der Anfang der Tabelle geladen (flashconv.asm, Z. 39f), dann der übertragene Index-Wert addiert (Z. 41f) und der Wert aus dem Flash gelesen (flashconv.asm, Zeile 43). Bei Indexwerten > 50 (0x32 hex!) wird zusätzlich 100 addiert, um den Bereich zu vergrößern. Die Zeilen davor (ab intfire) bearbeiten den Indexwert; die übertragenen Werte sind nicht der Reihe nach, außerdem werden die oberen beiden Bits abgeschnitten (andi 0x3f); sie haben mit dem Indexwert nichts zu tun.
Die Werte aus der Tabelle werden der Funktion delay im y-Register (ylo/yhi) übergeben. Delay zählt das y-Register runter und ruft bei jedem Schleifendurchlauf delay10 auf, welches eine Verzögerung von ca. 10µs erzeugt.
Mit .byte wird ein 8-Bit-Wert im Flashspeicher des Controllers fest abgelegt. .byte ist in der Doku zu avr-as nachzulesen, daneben gibt´s noch .word (16-Bit-Wert), .dword (32-Bit-Wert) und einige andere Direktiven.
Übrigens: wegen der internen Organisation des FLASH beim ATtiny müssen solche Tabellen immer eine gerade Anzahl von Werten enthalten. Daher ist bei der Tabelle CH_TIMES (Zeitwerte der Wireless-Kanäle) der letzte Wert 0x00 ein Lückenfüller.
Sebi