Hallo Georg-Johann,

> Das sollte selbst mit Bascom gehen, oder ist das wiklich so übel?
übel nicht, aber man muß schon ganz genau aufpassen was man wie verwendet.

Was z.B. bereits absolut tödlich ist, ist die Verwendung von Interrupts ohne "nosave". 32 Register pushen a 2 Takte, 32 Register popen a 2 Takte macht 128 Takte nur für einen einzigen Interruptaufruf.
Und wenn man nosave verwendet, dann kann man die Interrupt Routine imo auch gleich in Assembler programmieren. Dann weis man wenigstens welche Register man pushen/popen muss.

Bei Interesse, zähl einfach mal nach, wieviele Takte ein simples 'incr Var' benötigt.
Das hat nix damit zu tun, das Basic schlecht oder übel währe, zum incr Register kommt schlicht das Laden und Speichern der Daten der Variable hinzu. C ist da auch nicht schneller, nur lässt sich in C einfacher direkt mit Registern arbeiten (wobei ich von C keinerlei Ahnung habe).

> In 400 Takten sind schon Weltreiche erblüht und wieder versunken...
Aber nicht in einer Hochsprache.


@ Wolfram
> Wenn ich in der IR nur auf den Interrupt reagiere, den I/O Port einlese
> und dann in der Vordergrundschleife die gesetzten Flags abarbeite (= 12
> Bit SPI pro aufgetretenem IR), sollte das doch in 400 Zyklen machbar
> sein, oder?

Doch, das ist machbar, zumindest was das Datenhandling angeht.
Um Deine 3x12bits über den SPI zu schieben brauchst Du aber eine beträchtliche Datenrate auf der seriellen Leitung.
36bits alle 20µs sind immerhin 1.800.000 baud. 'nen Kabel kannst Du bei den Datenraten imo nicht mehr dazwischenhängen. Das wirst Du (imo) nicht ohne weiteres stabil ans laufen bekommen.

Ciao,
Werner

P.S. mit 'IRAM' lässt sich eine Bytevariable imo direkt einem Register zuweisen. (Stichwort TINYs ohne eigenes RAM). Leider ist das in der Hilfe mehr als dürftig erklärt. Ob IRAM auch bei nicht TINYs unterstützt wird? -Keine Ahnung!