Forum: Mikrocontroller und Digitale Elektronik Probleme mit PIC16C71


von zp5ui (Gast)


Lesenswert?

Hallo Leute!

Ich habe in meiner Firma ein projekt mit einem PIC16C71 geerbt.
Der ursprüngliche Entwickler ist schon vor Jahren verschwunden,
Quellen sind nicht auffindbar. Das ganze wurde über einen längeren
zeitraum von der Produktion einfach mit der Hex datei immer wieder
dupliziert. Nun soll etwas geändert werden. Ich habe das ganze
über einen Disassembler gejagt und dabei festgestellt dass der
Entwickler unbekannte Opcodes verwendet. Und zwar 0x0066 (wird
gleich nach dem Reset ausgeführt) und 0x0062 sowie 0x0065.

Kann mir jemand sagen was das für Befehle sind?

MfG

von Anja (Gast)


Lesenswert?

zp5ui schrieb:
> und dabei festgestellt dass der
> Entwickler unbekannte Opcodes verwendet.

Du hast aber einen merkwürdigen Disassembler.
MPLAB liefert "TRIS + Register" oder "OPTION" bei den Opcodes.

Gruß Anja

von zp5ui (Gast)


Lesenswert?

Hallo!
Das kann so ganz nicht stimmen. Option ist ein Register und kein
Mnemonic, genauso TRIS. Das gabe es bei alten PIC 16C5X.
Da musste aber das W-Register entsprechend geladen sein. Die 0x062 ist 
der absolut erste Befehl nach Reset.

von Ollus (Gast)


Lesenswert?

Komisch, im Datenblatt steht das aber anders. Die Befehle werden noch 
unterstützt, man solle sie aber bitteschön nicht mehr benutzen.
Wenn man so ein Projekt bekommt, bitte erstmal das Datenblatt 
runterladen und mindestens eine Nacht unters Kopfkissen legen....

von ./. (Gast)


Lesenswert?

> Die Befehle werden noch unterstützt, man solle sie aber bitteschön nicht
> mehr benutzen.

Lustigerweise fehlt in aktuellen Datenblaettern (z.b. 16F1508/9) dieser
Hinweis wieder und OPTION und TRIS sind ganz normal gelistet.

von Chris B. (dekatz)


Lesenswert?

Der 16C71 hat einen 14-Bit Befehlssatz und bei dem gibt es mit der 
Kombination 00 0000 011x xxxx genau 2 Befehle:
0x0064 = 00 0000 0110 0100 = CLRWDT
0x0063 = 00 0000 0100 0011 = SLEEP

@TO: Ich kenne deinen Disassembler nicht, aber bist du dir sicher das 
der Disassembler auf den 14-Bit-Befehlssatz gestellt ist und nicht auf 
den 12-Bit Befehlssatz?
Denn beim 12-Bit-Befehlssatz ist 0000 011x xxxx der CLRF Befehl und die 
3 "illegalen" Opcodes sind dann

0x062 = 0000 0110 0010 = CLRF PCL
0x065 = 0000 0110 0101 = CLRF OSCCAL
0x066 = 0000 0110 0110 = CLRF GPIO

...wobei CLRF OSCCAL nicht unbedingt Sinn machen würde....

von ./. (Gast)


Angehängte Dateien:

Lesenswert?

62 := OPTION Load OPTION_REG with W
65 := TRISA  Load TRISA with W
66 := TRISB  Load TRISB with W

von Chris B. (dekatz)


Lesenswert?

Stimmt!
Nur tauchen die in meiner Version des 16C71 Datasheet (DS30272A-page 70) 
in der Tabelle 9.2 mit dem Instruction set nicht auf....erst bei der 
Beschreibung von OPTION und TRIS kommt der Hinweis und dort habe ich 
nicht mehr nachgesehen ;-)

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.