Forum: Mikrocontroller und Digitale Elektronik PIC ASM Befehl Sprung bei PIC16F877


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jens (Gast)


Lesenswert?

Hi,

ich habe hier einen Codeschnipsel:

BCF 0xa,0x4     adresse 062f
BSF 0xa,0x3             0630
goto 0x458              0631

0xa ist PCLATH bei dem Ding. Die Bits 3 und 4 sind die werthöchsten des 
PC.

Demnach landet der Sprung bei 0x458 + 0x1000 + 0x800, richtig?

Im Manual lese ich folgendes:

The
CALL and GOTO instructions provide only 11 bits of
address to allow branching within any 2K program
memory page. When doing a CALL or GOTO instruction,
the upper 2 bits of the address are provided by
PCLATH<4:3>. When doing a CALL or GOTO instruction,
the user must ensure that the page select bits are
programmed so that the desired program memory
page is addressed. If a return from a CALL instruction
(or interrupt) is executed, the entire 13-bit PC is popped
off the stack.

unter 2.4 Memory Paging.

Wenn ich richtig verstehe muss ich die beiden Bits vor einem Call oder 
Goto setzen. Bei einem Rücksprung aus einem Call kommt er aber 
automatisch an die richtige Stelle zurück.

Demnach müsste beim goto nichts auf den Stack gepackt werden, ich frage 
nur zu sicherheit auch wenn es eigentlich logisch ist.

Was ist, wenn ich die Bits in PCLATH setze und den goto oder call nicht 
ausführe? Immerhin habe ich den PC ja eigentlich trotzdem 
"verbogen"...oder sind das "schattenbits" die wirklich nur bei call oder 
goto übernommen werden?

JJ

von Anja (Gast)


Lesenswert?

Jens schrieb:
> Demnach müsste beim goto nichts auf den Stack gepackt werden,

nö, nur der call-Befehl kopiert die Rücksprungadresse auf den Stack.

Jens schrieb:
> Immerhin habe ich den PC ja eigentlich trotzdem
> "verbogen".
nö, nur das PCLATH-Register. das hat mit dem PC (PCH, PCL) nix zu tun, 
außer daß beim CALL oder GOTO die beiden Bits ins PCH-Register kopiert 
werden.
(siehe Figure 2-5 im Datenblatt).

Die Überraschung kommt dann beim nächsten call oder goto-Befehl.

Übrigens: nach einem RETURN-Befehl steht PCLATH in der Regel immer noch 
auf dem Wert der vor dem CALL-Befehl hineingeschrieben wurde. Also nach 
dem call immer schön die Register wieder auf die richtige Page stellen.

Gruß Anja

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.