hoi,
ik zou graag experimenteren met de 16F84 zoals hier op de site. ik het deze nog niet, maar heb wel al op internet net wat gezocht en zo, en ik begin het een beetje te snappen. nu zag ik op op internet een voorbeeldje van een code, ma der is iets dat ik niet begrijp.

Start ORG 0x00
BSF 03,5 ;Go to page1 to set the ports
MOVLW 00h ;Put 00 into W
MOVWF 05h ;Make all RA lines output
MOVWF 06h ;Make all RB lines output
BCF 03,5 ;Go to Page0 for programming

..... (en zo verder)

elke keer de 16F84 gestart word gebruikt men " BSF 03,5 " en " BCF 03,5 ". nu ik weet wel waarvoor de BSF en BCF staat, maar ik begrijp niet waarom ze die regels gebruiken. wat ze bedoelen met " go to page1... " en zo snap ik ook niet echt :s . ik kon het ook niet echt vinden op de tutorial hier op de site. ik ben zeker dat iemand mij meer kan vertellen.
alvast bedankt

Ik zal het hier ff snel uitleggen.
Het geheugen van de PIC is gebanked. Dat wil zeggen dat je alleen op bepaalde gebieden kan komen als je die gebieden kiest.

Zo heeft de PIC bank 1 en bank 0. In de datasheet kan je daar meer over vinden (wat welke bank is). Het is zo dat voor de I/O, dus poort A en B je 2 dingen kan instellen. Je kunt instellen of het in of uitgang moet zijn. En je kan vertellen of het een 1 of een 0 moet geven aan de buitenwereld in het geval van een output.

Het geheugengebied waar je kan instellen of het in of uitgang is kun je alleen bereiken als je bank 1 hebt aanstaan. En wil je bijvoorbeeld ledjes laten branden dan moet je een stukje geheugen benaderen dat alleen te bereiken is als bank 0 is "geschakeld".

Omdat je altijd aan het begin van je programma de in- en outputs moet instellen zie je altijd dat ze even naar bank 1 springen. Dan die poorten instellen en weer naar bank 0 springen.
Bank 0 is de meest gebruikelijke en daar kun je de normale dingen in doen, daarom zal je de rest van het programma meestal in bank 0 blijven.

Hoe kies je nou de goede bank?
Dat doe je door in register 03 (status register) bitje 5 te veranderen. Daarom staat er BCF 03,5. Als je bit 5 in file 03 cleared selecteer je bank 0, set je bit 5 dan selecteer je bank 1.

Op deze page zie je onder "Registers/Geheugen" een plaatje met daarop aangegeven hoe het geheugen eruit ziet en precies bank 0 en 1 is.

Een stukje uit de tutorial:


Er is alleen een "maar". Niet elk register in het geheugen
van de PIC is direct toegankelijk. Dit is ook het geval
bij het poort A direction register. Om er toch bij te
kunnen moeten we de controller in een andere bank zetten,
namelijk bank 1. Dit doe je met de instructie: BSF 03,5.
Nadat de richting van poort A (en eventueel B) is
ingesteld moet je weer terug naar bank 0 met : BCF 03,5.

Ik hoop dat je het zo een beetje snapt. Het is best moeilijk die banken. Ik kan je ook nog uitleggen waarom ze dat bij Microchip zo hebben gedaan maar dat laat ik maar achterwege.

[Bericht gewijzigd door Bastiaan op ]

heel hard bedankt. nu begrijp ik er tenminste iets van.
kweet nie hoe het komt dat ik er in de tutorial overgelezen ben, ik had hem nochthans helemaal gelezen en uitgeprint...

Op vr 09-08-2002 17:36:48 schreef Bastiaan:
Ik hoop dat je het zo een beetje snapt. Het is best moeilijk die banken. Ik kan je ook nog uitleggen waarom ze dat bij Microchip zo hebben gedaan maar dat laat ik maar achterwege.

als je wil mag je mij dat ook uitleggen hoor. Ik weet graag waarom iets is.

Op vr 09-08-2002 23:59:57 schreef sille:
heel hard bedankt. nu begrijp ik er tenminste iets van.
kweet nie hoe het komt dat ik er in de tutorial overgelezen ben, ik had hem nochthans helemaal gelezen en uitgeprint...

Ik vindt het leuk om te horen dat je het hebt gelezen.
Ik heb trouwens hierboven meer uitgelegd dan in de tutorial.

[...]
als je wil mag je mij dat ook uitleggen hoor. Ik weet graag waarom iets is.

Vooruit dan maar :), omdat ik zelf ook altijd alles wil weten.

Zodra jij een register wilt aanspreken om erin te schrijven of te lezen dan moet je de interne hardware natuurlijk vertellen waar dat register zich bevindt. Ze hebben ervoor gekozen om dat adres een maximale breedte te geven van 7 bits. (Die keuze heeft te maken met overwegingen die ze maken met betrekking tot de hardware.)
Alleen met 7 bits adresbreedte kan je maar een beperkt gebied aanwijzen. De RAM gebieden reiken verder dan die 7 bits kunnen aanwijzen. Daarom hebben ze banken gebruikt. Zo kun je dus met het 7-bits brede adres en een bankbit erbij toch een groter RAM gebied bereiken.
Zodra jij iets aanwijst plakt de hardware daar het bankbit voorop, zodat je dus een 8-bits adres krijgt.

Extra info:
Voor het ROM (dus het geheugen waar je programma in staat) wordt een andere adresseerder gebruikt. Deze heeft een 13-bits adres. En kan dus 8k maximaal aanwijzen, aangezien de PIC maar 1K geheugen heeft, zijn hier geen banken voor nodig omdat de adresbreedte vergenoeg reikt.

merci!
ik heb al heel wat bijgeleerd.
ik heb vandaag naar de winkel geweest dus ik kan eindelijk beginne experimenteren :)