La gestion des banks des PIC16 posent souvent aux débutants des problèmes. De plus, c’est un mécanisme jugé obsolète vis à vis d’autres micro contrôleurs mais il faut faire avec dès lors que le programme est écrit en assembleur. C’est pourquoi, il est présenté ici quelques règles simples pour faciliter leurs utilisations dans le cadre d’un pic16f628a mais également applicable pour d’autres pics comme le pic16f84.
• Préférer l’emploi des directives offertes par l’assembleur au lieu de manipuler directement les bits RP0 et RP1 du registre de STATUS.
Exemple avec gpasm de la chaine de production GNU PIC Utilities:
#define BANK0 banksel 0x0 ; Selection Bank0 [0x0, …, 0x7F] |
#define BANK1 banksel 0x80 ; Selection Bank1 [0x80, …, 0xFF] |
#define BANK2 banksel 0x100 ; Selection Bank2 [0x100, …, 0x17F] |
#define BANK3 banksel 0x180 ; Selection Bank3 [0x180, …, 0x1FF] |
Lors de leur utilisation, il sera généré le code suivant (exemple avec BANK1):
bsf 0x3, 0x5 BANK1 ; Mise a 1 du bit RP0 du registre STATUS |
bcf 0x3, 0x6 ; Mise a 0 du bit RP1 du registre STATUS |
Il est possible d’optimiser le changement de bank en définissant ses propres macros indiquant la transition de banks depuis lequel s’effectue ce changement.
BANK1_TO_BANK0 macro |
bcf STATUS,RP0 ; BANK1 => BANK0 |
endm |
BANK0_TO_BANK1 macro |
bsf STATUS,RP0 ; BANK0 => BANK1 |
endm |
Pages: 1 2