Ik heb het artikel gelezen van Bastiaan Steenbergen http://www.circuitsonline.net/artikelen/view.php?id=8&page=1

Alles is super duidelijk alleen 1 ding snap ik nog niet geheel:

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. Dus krijgen we de volgende code krijgen:

instelporta EQU 85h
BSF 03,5
CLRF instelporta
BCF 03,5

Nu heb ik wel dit goed gelezen:

BCF f, b Bit clear f

Dit is een instructie waarmee je een bit kunt clearen, dus een 0 maken. Je moet als extra info opgeven in welke file het bit staat, en om welk bitnummer het gaat.
Voorbeeld: BCF 25h, 4h
Hierbij zal dus bitnummer 4 in datafile op locatie 25h, een 0 worden. Stel dat er in adres 25h de bitreeks 0111.0111 staat, dan zal na deze instructie de data op dat adres er als volgt uitzien: 0110.0111
BSF f, b Bit set f

Dit is dezelfde instructie als hierboven alleen dan wordt het bit op de gegevens locatie geset.

Nu snap ik niet geheel waar die banken in eens vandaan komen.
Word daar de W mee bedoeld of zijn banken weer heel iets anders?
Kan iemand mij hier een kleine uitleg van geven.
Alvast bedankt.

Een 'bank' moet je zien als een collectie 'files'. Zowel bank 0 als 1 gebruiken dezelfde nummering voor files. Dit heeft als gevolg dat je dus zelf moet wisselen tussen de banken, als je files in een andere bank nodig hebt. Hiervoor kijkt de mcu naar file #03, bitje 5 (in beide banks, anders zou je niet meer terug kunnen switchen).

Stel je maar voor dat je een kast hebt met deurtjes, en elk deurtje heeft een nummer, bv. van 1 to 10. Naargelang je huishouden uitbreidt wil je meer deurtjes, maar dat wordt onoverzichtelijk.
Dus maak je gewoon een tweede reeks deurtjes bij, en een klep die ofwel de ene rij deurtjes toegankelijk maakt ofwel de andere. Normaliter staat de klep aan de ene kant, en kun je aan de ene reeks deurtjes aan. Wil je in een van de andere deurtjes, dan zet je eerst de klep om, en via dezelfde nummers kun je nu aan de tien andere deurtjes. Na gedane zaken moet je er wel aan denken de klep terug naar de normale positie te brengen; daartoe is nodig dat de betreffende "file" (zelf spreek ik liever over een register, maar goed) altijd toegankelijk is, m.a.w. hiervoor speelt de klep effe niet mee.

Uiteraard zet je achter de tweede bank met deurtjes die zaken die je niet zo vaak nodig hebt, dan moet je niet zo dikwijls met de klep schuiven. Zoals bv. richting-registers, in veel gevallen schrijf je die eenmalig tijdens de initialisatie en blijf je er verder af.

[Bericht gewijzigd door big_fat_mama op (19%)]

Dankjewel voor jullie antwoorden. big_fat_mama goede jip en janneke uitleg haha maar ik snapte hem.

Nog 1 vraagje, waar in het programmeren definieer je wat in welke bank moet staan, of is dat vast gelegd per µC?

Dat staat allemaal vermeld in de datasheet van die pic.

Zoals 90% van alle antwoorden op de vragen die gesteld worden op ieder willekeurig forum in een datasheet te vinden of op een andere manier op te zoeken is. Fora zijn er om elkaar te helpen, niet om door te verwijzen. ;)

[Bericht gewijzigd door Henry S. op (27%)]

Oké dus het is per µC verschillend. Bedankt voor jullie reacties.

[Bericht gewijzigd door Henry S. op (72%)]

Niet alle micros hebben uberhaupt die banken zoals in de PICs. Dat hangt helemaal van de interne architectuur af.
Bij de PICs zit nog een stuk history van de minimalistische architectuur van het eerste uur in. Toen moest alles so simpel en klein mogelijk om het goedkoop te houden (13 bits adres bv). Dat maakt het hier en daar wat onlogisch (vind ik).

AVR heeft geen banken, ook niet alle PIC's dacht ik, maar PIC16F... iig wel.

Op 20 april 2012 12:01:56 schreef elleuh:
Nog 1 vraagje, waar in het programmeren definieer je wat in welke bank moet staan, of is dat vast gelegd per µC?

De fysieke indeling van het geheugen is vast.
Zie het als een kast met planken, elke bank is een plank en een bank heeft een bepaald beginadres.
De manier waarop je de banken vult verschilt per ontwikkelomgeving.
Zo kun je in PIC assembler gewoon achter elkaar variabelen definiëren die dus vervolgens de banken vullen, maar je kunt ook aangeven in welke bank een variabele moet komen.

Het voorbeeld dat je aanhaalt in je startpost heeft te maken met de systeemregisters. Die zijn door de leverancier bepaald en daar kun je dus niets aan veranderen.
Als je de datasheet van de PIC16F84(A) hebt (kun je downloaden van de MicroChip site) dan zie je op pag 6 in figure 2-2 de twee banken van de systeemregisters. Elke bank is in dit geval 128 bytes groot.

De instructies met BCF en BSF kloppen, maar zijn erg lastig te onthouden. Als je in assembler werkt kun je dat ook zo oplossen:


banksel naam_van_het_register

Als je met PicBasic werkt hoef je je geen zorgen te maken over de banken, dat doet de compiler voor je.

W is het werkregister, dat is het register waar veel van de instructies mee werken als het om rekenen en logische bewerkingen gaat. Stel je hebt een variabele 'teller'. Dan kun je deze met incf of decf verhogen of verlagen (telkens met 1), maar je kunt er niet opeens 12 bij optellen. Daar gebruik je het W register voor.