Hallo, kann mir, ein absoluter Newbie, sagen was der Befehl mov p1, 10 macht. Was ist die 10 für ein Wert? #10 wäre ja 10 Hexadezimal. Aber für was steht nur die 10? Gruß Peter
Peter Steiner schrieb: > Was ist die 10 für ein Wert? > #10 wäre ja 10 Hexadezimal. Aber für was steht nur die 10? eventuell für die Zahl 10?
Wenn das ein einfacher Assembler für Intel-Mikros (8051 o.ä.) ist, dann wird mit diesem Befehl der dezimale Wert 10 in das Port-Register p1 (das ist in diesem Fall halt ein vordefinierter Name) geschrieben. Beim 8051 wären dann die Portleitungen P1.1 und P1.3 auf High gesetzt. Bei anderen Mikrocontrollern kann das ganz anders sein, ebenso wenn p1 vorher anders definiert wurde. Dann wird eben der Wert 10 an die Speicherstelle geladen, die im Assembler den Namen p1 erhalten hat.
mov p1, 10 lädt nicht den Wert 10 in den Port P1 (das wäre mov p1,#10), sondern den Inhalt des Registers 10. mfG ingo
Danke für die Antworten. Es müsste ein Kontroller aus der Intel 8051 Familie sein. Im Simulator habe ich das Problem: mov r0, #10 So läuft er genau 10mal eine folgende Schleife durch. mov r0, 10 Hier fängt er bei ff = 255 an. Kann es sein das hier die 10 eine Programmadresse ist?
ingo schrieb: > den Inhalt des Registers 10. Der 8051 hat nur 8 Register. Peter Steiner schrieb: > Kann es sein das hier die 10 eine Programmadresse ist? Es ist eine Adresse in den 128 (oder 256 beim 8052) Byte RAM. Der Inhalt von Adresse 10 im RAM wird an dem Port P1 ausgegeben. Gruß Jobst
> Der 8051 hat nur 8 Register. um ganz korrekt zu sein 4 Registerbänke a 8 Register > mov p1, 10 könnte also auch R2 aus der Registerbank1 an den Port1 senden ;-) wobei Ich mir allerdings nicht vorstellen kann, dass der TO schon die Registerbänke umschalten kann. Thomas
Peter Steiner schrieb: > mov r0, #10 Konstante (hier = 10dez) ins Register R0 laden . > mov r0, 10 Daten aus interner Adresse ins Register R0 laden, wobei 0...127=RAM, 128...255 SFR (Special Function Register, d.h. I/O, Port, Control-Register, Status-Register etc.). Gruß Dietrich
Peter Steiner schrieb: > #10 wäre ja 10 Hexadezimal. Aber für was steht nur die 10? Autsch! Das "#" heisst "Immediate" und bedeutet "Schreibe die folgende Zahl in das Register". Wenn da nur eine Zahl steht, ist das eine Dezimalzahl. Also nach "mov p1, #10" steht der Wert 10 in p1, also liegt am Ausgang an, wenn es ein Port ist. Eine Hexadezimalzahl kann man je nach Assembler 0x0A, $0A oder 0Ah scheiben. Meistens werden alle drei Schreibweisen akzeptiert. Also "mov p1, #$0A" schreibt auch eine "10" auf den Port. "mov p1, 10" oder auch "mov p1, 0x0A" ist direkte Adressierung und schreibt den Inhalt der Adresse 10 auf den Port. Tröste dich. Dieser Fehler ist Anfängers Liebling. mfg.
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.