Hallo allemaal,

Misschien raar maar ik zoek geen verklaring waarom iets niet werkt maar eigenlijk waarom het wel werkt.

Ik ben al enige tijd bezig met het schrijven van een programma voor de PIC16f877A. Deze Pic heeft een program memory van 8K (opgesplitst in 4 pages van 2K).
-page 0 0000H- 07FFH
-page 1 0800H- 0FFFH
-page 2 1000H- 17FFH
-page 3 1800H- 1FFFH
Het programma is inmiddels zo groot dat ik inmiddels bezig ben in memory page 3.

Het overschakelen naar een andere page doe ik door bit 3 en 4 van het PCLATH register te setten of te clearen.

Bit3 =0, bit4 =0 select page 0
Bit3 =1, bit4 =0 select page 1
Bit3 =0, bit4 =1 select page 2
Bit3 =1, bit4 =1 select page 3

Nu werkt alles perfect ik kan probleemloos van bv een stukje programma in page 0 overschakelen naar een programma in page 3 en weer terug of van page 1 naar page 2 enz.

Maar nu het volgende;
Als een programma vanuit page 0 verder moet gaan naar een programma in page 3 doe ik het volgende;
BSF PCLATH,4 (maak bit 4 hoog)
BSF PCLATH,3 (maak bit 3 hoog)

Nadat de eerste instructie BSF PCLATH,4 (maak bit 4 hoog)uitgevoerd is zit je dus eigenlijk al in page 2 (bit 3 is op dat moment nog laag).

Hoe kan dan de volgende instructie BSF PCLATH,3 uitgevoerd worden terwijl deze instructie in page 0 staat?

Toch lijkt het allemaal goed te werken.
Heb ik gewoon puur geluk of is dit de juiste manier om tussen verschillende pages te switchen?

Alvast bedankt voor jullie reactie

De methode die je gebruikt is gewoon goed.

Die "paging" bits worden alleen gebruikt als je een goto of call instructie gebruikt. Dus niet bij andere instructies, dan word de PC gewoon met eentje opgehoogd (binnen zijn 2K bank waar ie zit)

Bedankt voor je reactie.

Het is me duidelijk, dat met die goto en call instructie had ik even niet bij stilgestaan.