Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Byte seriell einlesen Kategorie: Programmierung Basic (von Kay - 24.05.2005 8:58)
 Als Antwort auf Re: Byte seriell einlesen von Burt - 23.05.2005 23:16
Kay nutzt:  CC1-Unit V1.1
> Danke, hat geklappt. Aber verstehen tu ichs nicht......
> woher weiss "data" das es mit dem befehl "shl 1"  grade "databit" von rechts
> nach links einschieben soll??!!

das ist erklärbär   :-)
das war eine absichtliche doppeldefinition. du hast 24 (offizielle) bytes
als RAM. das sind (auch) 12 words oder 192 bit.
bei der definition dieser befehiehlst du dem compiler, die namen adressen
zuzuordnen, denn was andres versteht der kontroller ja nicht wirklich.
der compiler geht dabei so vor, dass er words grundsätzlich an "ungeradzahligen"
bytes ausrichtet. deshalb kann, soll und muss man bei CCBasic stehts zuerst
die words und dann die bytes definieren, wenn man keine lust hat, mit deren
ordnungszahlen in konflikt zu geraten und speicherplatz zu verschenken.
allerdings kann man genau damit - wenn das mal nötig ist - eine absichtliche
doppel- oder mehrfachdefinition erreichen.
dazu beispiele:

define a byte
define b word

müsste eigentlich 3 byte variablenspeicher verbrauchen. machts aber nicht weil:
a ist byte[1] und das word kann erst an byte[3] angelegt werden. es ist damit word[2]
und belegt byte[3+4]. das byte[2] bleibt leer und unbenutzt, es sei denn, man definiert
es irgendwo noch mal explizit mit seiner ordnungszahl.
so sollte man es also nicht machen.
andres beispiel:

define c word
define b byte[2]
define c bit[9]

jetzt solltest du bereits erkannt haben, was hier passiert:
obwohl 3 variablen definiert wurden, benötigt diese definition nur
exakt 2 byte speicher. warum? weil byte[2] im bereich des words liegt
und das bit ebenfalls, denn das word belegt bit[1...16].
physikalisch ist das bit[9] ja eigegtnlich bit 0 des byte[2], dazu komme ich aber weiter unten.
man kann also problemlos überlappende speicherbereiche mehrfach definieren.
bei der definition von bits ist die angabe der ordnungzahl übrigens pflicht!
es versteht sich von selbst, dass ich, wenn ich dann den inhalt einer variable
verändere - und wenn es auch nur ein bit ist, somit der inhalt aller variablen
der betreffenden speicherzelle ein anderer ist.

so, zurück zum schieberegister:

define a byte
define b bit[1]

im speicher sieht das byte so aus:
7 6 5 4 3 2 1 <b>0</b>

zu beachten dabei: auch wenn der basic-compiler bits von 1 bis 192 definiert wissen will:
bits werden in der hardware immer von 0 an gezählt und words kennt die hardware
praktisch gar nicht.
ein byte liegt dabei seitenverkehrt, das heißt: die niederwertigste stelle liegt wie
beim taschenrechner rechts. die dicke null markiert den punkt des magischen
data_bit. dieses wird also in abhängigkeit des portstatus gesetzt.
der aufruft der funktion SHift Left macht die variable selbst zum
operanden. damit wandert ihr ihnhalt in einen rechenpuffer und wird durch eine systemroutine
behandelt, wobei ihr das ergebnis am schluss der operation wieder übergeben wird.
man muss sich also nicht darum kümmern, das macht das system.
mit SHL (oder SHR) wird das gesamte(!) bitmuster, das sich in der speicherzelle
befindet, geschoben. prinzipiell ist das übrigens eine multiplikation (oder division) mit 2.

ich hoffe, das war einigermassen bildlich beschrieben. für manche ist es
schwer,  in bits und bytes zu denken und sich das zu nutze zu machen.
aber das kommt mit der zeit :-)
mit dem wissen wird keiner geboren und der CControl ist das optimale
spielding, es zu lernen.

 Antwort schreiben

Bisherige Antworten:

Re: Byte seriell einlesen (von Burt - 25.05.2005 0:47)
    Re: Byte seriell einlesen (von Kay - 25.05.2005 8:29)
    Re: Byte seriell einlesen (von Achim - 25.05.2005 8:12)
        Re: Byte seriell einlesen (von Burt - 25.05.2005 20:43)
Re: Byte seriell einlesen -Nachtrag- (von Kay - 24.05.2005 9:17)
    Re: Byte seriell einlesen -Nachtrag- (von Burt - 24.05.2005 19:35)
        Re: Byte seriell einlesen -Nachtrag- (von Kay - 24.05.2005 21:28)