Hi
Was ist an Assembler so schwer ? Es ist die einfachste Art, ein Programm
zu coden und zu wissen, was sich auf dem Chip tut. Wer C beherscht, weiß
noch lange nicht, wie oft ein Wert in den Registern manipuliert wird.
Erkann nicht so einfach sagen, dieser Programmabschnitt wird in 31 µSek
durchlaufen. Aber das braucht er vermutlich auch nicht. Andererseits,
grad bei Bitbearbeitung ist's nicht verkehrt, wenn die Manipulation der
Werte im Programm "sichtbar" ist. Und umfangreiche Programme lassen sich
in C genauso unübersichtlich wie sich Assemblerprogramme mit den
richtigen Methoden übersichtlich gestalten lassen können. Von daher ist
es kein Grund, Assemblerroutinen von vorn herein abzulehnen. Ich glaube
eher, das liegt nicht an der Programmiersprache, sondern daran, das ein
Anderer seine Gedanken zu einem Programm geformt hat. Und wenn eines
schwierig ist, ist es Programme anderer zu analysieren. Geht mir mit C,
Basic, Pascal und Assembler und diversen anderen Steuerungs-Programmen
genauso. Nur meine eigenen Versuche sind völlig logisch und klar....
(Ironie aus) Übrigends sehen es meine Kollegen genauso.
Versuch doch mal, die in den Tutorialsbesschriebenen Programme
abzuarbeiten. Soviel Code ist's ja nicht und man kann sehr leicht
nachvollziehen, was da geschieht. Hast du die Timer verstanden, ist's
mit dem Blinken kein Problem mehr. Dafür ist eine XOr Verknüpfung
bestens geeignet. Ich habe mir in meine Programme ein Blink-Maske
gebaut.
1 | LDS R10, Blink_Mask ; Register 10 mit Variable laden
|
2 | LDI R11, 0b11111111 ; Register 11 mit logischen 1sen belegen
|
3 | (nicht wegen dem Format meckern, ich weiß, das es auch anders geht)
|
4 | EOR R10, R11 ; XOr mit 1 ergibt in Variable andere Bitlage
|
5 | STS Blink_Mask, R10 ; Variable zurückschreiben
|
6 | LDS R11, Ausgabe ; Ausgabewert holen
|
7 | AND R11, R10 ; Und BlinkMaske
|
8 | STS Ausgabe ; und zurückschreiben, Ausgabe erfolgt in eigener UP
|
Damit erhälst du eine Blinkende Ausgabe, wenn du diese Zeilen in
bestimmten Zeitintervallen aufrufst.
Gruß oldmax