Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage: µC 8Bit, 16Bit &32 Bit


von Martin M. (silent_max)


Lesenswert?

Hallo und guten Morgen liebe Gemeinde.

Ich hätte da eine kurze Verständnisfrage bzgl. Mikrocontrollern.

Es gibt ja 8 Bit, 16 Bit und 32 Bit Controller.

Nun zur Frage:

Hat das vielleicht mit der Verarbeitung der Bits zu tun?

Ich denke mir halt folgendes:

8 Bit: 0 bis 255 Zustände
16 Bit: 0 bis 64... Zustände
32 Bit: 0 bis .... Zustände

Hat das mit der Addition und Subtraktion der einzelnen Bits zu tun?

Danke für die Antworten im Voraus.

Gruß

Max

von Dennis S. (eltio)


Lesenswert?

Hallo Max,

das verstehst du etwas falsch: mit "Zuständen" hat das nichts zu tun 
(was verstehst du darunter?). Die Bitangabe bei den Controllern gibt die 
Breite das Datenbusses an. Unter dem Stichwort wirst du auch hier im 
Forum einiges finden.

Gruß
Dennis

von Martin M. (silent_max)


Lesenswert?

Sorry, da habe ich mich falsch ausgedrückt.

Ich meinte statt "Zustände" die unterschiedlichen Bitkombinationen.

Z. B.

1. Bit = 0b00000000
2. Bit = 0b00000001
3. Bit = 0b00000010
4. Bit = 0b00000011
5. Bit = 0b00000100
6. Bit = usw.

Ich dachte, dass bei einem 16 Bit Controller das Bit doppelt so groß 
ist.

Oder habe ich das etwas falsches verstanden?

Gruß

Max

von Dennis S. (eltio)


Lesenswert?

Ähm... du hast einiges falsch verstanden, sorry!

1 Bit ist immer gleich groß.. Lies dir doch erstmal ein paar 
Wiki-Artikel durch, ordne deine Gedanken und frag nochmal konkret nach!

Stichworte: Adressbus, Datenbus, Mikrocontroller, Zahlenformate, 
Bitverarbeitung, ...

Und nochmals: die Zahl beim Controller ist die Datenbusbreite, also die 
Anzahl der Bits, die gleichzeitig "geladen" werden können.

Gruß
Dennis

von Max H. (hartl192)


Lesenswert?

Ein 8bit uC kann mit zahlen zwischeb 0 und 255 rechnen, ein 16bitterit 
Zahlen zwischen 0 und 65536 und ein 32bitter mit Zahlen zwischen 0 und 
(2^32)-1.

von Thomas (Gast)


Lesenswert?

Max H. schrieb:
> Ein 8bit uC kann mit zahlen zwischeb 0 und 255 rechnen, ein
> 16bitterit
> Zahlen zwischen 0 und 65536 und ein 32bitter mit Zahlen zwischen 0 und
> (2^32)-1.

... in einem Zyklus :-)
auch ein 8Bit uC kann mit 32Bit Zahlen rechnen. Er kriegt aber halt nur 
8 Bit in einem Zyklus auf seinen Datenbus. Somit muss er in mehreren 
Zyklen rechnen bei größeren Zahlen.

Der C-Compiler abstrahiert das aber weg.

von oldmax (Gast)


Lesenswert?

Hi
Ich bin heut mal wieder etwas kleinlich...
>Ein 8bit uC kann mit zahlen zwischeb 0 und 255 rechnen, ein 16bitterit
>Zahlen zwischen 0 und 65536 und ein 32bitter mit Zahlen zwischen 0 und
>(2^32)-1.
Muss heißen
ein 16 bitter mit Zahlen zwischen 0 und 65535. Also 1 Zahl weniger...
Schönes Wochenende
Oldmax

von Peter II (Gast)


Lesenswert?

oldmax schrieb:
> Muss heißen
> ein 16 bitter mit Zahlen zwischen 0 und 65535. Also 1 Zahl weniger...
> Schönes Wochenende
> Oldmax

also kann er nicht mit -5 rechnen?

von Joachim J. (felidae)


Lesenswert?

will man zwei 16bit zahlen mit einander Addieren und man hat einen 8bit 
µC wird die Addition in zwei getreten schritten vollzogen.

hat man eine 16bit µC, so geht das in einem Schritt.
1
8bit µC:
2
3
zahl 1=32:   00000000|0010000  
4
zahl 2=265:  00000001|0000000
5
6
schritt 1:   00100000 + 00000000 = 00100000 kein übertrag
7
schritt 2:   00000000 + 00000001 = 00000001
8
9
ergebniss 288:   00000001|00100000

von Max H. (hartl192)


Lesenswert?

oldmax schrieb:
> Muss heißen
> ein 16 bitter mit Zahlen zwischen 0 und 65535. Also 1 Zahl weniger...
Sry, Tippfehler. Bei 8 und 32 bit war's ja richtig...

Peter II schrieb:
> also kann er nicht mit -5 rechnen?
In der Zweierkomplement Darstellung kann der 16bitter mit Zahlen 
zwischen -32768 und +32767 rechnen.

Für einen n-bitter: zwischen -2^(n-1) und +2^(n-1)-1

von oldmax (Gast)


Lesenswert?

Hi
noch mal ein Nachtrag:
Datenbusbreite = Aussage, wieviele Bytes mit einer Adressierung in den 
Controller gelangen. Bspw. Ein 4 Bit Befehl in Assembler muss bei einem 
8 Bitter mit vier Speicherzugriffen erfolgen. Zwischendurch wird 
geprüft, ob ein weiterer Speicherzugriff erforderlich ist. So ist z, B. 
beim Z80 ein CALL Befehl 4 Byte lang: 2 Byte Befehle, 2 Byte 
Sprungadresse.
Ein 16 Bitter braucht dafür nur 2 und ein 32 Bitter nur einen einzigen 
Speicherzugriff und schups, weiß er, was zu tun ist. Zum rechnen nutzen 
sie schon lange Arithmetikprozessoren.
Gruß oldmax

von (prx) A. K. (prx)


Lesenswert?

oldmax schrieb:
> Bspw. Ein 4 Bit Befehl in Assembler muss bei einem
> 8 Bitter mit vier Speicherzugriffen erfolgen.

?

> beim Z80 ein CALL Befehl 4 Byte lang: 2 Byte Befehle, 2 Byte
> Sprungadresse.

Eher 3. 1x Opcode, 2x Adresse.

> Zum rechnen nutzen sie schon lange Arithmetikprozessoren.

Arithmetikeinheiten, nicht Arithmetikprozessoren. Die Zeit separater 
Arithmetikprozessoren ist lange vorbei.

von Marian (phiarc) Benutzerseite


Lesenswert?

Uh also ganz ehrlich, es würde einigen (auch dem TO) eher Helfen ein 
Rechnerarchitektur-Skript zu lesen oder zumindest zu überfliegen.

Die "Bittigkeit" einer MCU hat doch nix damit zu tun, mit welchen Zahlen 
die rechnet. Oder welche Werte darstellbar (was soll das hier überhaupt 
heißen...) sind.

Dennis S. schrieb:
> Die Bitangabe bei den Controllern gibt die
> Breite das Datenbusses an.

Und nichts anderes.

Max H. schrieb:
> Ein 8bit uC kann mit zahlen zwischeb 0 und 255 rechnen, ein
> 16bitterit
> Zahlen zwischen 0 und 65536 und ein 32bitter mit Zahlen zwischen 0 und
> (2^32)-1.

Max H. schrieb:
> Peter II schrieb:
>> also kann er nicht mit -5 rechnen?
> In der Zweierkomplement Darstellung kann der 16bitter mit Zahlen
> zwischen -32768 und +32767 rechnen.
>
> Für einen n-bitter: zwischen -2^(n-1) und +2^(n-1)-1

A. K. schrieb:
> oldmax schrieb:
>> Bspw. Ein 4 Bit Befehl in Assembler muss bei einem
>> 8 Bitter mit vier Speicherzugriffen erfolgen.
>
> ?

Er meint wohl eher 4 Byte Befehl, dann passt es auch mit vier 
Speicherzugriffen.

von Thomas E. (thomase)


Lesenswert?

Marian B. schrieb:
> Dennis S. schrieb:
>> Die Bitangabe bei den Controllern gibt die
>> Breite das Datenbusses an.
>
> Und nichts anderes.

Also sind der 68000 und der 80386SX 16-Bitter und der 68008 sowie der 
8088 8-Bitter? Oder doch was anderes?

mfg.

von (prx) A. K. (prx)


Lesenswert?

Marian B. schrieb:
>> Die Bitangabe bei den Controllern gibt die
>> Breite das Datenbusses an.
>
> Und nichts anderes.

Dummerweise ist man bei diesem Kriterium bei Mikrocontrollern auf eine 
Klassifizierung des Hersteller angewiesen. Denn oft gibt es keinen 
extern sichtbaren Datenbus - und wenn doch, dann ist der nicht 
zwangsläufig so breit wie die internen Busse.

Und bei vielen Prozessoren jenseits der hier üblichen ohne 
Betriebssystem arbeitenden Mikrocontroller läufst du mit diesem 
Kriterium auf. Mangels klarer Erkenntnis, welcher der etlichen 
unterschiedlich breiten Datenbusse dafür zu Rate gezogen werden sollte.

Der Versuch, ein festes und einheitliches Kriterium von für das N in "N 
Bit Prozessor" zu definieren, ist problematisch. Irgendwo gibts immer 
ein Beispiel, wo das in die Hose geht.

von hinz (Gast)


Lesenswert?

Dennis S. schrieb:
> 1 Bit ist immer gleich groß.

Nö, gibts in 0,33 , 0,5 , 5,0 , 15 , 30 und 50 Liter.

von (prx) A. K. (prx)


Lesenswert?

Thomas Eckmann schrieb:
> Also sind der 68000 und der 80386SX 16-Bitter und der 68008 sowie der
> 8088 8-Bitter? Oder doch was anderes?

Klar doch. Und aktuelle x86er sind 256-Bitter. Was doch eine ziemliche 
Entwicklung ist, angesichts der vor noch nicht allzu langer Zeit gerne 
verwendeten 16-Bitter namens Athlon64 (im Hypertransport). ;-)

von Max H. (hartl192)


Lesenswert?

Marian B. schrieb:
> Die "Bittigkeit" einer MCU hat doch nix damit zu tun, mit welchen Zahlen
> die rechnet. Oder welche Werte darstellbar (was soll das hier überhaupt
> heißen...) sind.
>
> Dennis S. schrieb:
>> Die Bitangabe bei den Controllern gibt die
>> Breite das Datenbusses an.
>
> Und nichts anderes.
Glaubst du wirklich, dass der TO mit dem Wort "Datenbus" viel anfangen 
kann? Da die ALU meistens gleich viele Bits hat wie der Datenbus, könnte 
man es vereinfacht so sagen...

von Marian (phiarc) Benutzerseite


Lesenswert?

Und oft genug hat sie das nicht, wenn der Prozessor überhaupt nur eine 
ALU hat.

Zudem ist die Breite von internen Strukturen für den C-Programmierer 
weitestgehend irrelevant, und für den C-Programmieranfänger erst recht. 
Wenn es also darum geht, ist die Einordnung "8-Bit für kleine Sachen 
(was ist klein?), 16-Bit wenns etwas mehr sein darf (aha) und 32-Bit 
wenn es richtig was zu tun gibt (?)" hilfreicher bzw. auch nicht, weil 
das wieder eine Nicht-Aussage ist.

un nu?

von (prx) A. K. (prx)


Lesenswert?

Marian B. schrieb:
> Und oft genug hat sie das nicht, wenn der Prozessor überhaupt nur eine
> ALU hat.

Oder wenn die ALU nur 4 Bits hat (Z80). Oder gar nur eines (6804).

von Kein Name (Gast)


Lesenswert?

Nanu, sowohl beim Z80 als auch beim 6804 finde ich nur Blockschaltbilder 
mit 8 Bit Registern. Woher hast du diese Info?

von (prx) A. K. (prx)


Lesenswert?

Kein Name schrieb:
> Nanu, sowohl beim Z80 als auch beim 6804 finde ich nur Blockschaltbilder
> mit 8 Bit Registern. Woher hast du diese Info?

Bei der Z80 ALU hat sich das schon länger rumgesprochen. Im Datasheet 
steht es natürlich nicht drin.
http://www.righto.com/2013/09/the-z-80-has-4-bit-alu-heres-how-it.html

Beim M6804 ist offiziell:
http://bitsavers.trailing-edge.com/pdf/motorola/6804/M6804_MCU_Manual_Sep85.pdf

von Max H. (hartl192)


Lesenswert?


von Dennis S. (eltio)


Lesenswert?

Max H. schrieb:
> Marian B. schrieb:
>> Die "Bittigkeit" einer MCU hat doch nix damit zu tun, mit welchen Zahlen
>> die rechnet. Oder welche Werte darstellbar (was soll das hier überhaupt
>> heißen...) sind.
>>
>> Dennis S. schrieb:
>>> Die Bitangabe bei den Controllern gibt die
>>> Breite das Datenbusses an.
>>
>> Und nichts anderes.
> Glaubst du wirklich, dass der TO mit dem Wort "Datenbus" viel anfangen
> kann? Da die ALU meistens gleich viele Bits hat wie der Datenbus, könnte
> man es vereinfacht so sagen...

Naja, zumindest bringt ihm ein klar definierter Suchbegriff (Hilfe zur 
Selbsthilfe!) ganz bestimmt mehr als die nachfolgende "esotherische" 
Diskussion. Ich halte es eben für sinnvoller erstmal mit Grundlagen 
anzufangen als gleich das komplette Fachgebiet mit allen Feinheiten 
auszubreiten.

Gruß Dennis

Edit: Zumal ich selber nur einen Bruchteil der ET / TI beherrsche... :-)

von Martin M. (silent_max)


Lesenswert?

Erst einmal vielen Dank für die bisherigen Infos und die dafür rege 
Mitarbeit.

Aber wie Dennis schon gut auf den Punkt gebracht hat... "Hilfe zur 
Selbsthilfe". Klar sagen mir die Harvard- und Von-Neumann Archicktektur 
und der Unterschied zwischen RISC und CISC etwas, aber anscheinend habe 
ich es (noch) nicht richtig verstanden.

Also bitte ganz konkret.... Was ist wichtig, um den Unterschied zwischen 
8, 16 und 32 Bittern zu verstehen?

Datenbus, Rechenwerk und ... ??

Vielen Dank für die Antworten im Voraus.

Gruß

Max

von Max H. (hartl192)


Lesenswert?

Datenbus

von klausro (Gast)


Lesenswert?

Max H. schrieb:
> Datenbus

Meines Erachtens nicht, weil die Breite des Datenbusses nicht eindeutig 
ist vgl. intern und extern.: Es zählt eher die Breite der Register. Der 
68000 war ein 32 Bit Prozessor, auch wenn er extern nur einen 16 Bit 
Datenbus hatte. Die Breite des Datenbusses ist eigentlich nur für die 
Geschwindigkeit relevant, während die Breite eines Registers essentiell 
ist und sich auf die ganze Architektur auswirkt. Bei der Datenbusbreite 
kann es ja auch sein, dass er intern z.B. 32 Bit breit ist und nur 
extern, aus Layout- oder Kostengründen 16-bittig (oder gar 8-bittig, 
siehe 68008) ausgeführt wurde. Im allgemeinen gilt ja, das die interne 
Breite des Datenbusses gleich der Bitbreite der Register ist. Es gab 
z.B. einige OMAP Prozessoren von TI (z.B. OMAP 1710), die extern auch 
"nur" einen 16 Bit Datenbus hatten - auf das interne RAM und Flash ROM 
(auch Cache) wurde aber 32 bittig zugegriffen. Im Prinzip waren das 32 
Bit ARM Prozessoren.

Allerdings gibt es wohl keine eindeutige Definition. Natürlich gibt es 
auch Sonderfälle, z.B. die Saturn CPU von den alten HP Taschenrechnern 
(HP48). Die arbeitete intern mit 64 Bit Registern, hatte aber extern nur 
einen 4 Bit Datenbus. Auch brauchte sie jede Menge Taktzyklen für 
einfache Operationen, von RISC keine Spur. Ich würde diese CPU jetzt 
auch nicht eine 64 Bit CPU nennen, allerdings auch keine 4 Bit.

von klausro (Gast)


Lesenswert?

klausro schrieb:
> Es zählt eher die Breite der Register

Noch eine Ergänzung: Wichtig ist natürlich auch, ob die elementaren 
Befehle der CPU die Grundrechenarten ist der kompletten Breite der 
Register bewerkstelligen können, also primär load, store, add, sub, cmp 
und die Bitoperationen.
Zwar lief grad' bei den CISC Prozessoren auch oft ein Mikrocode ab (z.B. 
benötigte der 68000 für eine 16x16 -> 32 Bit Multiplikation IMHO 71 
Taktzyklen), aber er benötigte dazu trotzdem nur einen Maschinenbefehl.

Also der Versuch einer Definition: Entspricht die Bit-Breite des 
(internen) Datenbuses der Bit-Breite der Register UND können die 
elementaren Operationen (s.o.) in 1 bis wenigen Taktzyklen abgearbeitet 
werden, so entspricht die Wortbreite der CPU dieser Bit-Breite.

von HolgerBerlin (Gast)


Lesenswert?

8 Bit:                             11000011  256 verschiedene 
Zahlen/Zustände
16 Bit:                   10101010 11000011  65535 verschiedene Zahlen
32 Bit: 11100111 10110110 10101010 11000011  4,3 Millionen verschiedene 
Z.

Ein 8 Bit Prozessor/Microcontroller arbeitet Intern mit 8 Bit Registern 
(also Speicherstellen), ein 16 Bit Prozessor mit 16, ein 32 Bit 
Prozessor mit 32 Bits.
Je mehr Bits, desto grössere Zahlen kann er Intern verarbeiten.
Will man bei einem 8 Bit Prozessor z.B. die Zahl 10.000 verarbeiten, 
muss man mit 2 Registern arbeiten, und Bits von einem in das andere 
Register verschieben oder berechnen. Das ist dann bei einem 16 Bit 
Prozessor wesentlich einfacher.

Es gibt auch Anwendungen/Programme, wo 8 Bit ausreichen.
Ich hab z.B grad einen 16 Bit Controller, aber für eine Berechnung 
bräuchte ich ein paar Bits mehr. (Warum hat der nicht wenigstens ein 
einzelnes 24 oder 32 Bit Register??)

von MCUA (Gast)


Lesenswert?

>Ein 8 Bit Prozessor/Microcontroller arbeitet Intern mit 8 Bit Registern
>(also Speicherstellen), ein 16 Bit Prozessor mit 16, ein 32 Bit
>Prozessor mit 32 Bits.
Stimmt so nicht, weil ua Register unterschidl. breit sein können.
Was man sagen kann ist, dass die Bit-Breite der Register, die norm. für 
Daten-berechnung genommen werden (also bsp nicht IndexRegister) als Mass 
für die CPU-Bezeichnung genommen wird.
Insbes hat die Adressierungsbreite (bsp 8Bit CPU mit 16 oder 24Bit 
Adr-Bereich) damit nichts zu tun (obschon die Adr-Berechnung umso 
einfacher geht, je breiter auch die Datenregister sind).
Und selbst wenn man die Adressierungsbreite berücksichtigt, bleibt noch 
offen, wieviele OPcode-bits die CPU denn auf einmal lesen kann; ganz zu 
schweigen davon wie viele Takte sie denn jeweils benötigt.

von Axel S. (a-za-z0-9)


Lesenswert?

Ich würde die maximale logische Breite der ALU zur Unterscheidung 
verwenden. Also die Datenbreite, die die ALU in einem Befehl 
verarbeitet. Und das über alle typischen ALU-Operationen.
Ich würde mal sagen: ADD, SUB, AND, OR, NOT, CMP.

Das eliminiert ALUs, die physisch schmaler sind als logisch (z.B. Z80) 
oder die einige Operationen auch breiter als normal können (wieder Z80, 
16-Bit INC).


XL

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.