Hallo, ich habe mir ein kleines Lernpaket von Konrad gekauft "Mikrocontroller - verstehen und anwenden". Man muss mehrere kleinere Projekte aufbauen und den Mikrocontroller (HT46F47) über TPS (Zwei Taster) programmieren. Nun bin ich im Kapitel "Sprünge und Verzweigungen" angekommen und ich tue mich etwas schwer dies zu verstehen. Unter anderem steht dort, dass das Sprungziel nur mit mit 4 Bit angegeben werden kann und es ein zusätzlichen Befehl gibt, der das High-Nibble der Adresse festlegt. So ergibt sich laut Heft ein Adressraum von 0-255. Der Mikrocontroller fasst nur 128 Bytes, laut Heft Bereich 00 bis 7F (dezimal 0 bis 127) und ist somit in 8 Seiten eingeteilt. Fragen: 1. Das Sprungziel kann nur in 4 Bit angegeben werden und das ist afaik maximal 15 (Dezimal). Richtig? 2. Was bedeutet High-Nibble und wieso ergibt sich ein Adressraum von 255? 3. 00 bis 7F entspricht laut Heft dezimal 0-127, wie ist das zu verstehen? 7 Hexadezimal entspricht doch auch 7 Dezimal und F einer 15 ? 4. Welche Seite muss ich angeben wenn ich z.B. zur Adresse 115 springen möchte? Wäre ganz nett wenn mir das jemand nochmal mit anderen Worten erklären könnte. Danke Grüße Christian
Christian schrieb: > 1. Das Sprungziel kann nur in 4 Bit angegeben werden und das ist afaik > maximal 15 (Dezimal). Richtig? Ja richtig. Von 0 bis 15. Also 16 verschiedene Werte. > 2. Was bedeutet High-Nibble und wieso ergibt sich ein Adressraum von > 255? Du kennst 1 Byte? Ein Byte ist etwas das aus 8 Bit besteht, mit den Bits 7 bis 0
1 | 7 6 5 4 3 2 1 0 |
2 | +---+---+---+---+---+---+---+---+ |
3 | | | | | | | | | | |
4 | +---+---+---+---+---+---+---+---+ |
aus praktischen Gründen unterteilt man 1 Byte weiter in 2 sog. Nibbles, also 4 Bit Einheiten:
1 | 7 6 5 4 3 2 1 0 |
2 | +---+---+---+---+---+---+---+---+ |
3 | | | | | | | | | | |
4 | +---+---+---+---+---+---+---+---+ |
5 | |
6 | | | | |
7 | +-- Nibble -----+--- Nibble ----+ |
Zu den 255. Na, ja: wie weit kann man denn mit 1 Byte zählen? Wieviele unterschiedliche Zustände gibt es denn in 1 Byte mit in Summe 8 Bit? > 3. 00 bis 7F entspricht laut Heft dezimal 0-127, wie ist das zu > verstehen? 0x7F sind ja 7 Bit, alle auf 1. Welcher Dezimalzahl entspricht denn das? Oder anders ausgedrückt: wie weit kann man denn mit 7 Bit zählen.
1 | mit 1 Bit kann man bis 1 zählen ( 2 - 1 ) |
2 | mit 2 Bit kann man bis 3 zählen ( 4 - 1 ) |
3 | mit 3 Bit kann .... 7 zählen ( 8 - 1 ) |
4 | mit 4 Bit .... 15 zählen ( 16 - 1 ) |
5 | 5 31 ( 32 - 1 ) |
6 | 6 63 ( 64 - 1 ) |
7 | 7 127 ( 128 - 1 ) |
8 | 8 255 ( 256 - 1 ) |
> 7 Hexadezimal entspricht doch auch 7 Dezimal und F einer 15 ? Ja, aber du musst das auch richtig zusammensetzen. Die Dezimalzahl 23 ist ja auch nicht einfach 2 entspricht einer dezimalen 2 und 3 einer dezimalen 3. Da fehlt noch eine Zutat: nämlich das der komplette Ziffernwert von der Stelle abhängt, an der diese Ziffer auftaucht. Die 5 in 5x bzw. in x5 hat eine andere Wertigkeit, je nachdem an welcher POsition sie ist. Einmal sind das 5*10 (also 50), und das andere mal nur 5. Darum nennt man solche Zahlensysteme ja auch Stellenwertsysteme. Bei Hexadezimalzahlen ist das auch nicht anders. Die Zahl 7F wäre dezimal dann 7 * 16 + 15 = 127, denn die 7 an der 'Zehner-Position' hat die Wertigkeit 16 Die 16 übernimmt die Rolle, die in deinem gewohnten System die 10 hat. Daher ja auch Hexadezimal. > 4. Welche Seite muss ich angeben wenn ich z.B. zur Adresse 115 springen > möchte? Wandle dir die Zahl in eine Hex-Zahl. Das untere Nibble ist die Adresse, das obere Nibble ist die Seite. Und praktischerweise sind die Nibble genau so angeordnet, das jedes Nibble einer der beiden Ziffern einer Hexadezimalzahl entspricht. In der Hexadezimalzahl 7F ist also das höherwertige Nibble 7 und das niederwertige Nibble ist F. Die Seite ist also 7 und die Adresse innerhalb der Seite ist F. Für beides kann man leicht das Bitmuster angeben. Genau darauf begründet sich auch die Beliebtheit des Hexadezimalsystems auf dieser Programmierebene. Weil es eine einfache 1:1 Zuordnung von Hex-Ziffern (und damit den Nibbles) zu den Bitmustern der Ziffern und damit zum kompletten Bitmuster eines Bytes gibt. Etwas das mit Dezimalzahlen bei weitem nicht so gut funktioniert. Da muss man immer rechnen, während man bei Hex-Zahlen einfach nur eine einfach zu merkende Tabelle im Kopf haben muss um die Binärrepräsentierung einer Zahl zu ermitteln. Du solltest noch mal ein bischen über grundlegende Eigenschaften von Zahlensystemen nachdenken. Insbesondere über Stellenwertsysteme und welche Eigenschaften sich daraus ergeben, dass eine Ziffer je nachdem an welcher Stelle sie in einer Zahl auftaucht eine andere Wertigkeit hat. Und dann nochmal in deinem Heft über Dezimal-Hex Umrechnung bzw. umgekehrt Hex nach Dezimal nachlesen und sinnieren bzw. Übungen dazu machen.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.