Ich kann damit nichts anfangen und
Ich hatte ja schon mal versucht, das zu erklären... nochmal...
Stell Dir mal vor, Du wärst die ALU, der eigentliche Rechenkern des Controllers.
Du sitzt an Deinem Schreibtisch, und hast nur 32 Speicherzellen vor Dir, In diese kannst Du irgendwas reinschreiben, Du kannst mit ihnen Rechenoperationen und Vergleiche durchführen usw.
Diese Zellen sind Deine Rechenregister - in höheren Sprachen wie zB C aber auch Bascom sind die zwar weniger interessant, aber die ALU muß alle Operationen auf diesen Registern (dem Schreibtisch) durchführen.
Im Flur hast Du jetzt 'n großen Schrank, wo Du Rechenergebnisse ablegen und holen lassen kannst (Deine SekretärInnen heißen Load und Store).
Das ist der Speicher, der SRAM - damit kannst Du jetzt zwar schon einiges anfangen, aber hast keinen Blick und keinen Einfluß auf Deine Umwelt.
Die Peripherie.
Dazu steht außerdem ein großes Panel neben dem Schreibtisch, wo alle möglichen Sachen angezeigt werden können (Lampen/Fähnchen, Zählwerke) und wo Du alles mögliche einstellen kannst (Schalter, Taster). Das sind die I/O-Register. Der Mega8 hat 61 davon. Jedes dieser Register wird durch ein Byte realisiert. Einige Funktionen benötigen nur ein einzelnes Bit in einem Register, manche mehrere, manche ein ganzes Register, und manche sogar mehrere Register.
Diese Register - Dein Panel - stellen also Deine Schnittstelle - Schnittstellen - zur Außenwelt dar.
Hier liest Du den Zählerstand des Timers ab, legst fest ob ein Bein Eingang oder Ausgang sein soll, veranlaßt den UART irgendein Zeichen zu senden - ALLES was in irgendeiner Form zwischen dem Controllerkern und seiner Umwelt (Peripherie) ausgetauscht wird, geht durch diese Register.
Wie ich bereits sagte, ist Bascom 'ne Hochsprache. Der Controller versteht kein Bascom oder C, der versteht nur Maschinencode. Deine Hochsprache übersetzt aber Deinen Hochsprachencode in Maschinencode, und der Hochsprachencode kann mehr oder weniger maschinennah sein.
Der höher abstrahierte Code muß natürlich am Ende genau denselben Maschinencode erzeugen wie der maschinennahe (wenn er dieselbe Funktion erfüllen soll).
In Bascom bist Du aber nicht zwingend auf die Verwendung hoch abstrahierter Instruktionen/Funktionen angewiesen, sondern hast außerdem auch den Zugriff auf die I/O-Register (das Panel). Wenn es in Bascom also keine Funktion für irgendwas gibt, was der Controller könnte (oder diese uns nur nicht bekannt ist), kann man das unter Bascom trotzdem über die Register selbst lösen.
Ischarwaiting prüft also, ob der Empfangspuffer des UART leer ist oder nicht. Und zwar einfach indem das UART Receive Complete Bit im Statusregister A des UART ausgelesen wird. Dieses zeigt direkt an, ob ungelesene Daten im Empfangspuffer liegen.
Statt Ischarwaiting auf das Panel blicken zu lassen, kannst Du das auch selbst tun.
Der resultierende Maschinencode wird ähnlich sein.
Manche solcher Bascom-Instruktionen sind recht simpel (Ischarwaiting zB), andere können recht komplex und umfassend sein ('ne Fließkommazahl in einen entsprechenden String umwandeln)
bleib einfach bei Ischarwaiting...