Hi Leute ich habe eine Frage: Das Register SCOn zb hat die Adresse 98Hex und ist wie folgt "ausgebaut": 7 6 5 4 3 2 1 0 SM0 SM1 SM2 REN TB8 RB8 TI RI Nun meine Frage: Unter welcher Adr. erreiche ich das Bit RI oder TI? RI: Ist das sbit TI = 0x98 oder 0x99 TI: Ist das sbit RI = 0x99 oder 0x9A Wäre dankbar für jede Antwort! Schwarzi
Sit mir echt nicht klar! Da steht doch nichts über meine Frage drinnen? Wie ich Bits toggle und so weiß ich doch! hmmmmm
Also wenn ichs richtig gesehen habe geht das ganze so: sfr SCON = 0x98; sbit RI = 0x98; sbit TI = 0x99; usw.............. Hoffe das es so funktioniert! @Peter: Ja schon klar nur die Header-Datei von Atmel schreibt Sbit (TI,0x98, 1) und das versteht das Keil nicht.......deshalb hab ichs umschreiben müssen ! MfG schwarzi
warum sollten denn die 8 einzelnen bits eines 8bit Registers unterschiedliche Adressen haben? Oder hab ich die Frage nicht verstanden. Also eigentlich ist der Verweis aufs wiki doch gar nicht so verkehrt. Um die Bits in dem einen Register zu manipulieren musst du ja im Grunde die Bits an der entsprechenden Adresse manipulieren. Sprich mit einer entsprechenden Bitmaske verodern bzw. verunden. Mach dir auch noch mal den Unterschied zwishen Bits und Byte klar, dann müsste die Verwirrung weggehen.
Ich will ja nichts maskieren oder so sondern einfach das ich das bit TI oder so setzten kann .......... es geht um die adresse wo es zu finden is......... :-)
@Schwarzi: Die Bits sind die Daten im Register. Ein Register besteht aus 8 Bits. Ein Register ist exakt unter einer Adresse gespeichert. Die Bits im Register haben Werte: Bit 0 = Wert 1 = 0x01 Bit 1 = Wert 2 = 0x02 Bit 2 = Wert 4 = 0x04 Bit 3 = Wert 8 = 0x08 Bit 4 = Wert 16 = 0x10 Bit 5 = Wert 32 = 0x20 Bit 6 = Wert 64 = 0x40 Bit 7 = Wert 128 = 0x80 Ist in Deinem Beispiel das Bit "RI", also Bit Nummer 0 im Register SCOn gesetzt, und all anderen Bits sind gelöscht, hat das Register SCOn an der Adresse 0x98 den Wert 0x01. Is das Bit "TI", also Bit Nummer 1 gesetzt, alle anderen Bits gelöscht, ist der Wert des Registers 0x02. Sind alle Bits im Register gesetzt, ist der Wert 0xFF, sind nur die Bits "RI" und "TI" gesetzt, ist der Wert des Registers 0x03. Alles klar? Bits sind Werte im Register; Ein Register hat 8 Bits; Ein Register hat exakt eine Adresse.
Ja danke für die Antwort ist mir aber alles klar! Nur ich kann doch das RI auch einfach so setzten ohne das Register SCON zu maskieren?! Das geht ja nur wie muss man das schreiben bzw. definieren !? Trotzdem danke für die antwort! Spitze erklärt!
Ich glaube ihr redet aneinander vorbei. Es geht ja wohl um ein 8051er-Derivat? Da gibt tatsächlich die Möglichkeit mit dem Befehl SETB einzelne Bits zu setzen, mit CLR zu löschen, mit CPL zu toggeln usw. Dabei hat jedes Bit seine EIGENE Bitadresse, die sich von der Byteadresse des Registers unterscheidet. Zu Schwarzis Frage: Bitadresse von TI = 0x99 Bitadresse von RI = 0x98 Christian
@Schwarzi: Offensichtlich ist Dir nicht alles klar... In welcher Sprache willst Du das Register setzen? In C? Das geht so: SCOn = SCOn | 2; Kürzer: SCOn |= 2; Wenn das Bit "TI" als Bitnummer in den Headers definiert ist: SCOn |= (1<<TI); In der avr-libc gibt's dafür auch ein Makro (find' ich aber nicht so toll): SCOn |= _BV(TI);
Ja Christian du hast recht wird haben an einander vorbeigeredet :-) bzw. geschrieben! So wie ichs oben gschrieben habe und so wie Christian so funktioniert es! Trotzdem allen einen recht herzliches Dankeschön für eure Hilfe und Antworten! MfG Schwarzi
Schwarzi, Sbit (TI,0x98, 1) scheint ein Macro zu sein, d.h. irgendwo muß noch die dazu gehörende Macro-Definition stehen. Aber warum nimmst Du die *.h-Files nicht von Keil ? @Michael (ein anderer), die 8051-er haben die Besonderheit, daß alle IO-Register, deren Adresse /8 teilbar ist, auch Bit-adressierbar sind. Z.B. von Register 0x88 haben die einzelnen Bits die Adressen 0x88..0x8F. Peter
@Peter Dannegger: Das ist ja lustig. Das wusste ich in der Tat noch nicht... (man lernt eben wirklich nie, nie, niemals aus). Wie funktioniert das dann genau? Welche Werte finden sich im Register an der "Bit-Adresse"? 0x00 und 0xFF? Oder werden die jeweils nicht benutzten Bitnummern bei Schreiben ignoriert und beim Lesen sind die immer null, so dass man sich ein maskieren sparen kann? @Schwarzi: Ja, offensichtlich haben wir aneinander vorbeigeredet... Mir ist aber auch nicht aufgefallen, dass in Deinem Posting kein Prozessortyp angegeben war und ich deshalb, ohne es zu bemerken, von einem AVR ausgegangen bin... Klassisches Missverständnis. ;-)
@Michael: Nein, an den Bitadressen findet man keine kompletten Bytes (also 0x00, 0xFF oder sonst was) sondern nur ein Bit (also 0 oder 1). Der 8051 hat Bitmanipulationsbefehle (SETB, CLR, CPL, Sprungbefehle usw.) die mit diesen Bitadressen arbeiten. SETB RI bzw. SETB 0x98 würde also das Bit 0 (RI) im Register mit der Byte-Adresse 0x98 (SCON) setzen, SETB 0x99 das Bit 1 (TI) an der selben Byteadresse. Christian
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.