30.07.2015 Views

La programmation des PICs - Seconde partie

La programmation des PICs - Seconde partie

La programmation des PICs - Seconde partie

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Par contre, comme votre programme revient à sa page d’appel après le return, vous devrezrepositionner correctement PCLATH pour éviter qu’un saut « ordinaire » ne prenne encompte votre modification de PCLATH.Le retour s’effectuera donc toujours correctement quelles que soient les pages d’appel etd’emplacement de la sous-routine. Reste seulement à établir pour les « call », les macroscorrespondant aux « goto ». Les voici :CALLX macro ADRESSE; call inter-pagelocal BIT4 = (ADRESSE & 0x1000) ; voir bit 12local BIT3 = (ADRESSE & 0x0800) ; voir bit 11local ICI; adresse couranteICIlocal PICI = (ICI+2 & 0x1800) ; page du sautIF BIT3 ; si page 1 ou 3bsf PCLATH , 3 ; b3 de PCLATH = 1ELSE; sinonbcf PCLATH , 3 ; b3 de PCLATH = 0ENDIFIF BIT4 ; si page 2 ou 3bsf PCLATH , 4 ; b4 de PCLATH = 1ELSE; sinonbcf PCLATH , 4 ; b4 de PCLATH = 0ENDIFcall (ADRESSE & 0x7FF | PICI) ; adresse simuléelocal BIT4 = ((ICI+5)& 0x1000) ; voir bit 12local BIT3 = ((ICI+5) & 0x0800) ; voir bit 11IF BIT3 ; si page 1 ou 3bsf PCLATH , 3 ; b3 de PCLATH = 1ELSE; sinonbcf PCLATH , 3 ; b3 de PCLATH = 0ENDIFIF BIT4 ; si page 2 ou 3bsf PCLATH , 4 ; b4 de PCLATH = 1ELSE; sinonbcf PCLATH , 4 ; b4 de PCLATH = 0ENDIFendmCALLSX macro ADRESSElocal ICIlocal PICI = (ICI+2 & 0x1800)ICIcall (ADRESSE & 0x7FF | PICI)endm; sous-routine inter-page sans; sélection de PCLATH; adresse courante; page du saut; adresse simulée<strong>La</strong> macro PCLAX étant identique, inutile de l’écrire deux fois.Le calcul (ICI+5) se justifie par le raisonnement suivant :Il importe de repositionner PCLATH pour qu’il pointe dans la page courante, afin d’éviterqu’un simple « goto » ou un « call » à l’intérieur de la page ne provoque en réalité un sautdans la page précédemment pointée par PCLATH modifié par la macro. Tout ceci est réaliséautomatiquement par notre macro CALLX39

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!