«

»

Gestion des Banks des PIC16

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

 

Important!

Cette méthode peut être employée lorsque seuls les 2 banks BANK0 et BANK1 sont utilisés. De plus, un mot de programme est gagné à chaque changement, ce qui diminue d’autant la taille du code.

Ces mêmes macros peuvent être utilisées lors des changements depuis le BANK2 vers le BANK3 et vice versa car dans ce cas, le bit RP1 positionné à 1 reste inchangé.

Warning!

Ne pas utiliser cette méthode en entrée de la procédure d’interruption car le bank depuis lequel s’effectue le changement n’est à priori pas toujours le même.