PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 8-Bit Mikrocontroller?



Johannes84
19.12.2005, 19:54
Hallo,

kann mir vielleicht mal jemand erklären was es genau mit der Bitzahl von Prozessoren/Controllern auf sich hat? Kann ein 8-bit-Controller in einem Takt 8 Eingänge gleichzeitig auslesen?
Kann man in einem Takt zwei 8-Bitzahlen addieren? Kann man in einem Takt 2 4-BitZahlen addieren?

Danke im voraus
Johannes

izaseba
19.12.2005, 20:39
Hallo,

Kann ein 8-bit-Controller in einem Takt 8 Eingänge gleichzeitig auslesen?
Wenn die Eingänge auf einem Port liegen ja:

in R16,PINB -> dauer 1 Takt



Kann man in einem Takt zwei 8-Bitzahlen addieren?

Wenn die Zwei zahlen schon in zwei Registern gespeichert sind ja

add R16,R17 -> 1 Takt



Kann man in einem Takt 2 4-BitZahlen addieren?

4 Bit Zahlen liegen ja auch in 8 Bit Registern, belegen aber nur die untersten 4 Bits womit wohl hier die Antwort zu Frage 2 gilt.

Ich würde sagen, der Ausdruck 8 Bit Controller kommt davon, daß die Register 8 Bit aufnehmen können, mehr nicht.
Bei den AVRs gibt es ja nur 8 Bit Register, wenn man größere Zahlen addieren will muß man sie ja in mehrere Register aufspliten.

Gruß Sebastian

Johannes84
19.12.2005, 20:54
vielen Dank für die Antwort!

"in R16,PINB"

bedeutet, dass in Register 16 alle 8 anliegenden Signale des Port B geschrieben werden?
Unter Pin habe ich eigentlich ein "Beinchen" verstanden...

izaseba
19.12.2005, 21:00
bedeutet, dass in Register 16 alle 8 anliegenden Signale des Port B geschrieben werden?

PINB ist ein (wer häte es gedacht) 8 Bit Register, in dem der Zustand vom PORTB gespeichert ist.

Je nach AVR Modell sind das bis zu 8 Pins(Beinchen).

und in R16,PINB kopiert,wie Du schon gemerkt hast, den Inhalt in den R16 Register.

Gruß Sebastian

Jahn Kohlhas
19.12.2005, 21:02
8Bit rechner *schmunzel* tja das ist ne lange geschichte... am anfang der computertechnik war man sich noch nicht so ganz grün wie man rechner baut... man war sich nicht mal wirklich darüber einig ob die digital oder analog funzen sollen... deutsche raketentechnik arbeitete zum beispiel mit analogrechnern... die gibt es sogar noch heute, nur nennt die keiner mehr so... die tauchen heute als operationsverstärker auf... tja und da gabs einen der arbeitet im team die die atombome gbaut haben... der war dafür verantwortlich festzulegen wie die rechner gebaut werden sollen, die den mist berechnen sollten den die amis dann auch noch zwei mal locker an lebenden menschen ausprobiert haben... der typ hieß jhon von neumann und der hat in recht anschaulichen sätzen formuliert wie man am einfachsten computer baut.... 1. ein rechner besteht aus midestens eingabe-, ausgabegeräten, rechenwerk, steuerwerk und hauptspeicher, die intern verwendetet signalmenge ist binär codiert (digitalrechner) und so weiter... eine weitere vereinfachung war das der rechner nur worte fester länge verarbeitet... damit war festgelegt wie speicher, register, datenbus usw. organisiert sind also 4 bit zusammengefasst oder 8 bit, oder 16 bit usw. das ist eine der wichtigsten vereinfachungen neben der das programme und daten in einem speicher untergebracht werden und sequentiell verarnbeitet werden... 8 bit rechner heißt also das register, datenbus, ports speicherzellen usw. alle gleich groß sind nämlich 8 bit zu einem byte zusammengefasst... inzischen ist man aber schon etwas schlauer und arbeitet nicht mehr ausschließlich nach der von neuman architektur... AVRs zum beispiel haben eine harvard architektur... die haben getrennte Speicher für Programme und Daten (FLASH und SRAM) ... und die sind auch noch unterschiedlich organisiert flash 16Bit sram 8 Bit ... also ist zum beispiel ein AVR eigentlich gar kein reiner 8 Bit rechner mehr *schmunzel* ... mein tip... ein bisschen geschichte der rechentechnik ist ne ziemlich spannende geschichte *schmunzel*

Gruß jahn

Johannes84
19.12.2005, 21:08
alles klar, vielen Dank, hat mir schon sehr weitergeholfen zum Verständnis!

Johannes84
19.12.2005, 21:12
jetzt muss ich doch nochmal das von vorhin aufgreifen:

Kann man in einem Takt zwei 8-Bitzahlen addieren?


Wenn die Zwei zahlen schon in zwei Registern gespeichert sind ja

add R16,R17 -> 1 Takt


aber wenn ich zu R16 R17 dazuaddiere, dann "sprenge" ich doch damit das Register, das Zielregister müsste größer als 8bit sein, oder warum nicht?

izaseba
19.12.2005, 21:35
aber wenn ich zu R16 R17 dazuaddiere, dann "sprenge" ich doch damit das Register, das Zielregister müsste größer als 8bit sein, oder warum nicht?

Scharf beobachtet :-)

Und jetzt ?
Bei 8 Bit Registern darf man nur Zahlen zusammenrechnen die als Ergebnis höchstens 255 oder 11111111 betragen?
Zum Glück nicht, sonst wäre das ziemlich langweilig...
1. Möglichkeit:
Du mußt als Programmierer sicherstellen das das Ergebnis nicht größer als 255 wird.
2. Möglichkeit:
Man geht auf Nummer sicher und bereitet für das Ergebnis zwei Register!
Das geht etwa so:

R16 -> Zahl1 HIGH
R17 -> Zahl1 LOW
R18 -> Zahl2
R19 -> ein Hilfsregister
Damit hast Du für das Ergebnis 2 Register also insgesammt 16 Bit
Beim AVR gibt es noch sowas schönes wie Statusregister SREG dort gibt es wiederum ein Bit mit dem schönem namen Carry.
wenn Du jetzt z.B

add R16,R17 machst, wo R16 255 ist und R17 1 wird R16 "gesprengt" läuft also über...
er nimmt den Wert 0 an und Carrybit im SREG wird auf 1 gesetzt um Dir mitzuteilen, daß da was übergelaufen ist.
um das auszunutzen macht man es folgendermaßen:
add R17,R18 ;addiere R17 mit R18
ldi R19,0x00 ;lade 0 in R19
adc R16,R19 ;addiere R16,R19 UND den Carry dazu

jetzt sieht R16,R17 so aus: 00000001 00000000

wenn Dich das so genau interessiert, suche mal im Forum nach dem Assembler Kurs für Anfänger, dort habe ich versucht das alles zu erklären.

Gruß Sebastian

Johannes84
19.12.2005, 21:53
ah, okay, d.h. aber 2 8bit Zahlen kann ich nur in einem Takt addieren, wenn sie zusammen nicht mehr als 11111111 darstellen. wenn doch dann sind mehr Takte notwendig...

danke, ich werd mir mal den assembler kurs anschauen!

Jahn Kohlhas
19.12.2005, 22:33
tja, langsam macht es klick *schmunzel* das konzept datenworte fester länge zu verarbeiten stellt eben eine ziemliche vereinfachung dar welche praktisch probleme verursacht wie das "Überlaufen" von speicherzellen... dazu solltest du dir noch mal die bedeutung des Carry-Flags ansehen... der weg ist die verarbeitungsbreite zu erhöhen... E-technischist das einfachste modell mehr verarbeitungsbreite zu bekommen einfach das was man hat zusammenzuschalten... man hat 4 bit register die schaltet man zu 8 bit registern zusammen und der nächste schritt ist die 8 bit zu 16 bit zusammenzuschlten... kaskadieren nennt man das... brutal einen 16 bit controller nehmen um mit größeren werten zu arbeiten oder .... *grins* AVRs haben die fähigkeit einige ihrer 8 bitregister für 16 bit-oprationen zu kaskadieren... da ist es dann möglich auch zwei 8 bit zahlen zu verarbeiten bei denen das ergebnis größer als 8 bit ist... oder sogar 16 bit werte zu verarbeiten ... siehe dazu zum beispiel den Befehl adiw, mul, usw.
die sache mit dem "in einem Takt" das hat primär erstmal damit nichts zu tun... das problem hat ein 8051 auch und der braucht 12 Takte... diese 1-Takt-geschichte hat was mit der inneren Architektur der AVRs zu tun (RISC mit full static opcodes)

CU Jahn

super_castle
20.12.2005, 00:05
*schmunzel*8 bitregister für 16 bit-oprationen zu kaskadieren*grins*
*klick*.. das heisst nicht kaskadieren..*schmunzel*...*klick*
*schmunzel*...jhon von neumann...*klick*
der Name ist auch falsch*schmunzel*

Castle

Jahn Kohlhas
20.12.2005, 09:12
oh, super konstruktiver beitrag *schmunzel* klick...

natürlich bin ich bestimmt nicht feri von irrtümern, und lasse mich auch gern korrigieren und lerne gern dazu, also dann versuchen wir uns mal an der sache

Berichtigung: John von Neumann

Definition: Kaskadenschaltung
aus Wikipedia, der freien Enzyklopädie
Bei einer Kaskadenschaltung wird eine elektrische Baugruppe mehrfach hintereinander angeordnet (kaskadiert)....

AVRs arbeiten mit vollstatischen operationen, das heißt zum beispiel hier wird kein microcode im controller ausgeführt um überträge zu transportieren, bei oprationen die ein kaskadiertes registerpaar betreffen werden überträge nicht durchs CY Flag geschaufelt sondern direkt von regsiter zu register... dazu müssen intern beide regsiter "hintereinander angeordnet" und verschaltet sein... fachbegriff kaskadiert, da nicht alle regsiter so angeordnet sind (platz/kosten) lassen sich bestimmt opreatioenn auch nicht auf alle registerpaare anwenden vergleichge dazu berdeutung des Zielregsiterpaares r0:r1 oder die speziellen Adressregsiter XYZ für 16 Bit adressoperationen beim AVR...

echt super Beitrag muss ich schon sagen, super super super super_castel *schmunzel* hast wirklich dazu beigetragen eine 8 bit architektur zu verstehen...

CU jahn

PicNick
20.12.2005, 11:51
Na, das wurde aber auch Zeit *schmunzelschmunzelrülpsgrins*
Der arme Neumann mit falschem "H" war ja auch nicht zu erkennen. *Klick**crlf*
:mrgreen:

Johannes84
20.12.2005, 14:21
*schmunzel* =) *klick*