kan mij iemand vertellen wat die bank0 , 1, 2, 3
is bij een PIC
het valt mij op dat bv register INTCON in alle 4 de banks terug te vinden is en andere niet

die bank wordt dikwijls ook als commando gebruikt

waarvoor dient dit?

ik heb de datasheet avn de 877 eens gelezen, toch het stuk ivm memory organization, maar ben er nie veel wijzer uit geraakt

vriendelijke groeten

Als je goed kijkt naar het blad met de vier kolommen waarin de geheugenlocaties staan, zie je een aantal registers. Op het moment dat je dus naar een register schrijft dat dezelfde naam heeft in de verschillende banken, is het dus zo dat dit een register is, wat vanuit elke bank te lezen en schrijven is. Er zijn echter ook registers die slechts in een bepaalde bank staan. Dan zul je met behulp van de bank select bits eerst de goede bank moeten selecteren, alvorens je kunt lezen en schrijven naar deze bank. Zo uit mijn hoofd zitten de bankbits volgens mij in het statusregister, maar daarvoor zul je even in de datasheet moeten kijken.

Het data geheugen van een PIC is opgedeeld in banken. Het adres dat in een instructie staat wijst altijd naar een plek binnen de huidige bank. De bank instructie dient om die 'huidige bank' te veranderen.

dank mensen als ik het goed begrijp
moet als je wilt schrijven in het EECON1 register (bank 3)
eerst bank 3 selecteren schrijven in het register en dan de bank terug op 0 zetten (of hoeft dit niet)

dus voor lezen en schrijven hé

dit klopt. Je kunt de bank selection bits rustig laten staan op de waarde die ze hebben, als je er maar rekening mee houdt als je ze later weer gebruikt.

Laurens

Als je de datasheets voor je hebt, kan je bij de voorstelling van de verschillende banken ook het RAM-memory zien, merk dat op dat vanaf adres 0x70 tot 0x7F in bank 0, 0xF0 tot 0xFF in bank 1, 0x170 tot 0x17F in bank 2 en 0x1F0 tot 0x1FF in bank 3 dat deze file registers gedeeld zijn. Dus, bijvb. in bank 0 schrijf je 0xAA naar fileregister 0x7F, dan zal fileregister 0xFF in bank 1, 0x170 in bank 2 en 0x1F0 in bank 3 ook de waarde 0xAA aannemen. Dit heeft te maken met waardes die bij een interrupt gesaved moeten worden (ook Context Savings genaamd) Omdat de PIC niet weet bij een interrupt in werke bank hij zit, save je best W en STATUS in de gedeelde RAMlocaties. Dit moet echter alleen als je project andere banken dan Bank0 gebruikt. Best maak je hier altijd gebruik van.

met het STATUS-register is het net hetzelfde. daarom komt dit ook in iedere bank voor. Stel je voor, de bankselect bits RP0 en RP1 zitten in het STATUS register, ok, je kan van bank veranderen door deze bits te setten of clearen. Als het STATUS-register nu alleen in bank0 zat, en jij zit in Bank2, hoe ga je dan trug naar een andere bank gaan? ;)

Indien je geen bits van een voorwaarde zou moeten testen (zoals Z, C en DC) en je moet van bank 3 naar 0, kan je ook "clrf STATUS" gebruiken, dat spaart weer een instructie. :)

Groeten!