Wie muß ich die Aprungmarken setzen und den GOTO-Befehl richtig anwenden, damit das funktioniert? Ich habe nun schon einige Progs ausprobiert, aber immer wenn ich eine Warteschleife machen will, läuft das Prog nicht mehr..... Mit einfachen Kontrollausgaben hab ich inzwischen festgestellt, das es bis zu der Zeile, wo ich einen Sprung ausfühten lasse richtig funktioniert, den goto-Befehl aber nicht kor´rekt erledigt, bzw. ab der Stelle gar nichts mehr tut. Also auch die nachfolgenden Zeilen (wenn kein Sprung gemacht werden soll) werden nicht ausgeführt......
Hallo, Sprungmarken müssen immer an 1. Stelle beginnen, z. B.: nop goto wait nop wait nop nop return Die nop sind nur Beispiels für den richtigen Code. Normaler Programmcode darf nicht an Stelle eins beginnen. Gruß Markus
Kleiner Tippfehler von Marcus: nop goto wait ; Springt zum Label wait Weiter nop : wait nop nop goto Weiter ; Springt zum Label Weiter Das Return würde ohne vorheriges Call einen Stacküberlauf verursachen. Steffen
Die PICs haben einen segmentierten Adreßraum. Daher muß beim 16F84 das PCLATH Register richtig geladen sein, damit ein GOTO (oder CALL) funktioniert. Das PCLATH sollte grundsätzlich immer mit geladen werden, damit Code auch über Segmentgrenzen verschiebbar ist. Du suchst Dich sonst tot, wenn durch das Einfügen eines Befehls plötzlich an ganz anderer Stelle ein GOTO in den Wald zeigt. Peter
Davon stand in meiner ANleitung nichts......... Wie mache ich das mit dem PCLATH denn richtig????????
Das mit dem PCLATH ist bei manchen Prozessoren richtig, trifft aber beim 16F84A nicht zu. Der hat nur 1kWord Programmspeicher, die sind linear adressiert. Jedenfalls für CALLs und GOTOs. Ich glaube so rum wird das nichts. Poste doch einfach mal deinen Code (wenn´s viel ist als Anhang) + verwendeten Prozessor. Da können wir mal drüberschauen.
http://www.mikrocontroller.net/forum/read-8-125877.html#new Da steht der Quellcode. Leider hab ich in der Version die Variablen, die ich mir oben definiert habe nicht weiter benutzt, weil ich ausschließen wollte, das darin der Fehler lag.......... Danke für eure Mühe!
Ich habe selber den 16F84A nicht verwendet, die Informationen habe ich nur dem Datenblatt entnommen: GOTO Unconditional Branch Syntax: [ label ] GOTO k Operands: 0 £ k £ 2047 Operation: k ® PC<10:0> PCLATH<4:3> ® PC<12:11> Status Affected: None Description: GOTO is an unconditional branch. The eleven-bit immediate value is loaded into PC bits <10:0>. The upper bits of PC are loaded from PCLATH<4:3>. GOTO is a twocycle instruction Da ist das Datenblatt wohl durch Copy&Paste aus einem größeren PIC entstanden und man hat vergessen es anzupassen. Peter
@Peter Das ist der Standarttext für alle PICs mit 14-Bit breitem Befehlssatz. Beim GOTO werden im Befehl 11 Bit übergeben. Damit sind jeweils Bänke von 2k linear adressierbar und der 16F84 hat nur 1k. Bei PICs mit mehr als 2k Programmspeicher muss man dann die Bits in PCLATH entsprechend setzen. Ist aber ein beliebter Fehler. Daher war dein Hinweis schon OK. Steffen
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.