PIC 16F887 comf-Befehl sehr eigenartig

OP Persönliche Seite #965296
Lesenswert?
• ▲
▼
Hallo,

ich wollte gerade ausprobieren ob der COMF Befehl eines PIC 16F887 die 
Bits in einem Byte nur umdreht, oder ob er das Zweierkomplement bildet, 
also mit hinzuaddieren (oder Subtrahieren?) einer 1.

Folgender Code:
1
  movlw  b'01101001'
2
  movwf  tmp1
3
  comf  tmp1,w

ergibt in W: b'10010101' also Zweierkomplement.

dagegen ergibt der Code:
1
  movlw  b'01101001'
2
  movwf  tmp1
3
  comf  tmp1,f

in tmp1: b'10010110' also alle Bits vertauscht ohne eine 1 zu 
subtrahieren.

Kann mir einer sagen warum das so ist? Oder spinnt hier der Simulator? 
In der Doku steht nichts von dieser Eigenheit. Danach müsste bei beiden 
Bsp. das selbe herauskommen. Sehr eigenartig das ist...

Sven
OP Persönliche Seite #965333
Lesenswert?
• ▲
▼
Anbei mal noch ein Bild woran der Fehler zu erkennen ist. Füge ich nach 
dem COMF noch ein NOP ein ist alles so, wie es sein sollte. Ohne dieses 
NOP landet aber in W ein falscher Wert, zumindest im Simulator. Wäre mal 
interessant warum das so ist. Da ich jetzt aber weiß, dass die Bits nur 
negiert werden, ist mein Problem erst mal gelöst. Obwohl... Würde mich 
schon interessieren warum er einen falschen Wert nach W schreibt ** 
grübel **.

Sven
Angehängte Dateien:
OP Persönliche Seite #965344
Lesenswert?
• ▲
▼
So, ich habs gefunden. Manchmal ist man halt doch etwas voreilig....

Da ich nur zum Testen die 3 Befehle gleich ab Adresse 0 geschrieben habe 
belegen diese die Speicheradresse 0-2. Auf Adresse 3 steht im Quelltext 
nichts, aber im Speicher! Dort steht eine gelöschte Zelle 0x3FFF was 
einem ADDLW 0xFF entspricht. Der Assembler führt diesen Befehl aus auch 
wenn er nicht im Quelltext steht. Normalerweise hätte ja hier auch 
irgendein Sprungbefehl gestanden. Da es aber eine schneller Test sein 
sollte kam nun dieser "Fehler" zustande. Trotzdem danke für die Hilfe.

Gruß
Sven

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.