Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller HT46F47 Sprünge und Verzweigungen


von Christian (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.